Thinkphp5 assign 傳遞 " 時 ,前臺收到的是 " 和ThinkPHP3.2不同,3.2收到的是 」,傳遞給js時php
用的data.replace(new RegExp('"','g'),'"')替換回來
貌似很差,獲取值的時候能夠用 {$data.abc|raw} 解決傳入參數"替換"問題
也就是若是前臺傳入的是json數據 後臺用 { |raw}解決
Thinkphp5.1
在部分Base.php 控制器中 \think\Request::instance()->controller()根本調用不到
須要 \think\facade\Request::instance()->controller() 能夠,
前臺url連接指向其餘控制器方法時可用
{foreach name="vo" item="val"} <li id="{$val.title}"> <a href=" {:url($val.model.'/'.$val.action)}">{$val.title}</a> </li> {/foreach}
當前臺輸出輸出數據時html
輸出的效果是git
網頁源代碼能夠看到因果github
想要的效果是thinkphp
解決方式數據庫
瀏覽器開發者工具中json
網頁源代碼中數組
總結:模板動態輸出含標籤的html代碼,或者雙引號時,默認輸出結果會通過htmlentities()轉義,結果不是咱們想要的,解決辦法時{XX|raw}瀏覽器
模板繼承的時候第二種模板標籤方式 replace="[XXX]" 不要用replace="{XXX}" 不然會意外多出 「/>
Thinkphp5.1用Model類時,return數據
在控制器dump返回的數據時顯示是一個數組————坑
array_merge()老是提示不是數組
用var_dump()打印Model返回值時發現,那是一個對象
想要Model返回array對象增長一個->toArray()
Coin::where('userid',$data)->find()->toArray();緩存
Thinkphp5.1遇到的坑
某兩個類似的時間戳前臺用,已提交issure,已改進 githubIssure githubCode
輸出
一個輸出的是
有的輸出就不正確,打印出變量查看時間戳是正確的
產看緩存中的輸出
再追究
$time = 1508982277; //2017/10/26 9:44:37 var_dump(strtotime($time)); echo '<br>'; $time = 1508489607; //2017/10/20 16:53:27 var_dump(strtotime($time));
這結果!!
3.2是這麼幹的
模型關聯刪除問題
A hanMany B
public function test() { $user = A::get(1); echo '<pre>'; $temp = $user->products; var_dump($temp); //獲得的是think\model\Collection對象
var_dump($user->products()->select()); //獲得的是think\model\Collection對象,$user->products()獲得的是hasMany對象
var_dump($user->products()->where('id', 28)->find()); //獲得B對象
var_dump($user->products()->where('id', 28)->delete()); //數據庫中數據已刪除
var_dump($user->products()->select()); //id = 28 的數據已刪除
var_dump($temp); //id = 28 的數據依舊存在
}
object(think\model\Collection)#99 (1) {
["items":protected]=>
array(3) {
[0]=>
object(app\user\model\ShopCar)#102 (2) {
["data"]=>
array(5) {
["id"]=>
int(27)
["產品id"]=>
int(2)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757081)
}
["relation"]=>
array(0) {
}
}
[1]=>
object(app\user\model\ShopCar)#101 (2) {
["data"]=>
array(5) {
["id"]=>
int(28)
["產品id"]=>
int(5)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757086)
}
["relation"]=>
array(0) {
}
}
[2]=>
object(app\user\model\ShopCar)#100 (2) {
["data"]=>
array(5) {
["id"]=>
int(29)
["產品id"]=>
int(6)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757861)
}
["relation"]=>
array(0) {
}
}
}
}
object(think\model\Collection)#95 (1) {
["items":protected]=>
array(3) {
[0]=>
object(app\user\model\ShopCar)#16 (2) {
["data"]=>
array(5) {
["id"]=>
int(27)
["產品id"]=>
int(2)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757081)
}
["relation"]=>
array(0) {
}
}
[1]=>
object(app\user\model\ShopCar)#96 (2) {
["data"]=>
array(5) {
["id"]=>
int(28)
["產品id"]=>
int(5)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757086)
}
["relation"]=>
array(0) {
}
}
[2]=>
object(app\user\model\ShopCar)#97 (2) {
["data"]=>
array(5) {
["id"]=>
int(29)
["產品id"]=>
int(6)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757861)
}
["relation"]=>
array(0) {
}
}
}
}
object(app\user\model\ShopCar)#16 (2) {
["data"]=>
array(5) {
["id"]=>
int(28)
["產品id"]=>
int(5)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757086)
}
["relation"]=>
array(0) {
}
}
int(1)
object(think\model\Collection)#87 (1) {
["items":protected]=>
array(2) {
[0]=>
object(app\user\model\ShopCar)#90 (2) {
["data"]=>
array(5) {
["id"]=>
int(27)
["產品id"]=>
int(2)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757081)
}
["relation"]=>
array(0) {
}
}
[1]=>
object(app\user\model\ShopCar)#89 (2) {
["data"]=>
array(5) {
["id"]=>
int(29)
["產品id"]=>
int(6)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757861)
}
["relation"]=>
array(0) {
}
}
}
}
object(think\model\Collection)#99 (1) {
["items":protected]=>
array(3) {
[0]=>
object(app\user\model\ShopCar)#102 (2) {
["data"]=>
array(5) {
["id"]=>
int(27)
["產品id"]=>
int(2)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757081)
}
["relation"]=>
array(0) {
}
}
[1]=>
object(app\user\model\ShopCar)#101 (2) {
["data"]=>
array(5) {
["id"]=>
int(28)
["產品id"]=>
int(5)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757086)
}
["relation"]=>
array(0) {
}
}
[2]=>
object(app\user\model\ShopCar)#100 (2) {
["data"]=>
array(5) {
["id"]=>
int(29)
["產品id"]=>
int(6)
["數量"]=>
int(1)
["編號"]=>
string(3) "gao"
["操做時間"]=>
int(1509757861)
}
["relation"]=>
array(0) {
}
}
}
}
模型能夠直接當成普通方式查詢數據,當join()後返回的再也不是模型對象,而是array數據
ShopCar::where([['a.編號', '=', $userName], ['b.狀態', '=', '使用']])->alias('a') ->join(['商城產品' => 'b'], 'a.產品id = b.id', 'LEFT')->column('a.產品id,a.數量,b.價格,b.pv,b.可訂購數量,b.名稱,b.重量,(b.可訂購數量-a.數量) as numLeft', 'a.id');
行鎖lock(true) 或者lock(false)什麼也不作
ThinkPHP5.1
thinkphp\library\think\route\dispatch\Module.php P108 用到 is_callable()方法
if (is_callable([$instance, $action])) { // 執行操做方法 $call = [$instance, $action]; // 自動獲取請求變量 $vars = $this->app->config('app.url_param_type') ? $this->app['request']->route() : $this->app['request']->param(); } elseif (is_callable([$instance, '_empty'])) { // 空操做 $call = [$instance, '_empty']; $vars = [$actionName]; } else { // 操做不存在 throw new HttpException(404, 'method not exists:' . get_class($instance) . '->' . $action . '()'); } $this->app['hook']->listen('action_begin', $call); return Container::getInstance()->invokeMethod($call, $vars); }
可是當 $instance中有 __call 方法時,is_callable([$instance, $action]) 返回的總爲true,須要注意,貌似Thinkphp5中反射致使的__call方法無效(我的臨時理解)
colin 03-Oct-2010 08:30 //代碼塊來自PHP手冊 I haven't seen anyone note this before, but is_callable will correctly determine the existence of methods made with __call. The method_exists function will not. Example: <?php class Test { public function testing($not = false) { $not = $not ? 'true' : 'false'; echo "testing - not: $not<br/>"; } public function __call($name, $args) { if(preg_match('/^not([A-Z]\w+)$/', $name, $matches)) { $fn_name = strtolower($matches[1]); if(method_exists($this, $fn_name)) { $args[] = true; // add NOT boolean to args return call_user_func_array(array($this, $matches[1]), $args); } } die("No method with name: $name<br/>"); } } $t = new Test(); $t->testing(); $t->notTesting(); echo "exists: ".method_exists($t, 'notTesting').'<br/>'; echo "callable: ".is_callable(array($t, 'notTesting')); ?> Output: testing - not: false testing - not: true exists: callable: 1
Thinphp5手冊上說讓用中文表名,中文字段,沒有詳細說明
我的能夠想到的地方,
一是 pdo操做佔位符的時候沒特殊處理,見
二是 中文表名得在model主動聲明我這個model對應的是哪一個表,英文代表通常可省略
三是Model返回的全是對象,字段其實是對象的屬性 ->id來調用,若是把id換成中文名稱,怪怪的,還沒見過誰的代碼真用中文作變量。雖然也能夠用 $obj['id’]查看屬性的值
支付寶驗證規則 郵箱/手機號/淘寶會員名
// 郵箱/手機號/淘寶會員名 'aliPay|c' => 'require|length:3,25', 'aliPay|d' => ['regex'=>'/^\w+((@\w{1,4}.\w{1,4})|(\w*))$/'],
以爲還比較理想
20171110
開發的項目中有這麼個需求,對數據庫中獲取的數據進行加工。3.2的時候用的在控制器中獲取數據庫,而後用控制器中的方法修改數據。如今5.1嘗試用模型的獲取器。可是發現
中的$data是一個數組,也就是不能用模型關聯中的數據。那可不行。
嘗試後用$this對象訪問即可
數據庫/模型 返回類型
(new AModel)->saveAll($list) 返回的是插入的條數,ep:int(1)