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()
{
//
}
}