Laravel5.1 控制器--Controller


我們之前在route文件中是使用匿名函數來進行操作的,所有操作都用匿名函數是不合理的,下面我們來學習下控制器。

創建控制器

我們使用artisan來創建控制器:

php artisan make:controller ArticlesController 

執行后我們進入目錄后就可以看到這個控制器了:\app\Http\Controller

 

RESTFul風格的控制器

laravel的控制器是RESTFul風格的控制器 方便我們做增刪改查的工作,我們為控制器綁定路由:

Route::resource('articles', 'ArticlesController');

其實這短短的一行代碼就已經注冊了多條路由,我們可以使用artisan命令來看看:

php artisan route:list

我們可以看到,每條路由都對應着控制器里的每一個方法,我們可以在控制器中的方法中完成相應的業務邏輯。

 

如果我們不想要這么多條路由怎么辦呢?有這么個方法:

// 指定只為index 和 store方法生成路由
Route::resource('articles', 'ArticlesController', ['only'=>['index', 'store']]);

 

默認情況下,所有資源控制器動作都有一個路由名稱,然而,我們可以通過傳入names數組來覆蓋這些默認的名字:

Route::resource('articles', 'ArticlesController',
    ['names' => ['create' => 'articles.build']]);

 

在實際開發中,我們少不了要使用路由嵌套

比如說一篇文章下有多個評論,我們可以這樣嵌套:

Route::resource('articles.comments', 'ArticlesController');

如果你不明白這是什么意思,可以使用artisan命令 php artisan route:list看下,我們在對應的控制器中的方法:

    public function show($articleId, $commentId)
    {
        // 顯示謀篇文章下的評論
    }

show方法對應的路由格式是:localhost8000/articles/{articleId}/comments/{commentId}

 

注冊單條路由

如果我們要注冊單條路由,就需要這樣寫:

Route::get('/articles/{id}', 'ArticlesController@showArticles');

意思是當調用這條路由時 使用控制器中的showArticles方法,對應控制器中的方法是這樣:

    public function showArticles($id)
    {
        // 執行邏輯代碼
    }

 

控制器在路由中的命名空間

在route中 控制器默認的命名空間是App\Http\Controllers 當我們的控制器在這個命名空間下 我們只需要加上后面的部分即可:

Route::get('/get/user', '\Auth\AuthController@someMethod');

 

為控制器路由命名

Route::get('/articles', ['uses' => 'ArticlesController@showArticles', 'as' => 'show']);

我們可以使用函數action()來查找url:

$url = action('ArticlesController@showArticles');

也可以使用route()函數:

$url = route('show');

 

在控制器中使用middleware

之前的章節中 我們介紹過中間件 只是如果在控制器中如何使用呢?let's look this:

Route::get('/test/middleware', ['uses' => 'ArticlesController@method', 'middleware' => 'any']);

其實上面的例子並不常用,在控制器中的構造方法植入middleware更加方便:

    public function __construct()
    {
        $this->middleware('someMiddleware');
        // 'only'代表 只有那幾個方法使用到這個middleware
        $this->middleware('auth',['only'=>['index','show']]);
        // 'except'代表 除了那幾個方法不適用這個middleware
        $this->middleware('log',['except'=>['getAny']]);
    }

 

隱式控制器

Laravel允許你只定義一個路由即可訪問控制器類中的所有動作,首先,使用Route::controller方法定義一個路由,該controller方法接收兩個參數,第一個參數是控制器處理的baseURI,第二個參數是控制器的類名:

Route::controller('articles','ArticlesController');

接下來我們看看控制器中如何相應路由吧:

我們以請求方式為前綴命名方法

    public function getIndex()
    {
        // 這個方法對應的是:GET方式  /articles 這條路由
    }
    public function getShow($id)
    {
        // 這個方法對應: GET方式 /articles/show/{id}  這條路由
    }
    public function postProfile()
    {
        // 這個方法對應: POST方式 /articles/profile  這條路由
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM