【laravel路由总结】控制器总结

    2016年08月10日 doc php 字数:1581

laravel中的控制器属于框架本身提倡的最佳实践。我们尽可能把逻辑放在controller中而非route.php中。可以通过控制器将我们的代码精准定位到指定类的指定方法中。

Route::get('foo', 'Photos\AdminController@method');
Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);

控制器也支持中间件、命名空间、前缀等等之前提到的路由特性。 但是控制器里,有个很大的特性就是资源路由器的应用。

资源控制器是支持restful的一种接口分发。其按照rest约定俗成的风格命名,有效的节省了创建成本,尤其适合app端的开发。

1、在目录下执行

php artisan make:controller PhotosController

2、在route.php中增加

Route::resource('photos', 'PhotosController');

3、在目录下执行

php artisan route:list

获取到该行的路由信息。

当我们定义第二步时,已经定义好了我们的路由方法以及uri了。 对于研发来说,需要做的就是在PhotosController类中将所需的action补充即可。

同时,在路由层面也提供了不少的灵活处理的方法。 比如说

声明资源路由时,可以指定让此路由仅处理一部分的行为或者不处理某部分行为:

Route::resource('photos', 'PhotosController',
                ['only' => ['index', 'edit']]);

Route::resource('photos', 'PhotosController',
                ['except' => ['create', 'store', 'update', 'destroy']]);

嵌套资源

有时你可能会需要对「嵌套」资源定义路由。例如,相片资源可能会附带多个「评论」。要「嵌套」此资源控制器,可在路由声明中使用「点」记号:

Route::resource('photos.comments', 'PhotoCommentController');

此路由会注册一个「嵌套」资源,可通过类似这样的 URL 来访问它:photos/{photos}/comments/{comments}。

隐式控制器

正如其名一样, 普通控制器是带着请求类型,比如说post、get 资源控制器是带个关键词resource. 隐式控制器如其名,只带个关键词controller,形式如下:

Route::controller('users', 'UserController');

接下来,只要在控制器中加入方法。方法的名称应由它们所响应的 HTTP 动词作为开头,紧跟着首字母大写的 URI 所组成即可。对于使用者来说,即为约定俗称的一套,框架本身为我们做了这些路由规则的映射。

引用一段官方的例子如下:

<?php

namespace App\Http\Controllers;

class UserController extends Controller
{
    /**
     * 响应对 GET /users 的请求
     */
    public function getIndex()
    {
        //
    }

    /**
     * 响应对 GET /users/show/1 的请求
     */
    public function getShow($id)
    {
        //
    }

    /**
     * 响应对 GET /users/admin-profile 的请求
     */
    public function getAdminProfile()
    {
        //
    }

    /**
     * 响应对 POST /users/profile 的请求
     */
    public function postProfile()
    {
        //
    }
}