Laravel 控制器
在MVC框架中,字母“C”代表Controller。它充當(dāng)視圖和模型之間的指揮流量。在本章中,您將了解Laravel中的控制器。
創(chuàng)建一個控制器
根據(jù)您使用的操作系統(tǒng)打開命令提示符或終端,并使用Artisan CLI(命令行界面)鍵入以下命令創(chuàng)建控制器。
php artisan make:controller <controller-name> --plain</controller-name>
將 w替換為控制器的名稱。這將創(chuàng)建一個簡單的構(gòu)造函數(shù),因為我們正在傳遞參數(shù) - 純粹 。如果你不想創(chuàng)建一個簡單的構(gòu)造函數(shù),你可以簡單地忽略這個參數(shù)。創(chuàng)建的構(gòu)造函數(shù)可以在 app / Http / Controllers中 看到。
您將看到已經(jīng)為您完成了一些基本編碼,您可以添加自定義編碼。創(chuàng)建的控制器可以通過下面的語法從routes.php中調(diào)用。
句法
Route::get(‘base URI’,’controller@method’);
例
第1步 - 執(zhí)行以下命令來創(chuàng)建 UserController 。
php artisan make:controller UserController --plain
第2步 - 成功執(zhí)行后,您將收到以下輸出。
第3步 - 您可以在 app / Http / Controller / UserController.php中 看到已創(chuàng)建的控制器,并且已經(jīng)為您編寫了一些基本代碼,您可以根據(jù)需要添加自己的代碼。
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { // }
控制器中間件
我們之前見過中間件,它也可以和控制器一起使用。中間件也可以分配給控制器的路由或控制器的構(gòu)造函數(shù)中。您可以使用中間件方法將中間件分配給控制器。注冊的中間件也可以限制為控制器的某些方法。
分配中間件到路由
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]);
這里我們在配置文件路由中為UserController分配auth中間件。
在Controller的構(gòu)造函數(shù)中分配中間件
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { public function __construct(){ $this--->middleware('auth'); } }
這里我們使用 UserController 構(gòu)造函數(shù)中的中間件方法來分配 auth 中間件。 **
例
第1步 - 將以下代碼行添加到 app / Http / routes.php 文件并保存。
routes.php文件
Route::get('/usercontroller/path',[ 'middleware' =--> 'First', 'uses' => 'UserController@showPath' ]);
第2步 - 通過執(zhí)行以下代碼行來創(chuàng)建名為 FirstMiddleware 的中間件。
php artisan make:middleware FirstMiddleware
第3步 - 將以下代碼添加到 app / Http / Middleware 新創(chuàng)建的FirstMiddleware 的 句柄 方法中。 **
FirstMiddleware.php
namespace App\Http\Middleware; use Closure; class FirstMiddleware { public function handle($request, Closure $next) { echo ' First Middleware'; return $next($request); } }
第4步 - 通過執(zhí)行以下命令創(chuàng)建一個名為 SecondMiddleware 的中間件。
php artisan make:middleware SecondMiddleware
第5步 - 在 app / Http / Middleware 新創(chuàng)建的SecondMiddleware的句柄方法中添加以下代碼。
SecondMiddleware.php
namespace App\Http\Middleware; use Closure; class SecondMiddleware { public function handle($request, Closure $next){ echo ' Second Middleware'; return $next($request); } }
第6步 - 通過執(zhí)行以下行創(chuàng)建一個名為 UserController 的控制器。
php artisan make:controller UserController --plain
第7步 - 成功執(zhí)行URL后,您將收到以下輸出 -
第8步 - 將以下代碼復(fù)制到 app / Http / UserController.php 文件。
應(yīng)用程序/ HTTP / UserController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { public function __construct(){ $this--->middleware('Second'); } public function showPath(Request $request){ $uri = $request->path(); echo ' URI: '.$uri; $url = $request->url(); echo ' '; echo 'URL: '.$url; $method = $request->method(); echo ' '; echo 'Method: '.$method; } }
第9步 - 現(xiàn)在通過執(zhí)行以下命令啟動php的內(nèi)部Web服務(wù)器,如果尚未執(zhí)行它。
php artisan serve
第10步 - 訪問以下URL。
http://localhost:8000/usercontroller/path
第11步 - 輸出將如下圖所示。

