Lumen、Laravel開發問題記錄

前言:我的雜項php

2018.5.17 14:55html

1. lumne 鏈接Sqlite時,一直報錯: Call to a member function connection() on nulllaravel

解決方法:sql

app.php中打開Orm的註釋!!!坑爹,誰關了!!!segmentfault

 

17:03數組

2. lumen、laravel配置打印sqlapp

https://blog.csdn.net/zy994914376/article/details/54891068框架

當前,本身配置的是lumen。與laravle 不一樣的是lumen沒有make listener的命令,因此有些包須要本身導入。ide

 

2018.6.1 16:58函數

1. laravel源碼學習,自動加載的疑惑。關於spl_autoload_register()

https://segmentfault.com/q/1010000012093950

ps:spl_autoload_register()函數中隊列已經存在的方法,若是不unregister的話,是一直存在的!以前,個人認知是覺得只能使用一次,這個是錯誤的。

 

2018.6.4 11:15

1.  laravel源碼學習,new static的疑惑(門面的代碼部分)

延遲動態綁定,以前我是瞭解過的。可是有點不明白的是,在源碼中爲何要new static,估計是給其餘部分繼承的、

後續,本身看了下有關的知識,更深層次瞭解了下new static 與new self 的區別。

參考:https://blog.csdn.net/qq_25600055/article/details/78549435

本身另外一篇講解:

http://www.cnblogs.com/mikusnail/p/9132520.html

 

2. trait 的總結:

1) 優先級:當前類的方法會覆蓋trait中的方法,而trait中的方法會覆蓋基類的方法

2 ) 多個trait組合:經過逗號分隔,經過use關鍵字列出多個trait

3) 衝突的解決:若是兩個trait都插入了一個同名的方法,若沒明確解決衝突將會產生一個致命的錯誤。爲了解決多個trait在同一個類中的命名衝突,須要使用insteadof操做符來明確指定使用衝突方法中的哪個。

同時,能夠經過as操做符將其中一個衝突的方法以另外一個名稱來引入

4) 修改方法的訪問控制:使用as語法能夠用來調整方法的訪問控制

5) trait的抽象方法:在trait中可使用抽象成員,使得類中 必須實現這個抽象方法

6) trait的靜態成員:在trait中能夠用靜態方法和靜態變量

7)  trait的屬性定義:在trait中一樣能夠定義屬性

 

2018.6.7 13:26

1. laravel 的路由namesapce是從 App\Http\Controllers開始的,因此只要從這部分後面開始指定便可。

 

2018.6.13  15:29

1. laravel 中的請求處理管道(其實,大白話是一個請求進入框架中的生命週期)使用的是裝飾者模式

簡易理解版本的demo():

 1 interface Step {
 2     public static function go(Closure $next);
 3 }
 4 
 5 class FirstStep implements Step {
 6     public static function go(Closure $next) {
 7         echo 'start' . '<br />';
 8         $next();
 9         echo 'end' . '<br />';
10     }
11 }
12 
13 function goFun($step,$className) {
14     return function() use($step,$className) {
15         return $className::go($step);
16     };
17 }
18 
19 function then() {
20     $steps = ["FirstStep"];
21     $prepare = function(){
22         echo 'prepare' . '<br />';
23     };
24     $go = array_reduce($steps,"goFun",$prepare);   //此處能夠精簡爲: call_user_func();
25     $go();
26 }
27 
28 then();

執行結果:

start
prepare
end

ps: 

其實,laravel內部維護了一個請求須要通過哪些步驟類的數組,經過順序加載來達到前、後中間件的效果。

 

2018.6.14 15:55

1.  Laravel 中獲取文件的.env文件行數的代碼:

 $autodetect = ini_get('auto_detect_line_endings');
        ini_set('auto_detect_line_endings', '1');
        $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        ini_set('auto_detect_line_endings', $autodetect);

        return $lines;

ps:

1.  auto_detect_line_endings的設置(這個,我真的是不看文檔真的不知道,可見author是老司機啊~)

若是碰到 PHP 在讀取文件時不能識別 Macintosh 文件的行結束符,能夠激活 auto_detect_line_endings 運行時配置選項。

2. file函數的第二個參數,w3c上只是一個include_path,其實否則。(可見,平時仍是用手冊吧)

 

2. :todo

https://www.jianshu.com/p/ee92b36e2839

 

 

2018.6.22 10:35

1. 關於laravel路由執行的代碼,目前還沒有深究,先作個記錄

 

2018.6.28 16:00

1.  執行遷移 php artisan migrate

1071 Specified key was too long; max key length is 1000 bytes

解決方法:

  1. 升級MySql版本到5.5.3以上。(以前我本身升級過,貌似不行。。。可能姿式不對?)

  2. 手動配置遷移命令migrate生成的默認字符串長度,在AppServiceProvider中調用Schema::defaultStringLength方法來實現配置:

  添加,use Illuminate\Support\Facades\Schema;

  boot方法中添加,Schema::defaultStringLength(191);

 

2018.6.29 14:02

1. laravel自定義包開發

https://blog.csdn.net/juner_ge/article/details/51766830

相關文章
相關標籤/搜索