創建一個控制器
php artisan make:controller <controller-name> --plain
替換 <controller-name> 為您的控制器的名稱。我們將創建一個簡單的構造器使用傳遞一個參數— plain。 如果不希望創建一個普通的構造函數,可以忽略參數。 創建的構造函數在 app/Http/Controllers. 你會看到一些基本的編碼已經自動生成了,你可以自定義添加編碼。創建控制器可以通過routes.php檔中使用以下語法調用。
語法
Route::get(‘base URI’,’controller@method’);
示例
php artisan make:controller UserController

第3步 - 你可以在 app/Http/Controller/UserController.php 看到創建控制器已經自動生成一些基本的代碼,您可以根據需要添加自己的編碼。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { // }
控制器中間件
我們已經在前面學習了中間件,它可以與控制器一起使用。中間件也可以被分配到控制器的路由或控制器的構造函數中。可以使用中間件方法來分配中間件到控制器。 已註冊中間件也可以限制到控制器的某些方法。
分配中間件路由
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]);
控制器的構造函數中分配中間件
<?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('auth'); } }
示例
第1步 - 添加以下行到 app/Http/routes.php 檔檔並保存。
routes.php
<?php Route::get('/usercontroller/path',[ 'middleware' => 'First', 'uses' => 'UserController@showPath' ]);
php artisan make:middleware FirstMiddleware
FirstMiddleware.php
<?php namespace App\Http\Middleware; use Closure; class FirstMiddleware { public function handle($request, Closure $next) { echo '<br>First Middleware'; return $next($request); } }
php artisan make:middleware SecondMiddleware
第5步 - 添加以下代碼在新創建一個處理方法 SecondMiddleware 在 app/Http/Middleware/SecondMiddleware.php.
SecondMiddleware.php
<?php namespace App\Http\Middleware; use Closure; class SecondMiddleware { public function handle($request, Closure $next){ echo '<br>Second Middleware'; return $next($request); } }
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'First' => \App\Http\Middleware\FirstMiddleware::class, 'Second' => \App\Http\Middleware\SecondMiddleware::class, ];
php artisan make:controller UserController

app/Http/UserController.php
<?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 '<br>URI: '.$uri; $url = $request->url(); echo '<br>'; echo 'URL: '.$url; $method = $request->method(); echo '<br>'; echo 'Method: '.$method; } }
php artisan serve
http://localhost:8000/usercontroller/path

Restful 資源控制器
通常情況下當開發一個應用,我們需要執行CRUD(創建,讀取,更新,刪除)操作。Laravel使這項工作更容易做到的。只需創建一個控制器,而Laravel會提供所有的CRUD操作的方法。您也可以註冊一個路由的所有方法在routes.php檔中。
示例
php artisan make:controller MyController
app/Http/Controllers/MyController.php
<?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
app/Http/routes.php
Route::resource('my','MyController');
步驟4 - 我們現在通過使用資源控制器註冊MyController 的所有方法。下麵是由資源控制器處理的動作的列表。
動詞
|
路徑 | 動作 |
路由名稱
|
---|---|---|---|
GET | /my | index | my.index |
GET | /my/create | create | my.create |
POST | /my | store | my.store |
GET | /my/{my} | show | my.show |
GET | /my/{my}/edit | edit | my.edit |
PUT/PATCH | /my/{my} | update | my.update |
DELETE | /my/{my} | destroy | my.destroy |
URL | 描述 | 輸出圖像 |
---|---|---|
http://localhost:8000/my | 執行 Controller.php 的 index 方法 | index |
http://localhost:8000/my/create | 執行 Controller.php 的 create 方法 | create |
http://localhost:8000/my/1 | 執行 Controller.php 的 show方法 | show |
http://localhost:8000/my/1/edit | 執行 Controller.php 的 edit方法 | edit |
隱式控制器
隱式控制器允許你定義一個路由處理控制器中的每一個動作。如下圖所示使用 Route:controller 方法,在路由檔 route.php 中定義它。
Route::controller(‘base URI’,’<class-name-of-the-controller>’);
控制器的方法名應該是類似 GET或POST HTTP動詞開頭。如果以 get 開始,它只會處理 get 請求,如果它使用 post 開駋那麼將處理post請求。在HTTP動詞後,可以方法使用任何名稱,但它應遵循 URI 的格式。
示例
第1步 - 執行下麵的命令來創建一個控制器。其類名稱為 ImplicitController。這個類你也可以使用其他的任何名稱。
php artisan make:controller ImplicitController
app/Http/Controllers/ImplicitController.php
<?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'; } }
app/Http/routes.php
Route::controller('test','ImplicitController');
構造器注入
Laravel服務容器是用來解析所有Laravel控制器。因此,你能夠輸入-提示控制器也許需要在其構造依賴。依賴關係將被自動解析和注射到控制器實例。
示例
app/Http/routes.php
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
app/Http/Controllers/ImplicitController.php
<?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); } }
http://localhost:8000/myclass

方法注入
示例
app/Http/routes.php
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
app/Http/Controllers/ImplicitController.php
<?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); } }
http://localhost:8000/myclass