安穩(wěn)的資源控制器
通常在創(chuàng)建應(yīng)用程序時,我們需要執(zhí)行 CRUD(創(chuàng)建,讀取,更新,刪除) 操作。Laravel使我們的工作變得簡單。只需創(chuàng)建一個控制器,Laravel將自動提供CRUD操作的所有方法。您還可以為routes.php文件中的所有方法注冊單個路由。
例
第1步 - 通過執(zhí)行以下命令創(chuàng)建一個名為 MyController 的控制器。
php artisan make:controller MyController
第2步 - 在下面添加代碼
app / Http / Controllers / MyController.php 文件。
應(yīng)用程序/ HTTP /控制器/ MyController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class MyController extends Controller { public function index(){ echo 'index'; } public function create(){ echo 'create'; } public function store(Request $request){ echo 'store'; } public function show($id){ echo 'show'; } public function edit($id){ echo 'edit'; } public function update(Request $request, $id){ echo 'update'; } public function destroy($id){ echo 'destroy'; } }
第3步 - 在 app / Http / routes.php 文件中添加以下代碼行。
應(yīng)用程序/ HTTP / routes.php文件
Route::resource('my','MyController');
第4步 - 我們現(xiàn)在通過向資源注冊一個控制器來注冊MyController的所有方法。 以下是資源控制器處理的操作表。
動詞 | 路徑 | 行動 | 路線名稱 |
---|---|---|---|
得到 | /我的 | 指數(shù) | my.index |
得到 | /我的/創(chuàng)建 | 創(chuàng)建 | my.create |
POST | /我的 | 商店 | my.store |
得到 | /我的我的} | 顯示 | my.show |
得到 | /我的/ {}我/編輯 | 編輯 | my.edit |
PUT / PATCH | /我的我的} | 更新 | my.update |
刪除 | /我的我的} | 破壞 | my.destroy |
第5步 - 嘗試執(zhí)行下表中顯示的URL。
網(wǎng)址 | 描述 | 輸出圖像 |
---|---|---|
HTTP://本地主機:8000 /我的 | 執(zhí)行MyController.php的索引方法 | 指數(shù) |
HTTP://本地主機:8000 /我/創(chuàng)建 | 執(zhí)行MyController.php的創(chuàng)建方法 | 創(chuàng)建 |
HTTP://本地主機:8000 /我/ 1 | 執(zhí)行MyController.php的show方法 | 顯示 |
HTTP://本地主機:8000 /我的/ 1 /編輯 | 執(zhí)行MyController.php的編輯方法 | 編輯 |
隱式控制器
隱式控制器允許您定義單個路由來處理控制器中的每個操作。你可以使用 Route:controller 方法在route.php文件中定義它,如下所示。
Route::controller(‘base URI’,’<class-name-of-the-controller>’);</class-name-of-the-controller>
用您給控制器的類名替換。
控制器的方法名稱應(yīng)該以get或post之類的HTTP動詞開頭。如果你用get來啟動它,它將只處理請求,如果它以post開始,它將處理post請求。在HTTP動詞之后,您可以為該方法指定任何名稱,但它應(yīng)該遵循URI的標題大小寫版本。
例
步驟1 - 執(zhí)行以下命令來創(chuàng)建控制器。 我們保留了類名 ImplicitController 。你可以給你的任何名字給你的選擇。
php artisan make:controller ImplicitController --plain
第2步 - 成功執(zhí)行第1步后,您將收到以下輸出 -
第3步 - 將以下代碼復(fù)制到
app / Http / Controllers / ImplicitController.php 文件。
應(yīng)用程序/ HTTP /控制器/ ImplicitController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { /** * Responds to requests to GET /test */ public function getIndex(){ echo 'index method'; } /** * Responds to requests to GET /test/show/1 */ public function getShow($id){ echo 'show method'; } /** * Responds to requests to GET /test/admin-profile */ public function getAdminProfile(){ echo 'admin profile method'; } /** * Responds to requests to POST /test/profile */ public function postProfile(){ echo 'profile method'; } }
第4步 - 將以 下行添加到 app / Http / routes.php 文件以將請求路由到指定的控制器。
應(yīng)用程序/ HTTP / routes.php文件
Route::controller('test','ImplicitController');
構(gòu)造函數(shù)注入
Laravel服務(wù)容器用于解析所有Laravel控制器。因此,您可以鍵入提示您的控制器在其構(gòu)造函數(shù)中可能需要的任何依賴項。依賴關(guān)系將自動解析并注入到控制器實例中。
例
第1步 - 將以下代碼添加到 app / Http / routes.php 文件中。
應(yīng)用程序/ HTTP / routes.php文件
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
第2步 - 將以下代碼添加到
app / Http / Controllers / ImplicitController.php 文件。
應(yīng)用程序/ HTTP /控制器/ ImplicitController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { private $myclass; public function __construct(\MyClass $myclass){ $this--->myclass = $myclass; } public function index(){ dd($this->myclass); } }
第3步 - 訪問以下URL以測試構(gòu)造器注入。
http://localhost:8000/myclass
第4步 - 輸出將如下圖所示。
方法注射
除了構(gòu)造函數(shù)注入之外,您還可以鍵入 - 提示控制器操作方法的依賴關(guān)系。
例
第1步 - 將以下代碼添加到 app / Http / routes.php 文件中。
應(yīng)用程序/ HTTP / routes.php文件
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
第2步 - 將以下代碼添加到
app / Http / Controllers / ImplicitController.php 文件。
應(yīng)用程序/ HTTP /控制器/ ImplicitController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { public function index(\MyClass $myclass){ dd($myclass); } }<strong>第3步</strong> - 訪問以下URL以測試構(gòu)造器注入。
http://localhost:8000/myclass它會產(chǎn)生以下輸出 -
<img src="/Public/core/edit/php/../attached/20231217144441_69567.jpg" alt="" border="0" />