日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Laravel 源码解读:php artisan make:auth

發布時間:2025/4/16 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Laravel 源码解读:php artisan make:auth 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學 Laravel 和 Vuejs,你真應該來 codecasts.com ,有免費高質量視頻!

在 Laravel 5.2 的時候,官方給我們提供了 make:auth 命令,這個命令使得我們在執行一條命令的情況下實現用戶注冊和登錄,忘記密碼,找回密碼的過程!本文來看一下 make:auth 的源碼。

源碼在哪

還是一樣的,使用編輯器的搜索功能,直接搜索 MakeAuthCommand,你會找到這個文件 Illuminate\Auth\Console\MakeAuthCommand,而這些 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() 方法可以直接在 Illuminate\Support\Facades\Auth:

public static function routes() {static::$app->make('router')->auth(); }

最終執行路由注冊的在 Illuminate\Routing\Router 的 auth() 方法:

public function auth(){// routes codes ...}

最后揭秘

那么這些視圖文件,控制器文件和路由文件在哪呢?揭秘:就在 vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make 目錄,你打開這個目錄就可以看到這些魔法的真相!

Happy Hacking

最后記得關注 codecasts 公眾號,定期送書送福利!

總結

以上是生活随笔為你收集整理的Laravel 源码解读:php artisan make:auth的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。