看完了laravel V5.3的路由和中间件部分,接着就是看控制器部分了。
参考官方英文文档,laravel 5.3控制器部分: https://laravel-china.org/docs/en/5.3/controllers
一. 控制器的定义和基本路由访问
定义一个控制器相当简单,结合PSR规则,在App\Http\Controllers路径下,新建TestController.php文件,文件代码这样写:
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class TestController extends Controller{
public function firstAction(){
}
}
然后注册一个GET路由,如下:
Route::get('test_first', 'TestController@first_action');
注意这里第二个参数,是不用加控制器的完整命名空间的,因为框架默认会在前面添加“App\Http\Controllers”的命名空间前缀。
接着,浏览器输入以下网址就能使用了:
http://host/test_first
二. 控制器传递动态数据(构造函数注入和自定义动作(Action)注入)
要想往控制器中传递动态数据,可以在构造函数和具体动作(Action)函数的形参上进行,如:
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
use App\Repositories\UserRepository;
use Illuminate\Http\Request;
class TestController extends Controller{
/**
* The user repository instance.
*/
protected $users;
/**
* Create a new controller instance.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users; //直接初始化资源
}
public function first_action(Request $request){
$name = $request->name;
或
$name = $request->input("name");
}
}
三. 资源控制器
laravel中是提供了Route::resource函数来管理资源类控制器(如图片、表单等资源的CURD),当使用该方法注册路由时:
Route::resource('test', 'TestController');
laravel就会默认生成一系列路由(这大大减轻了工作量),自动生成的路由如下:
当输入URL:
http://host/test/create
就会访问到testcontroller下的create方法了。
Laravel 的resource函数还可以自定义路由名字:
//将TestController/create方法路由设为"test.build"
Route::resource('test', 'TestController',
['names' => ['create' => 'test.build']]);
同时,Laravel 的resource函数限定具体控制器的访问权限:
//只允许访问index和show函数
Route::resource('test', 'TestController',
['only' => ['index', 'show']]);
//除了create、store、update、destroy外都可以访问
Route::resource('test', 'TestController',
['except' => ['create', 'store', 'update', 'destroy']]);
四. 路由缓存
当C端向服务器发起访问时,如果能将路由解析结果(url和控制器方法的对应关系)缓存起来,那么将加快响应速度。
具体方法就是使用artisan工具来创建路由缓存:
php artisan route:cache
清除路由缓存,也可以使用artisan指令,或者直接删除路由缓存文件(bootstrap/cache/routes.php)
php artisan route:clear