摘要:添加路由在方法中,通過下面幾行代碼添加路由注意這個參數,就是將這個文件的內容附加在原來路由文件的后面,并不會將原來的路由清零。
學 Laravel 和 Vuejs,你真應該來 codecasts.com ,有免費高質量視頻!
在 Laravel 5.2 的時候,官方給我們提供了 make:auth 命令,這個命令使得我們在執行一條命令的情況下實現用戶注冊和登錄,忘記密碼,找回密碼的過程!本文來看一下 make:auth 的源碼。
源碼在哪還是一樣的,使用編輯器的搜索功能,直接搜索 MakeAuthCommand,你會找到這個文件 IlluminateAuthConsoleMakeAuthCommand,而這些 artisan 的命令,我們關注的重點就是 fire() 這個方法:
public function fire() { $this->createDirectories(); // other codes ... }1.創建目錄
首先 createDirectories() 創建必要的目錄:
protected function createDirectories() { if (! is_dir(resource_path("views/layouts"))) { mkdir(resource_path("views/layouts"), 0755, true); } if (! is_dir(resource_path("views/auth/passwords"))) { mkdir(resource_path("views/auth/passwords"), 0755, true); } }
這里可以看到此命令會創建兩個文件夾,就是 resources/views/layouts 和 resources/views/auth/password
2.復制文件有了目錄之后,在 fire() 方法里,createDirectories() 的后面,大概有這樣的一行代碼:
public function fire() { // other codes ... $this->exportViews(); // other codes ... }
那么 exportViews() 做的事情就是復制文件了:
protected function exportViews() { foreach ($this->views as $key => $value) { if (file_exists(resource_path("views/".$value)) && ! $this->option("force")) { if (! $this->confirm("The [{$value}] view already exists. Do you want to replace it?")) { continue; } } copy( __DIR__."/stubs/make/views/".$key, resource_path("views/".$value) ); } }
首先通過 foreach 檢查要復制的文件是否存在,不存在的話,直接使用 copy() 復制文件,這些文件名字的定義在 $this->views 里面:
protected $views = [ "auth/login.stub" => "auth/login.blade.php", "auth/register.stub" => "auth/register.blade.php", "auth/passwords/email.stub" => "auth/passwords/email.blade.php", "auth/passwords/reset.stub" => "auth/passwords/reset.blade.php", "layouts/app.stub" => "layouts/app.blade.php", "home.stub" => "home.blade.php", ];
這個定義就在 MakeAuthCommand 文件里面。然后這里你就可以清楚地看到我們要復制的視圖文件有哪些了!
3.生成控制器還是在 fire() 方法中,通過下面幾行代碼生成控制器:
file_put_contents( app_path("Http/Controllers/HomeController.php"), $this->compileControllerStub() );
我們來看看 compileControllerStub() 具體怎么實現:
protected function compileControllerStub() { return str_replace( "{{namespace}}", $this->getAppNamespace(), file_get_contents(__DIR__."/stubs/make/controllers/HomeController.stub") ); }
可以看到,思路是這樣的:1.獲取原先定義好的控制器文件 --> 2.用 getAppNamespace 替換 {{namespace}} ;這樣我們就可以正確確定控制器的命名空間。
4.添加路由在 fire() 方法中,通過下面幾行代碼添加路由:
file_put_contents( base_path("routes/web.php"), file_get_contents(__DIR__."/stubs/make/routes.stub"), FILE_APPEND );
注意 FILE_APPEND 這個參數,就是將 routes.stub 這個文件的內容附加在原來路由文件的后面,并不會將原來的路由清零。那么添加的是下面的這兩條路由:
Auth::routes(); Route::get("/home", "HomeController@index")->name("home");
其中的 Auth::routes() 方法可以直接在 IlluminateSupportFacadesAuth:
public static function routes() { static::$app->make("router")->auth(); }
最終執行路由注冊的在 IlluminateRoutingRouter 的 auth() 方法:
public function auth(){ // routes codes ... }最后揭秘
那么這些視圖文件,控制器文件和路由文件在哪呢?揭秘:就在 vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make 目錄,你打開這個目錄就可以看到這些魔法的真相!
Happy Hacking
最后記得關注 codecasts 公眾號,定期送書送福利!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23166.html
摘要:系統的核心是由的認證組件的看守器和提供器組成。使用的認證系統,幾乎所有東西都已經為你配置好了。其配置文件位于,其中包含了用于調整認證服務行為的注釋清晰的選項配置。 用戶認證系統(基礎介紹) 使用過Laravel的開發者都知道,Laravel自帶了一個認證系統來提供基本的用戶注冊、登錄、認證、找回密碼,如果Auth系統里提供的基礎功能不滿足需求還可以很方便的在這些基礎功能上進行擴展。這篇...
摘要:前言由于在度娘找了半天根本一大堆版本,弄得我死去活來的,每個都試了一堆問題,到底你們做完有沒有總結過一次然后有幾個使用,完全不行啊,太監版不是我想要的。后來,終于找到例子并實測成功。 前言 由于在度娘找了半天根本一大堆Copy版本,弄得我死去活來的,每個都試了一堆問題,到底你們做完有沒有總結過一次?然后有幾個使用lunmen+dingo api+jwt,完全不行啊,太監版不是我想要的。...
摘要:自動代碼擴展開發時遵守的代碼風格是項目開發規范。遵照此規范,在實際操作中,有許多重復,接下來推薦一款專為此規范量身定制的代碼生成器。可以利用此擴展來快速構建項目原型。后續還會為大家帶來一些最新的技術擴展。 whoops 錯誤提示擴展 whoops 是一個非常優秀的 PHP Debug 擴展,它能夠使你在開發中快速定位出錯的位置。laravel默認安裝。showImg(https://s...
摘要:自動代碼擴展開發時遵守的代碼風格是項目開發規范。遵照此規范,在實際操作中,有許多重復,接下來推薦一款專為此規范量身定制的代碼生成器。可以利用此擴展來快速構建項目原型。后續還會為大家帶來一些最新的技術擴展。 whoops 錯誤提示擴展 whoops 是一個非常優秀的 PHP Debug 擴展,它能夠使你在開發中快速定位出錯的位置。laravel默認安裝。showImg(https://s...
閱讀 701·2021-11-18 10:02
閱讀 2235·2021-11-15 18:13
閱讀 3139·2021-11-15 11:38
閱讀 2934·2021-09-22 15:55
閱讀 3667·2021-08-09 13:43
閱讀 2438·2021-07-25 14:19
閱讀 2449·2019-08-30 14:15
閱讀 3441·2019-08-30 14:15