简介:
控制器类一般放到 app/Http/Controllers 目录下:
1 基础控制器:
快速创建控制器:
php artisan make:controler PhotoController
// 控制器方法呈现
public function showProfile($id){
return view();
}
更推荐写法:
public function showProfile(Request $requst, $id){
return view();
}
需要在路由里面配合的控制器。
Route::get('user/{id}','UserController@showProfile');
此时 路由会把 $id 传递到后台处理函数 showProfile 里面。
注意:上述 控制器,会自动加载到 命名 空间 App\Http\Controllers\UserController 这个下面。
2 路由别名 及 URL生产
Route::get('foo',['uses' => 'FooController@method','as'=>'name']); // 注意此处 是 uses .
$url = route('name'); // 通过 路由别名 生成对应的 url 地址
通过 方法生成 url 地址
$url = action('FooController@method');
获取当前的控制器
$action = Route::currentAction();
3 Controller Middleware 控制器中间件
指定中间件给对应的控制器,有两种方案
方案一:路由中指定。
Route::get('profile',[
'middleware' => 'auth',
'uses' => 'UserController@showProfile'
]);
方案二:控制器中指定。
class UserController extends Controller{
public function __contruct(){
$this->middleware('auth');
$this->middleware('log',['only'=>['fooAction','barAction']]);
$this->middleware('subscribed',['expect'=>['fooAction','barAction']]);
}
}
4 RESTful 资源控制器
4.1 创建 控制器
php artisan make:controller PhotoController
4.2 设置路由资源
Route::resource('photo','PhotoController');
默认的映射关系:
Verb
Path
Action
Route Name
GET
/photo
index
photo.index
GET
/photo/create
create
photo.create
POST
/photo
store
photo.store
GET
/photo/{photo}
show
photo.show
GET
/photo/{photo}/edit
edit
photo.edit
PUT/PATCH
/photo/{photo}
update
photo.update
DELETE
/photo/{photo}
destroy
photo.destroy
4.3 局部资源路由
Route::resource('photo','PhotoController',['only'=>['index','show']]);
Route::resource('photo','PhotoController',['except'=>['create','store','update','destroy']]);
4.4 命名资源路由
Route::resource('photo',;PhotoController',['names'=>['create'=>'photo.build']]);
4.5 嵌套资源
Route::resource('photos.commonts','PhotoCommentController');
访问方式: photos/{photos}/comments/{comments}
使用方式:
class PhotoCommentController extends Controller{
public function show($photoId,$commentId){
//TODO
}
}
4.6 扩展资源路由
就是在已经有的路由基础上,重新扩展一下,路由,如下:
Route::get('photos/popular','PhotoController@method');
Route::resource('photos','PhotoController');
5 隐式控制器
定义方法: 使用 Route::controller() 方法
Route::controller('users','UserController');
使用方式: 只需要对应的方法名字以这些方法响应的HTTP动词开头,然后是首字母大写的URI名称。
例如:
响应 GET 方式的 /users 的请求 => public function getIndex(){}
响应 GET 方式 /users/show/1 的请求 =》 public function getShow($id){}
响应 GET 方式 /users/admin-profile 的GET 请求 public function getAdminProfile()
统一对于隐式控制器,也可以指定对应的 路由名称:
Route::controller('users','UserController',['getShow'=>'user.show']);
6 依赖注入 & 控制器
6.1 构造器注入
6.2 方法注入
7 路由缓存
就是两条命令
php artisan route:cache
php artisan route:clear