Laravel5.1 控制器--Controller

咱们以前在route文件中是使用匿名函数来进行操做的,全部操做都用匿名函数是不合理的,下面咱们来学习下控制器。php

建立控制器

咱们使用artisan来建立控制器:laravel

php artisan make:controller ArticlesController 

执行后咱们进入目录后就能够看到这个控制器了:\app\Http\Controller数组

 

RESTFul风格的控制器

laravel的控制器是RESTFul风格的控制器 方便咱们作增删改查的工做,咱们为控制器绑定路由:app

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

其实这短短的一行代码就已经注册了多条路由,咱们可使用artisan命令来看看:函数

php artisan route:list

咱们能够看到,每条路由都对应着控制器里的每个方法,咱们能够在控制器中的方法中完成相应的业务逻辑。post

 

若是咱们不想要这么多条路由怎么办呢?有这么个方法:学习

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

 

默认状况下,全部资源控制器动做都有一个路由名称,然而,咱们能够经过传入names数组来覆盖这些默认的名字:ui

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

 

在实际开发中,咱们少不了要使用路由嵌套this

好比说一篇文章下有多个评论,咱们能够这样嵌套:url

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  这条路由
    }
相关文章
相关标签/搜索