首页 > 代码库 > Laravel 5.2 二、HTTP(高级)路由与创建控制器
Laravel 5.2 二、HTTP(高级)路由与创建控制器
1.HTTP路由
参照文档,所有路由都定义在 App\Providers\RouteServiceProvider 类载入的 app/Http/routes.php文件中。
1.1基本路由
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback); Route::match([‘get‘, ‘post‘], ‘/‘, $callback); //响应get, post请求 Route::any(‘foo‘, $callback); //响应所有请求
其中,uri是相对项目根目录的url,callback是可以是一个闭包,也可以是一个控制器动作。
如果对 uri 和 url 的区别有兴趣,可以参考 http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html
1.2路由参数
//单个路由参数 Route::get(‘user/{id}‘, function ($id) { return ‘User ‘.$id; }); //多个路由参数 Route::get(‘posts/{post}/comments/{comment}‘, function ($postId, $commentId) { // }); //单个路由参数(可选) Route::get(‘user/{id?}‘, function ($id = 1) { return ‘User ‘.$id; }); //多个路由参数(可选) Route::get(‘posts/{post}/comments/{comment?}‘, function ($postId, $commentId = 1) { // }); //注意:多个参数时,只可以对最后一个参数设置可选,其他位置设置可选会解析错误 // 正则约束单个参数 Route::get(‘user/{name?}‘, function ($name = 2) { return $name; })->where(‘name‘, ‘\d+‘); //约束参数为数字 // 正则约束多个参数 Route::get(‘user/{id}/{name}‘, function ($id, $name) { // })->where([‘id‘ => ‘[0-9]+‘, ‘name‘ => ‘[a-z]+‘]);
2.创建控制器
2.1手动创建
<?php namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class IndexController extends Controller { public function index($id) { return $id; } }
然后在routes.php定义指向该控制器动作的路由
Route::get(‘user/{id}‘, ‘IndexController@index‘);
2.2 Artisan方法创建
cmd窗口进入项目根目录,输入
php artisan make:controller UserController
这将在app/Http/Controllers/目录下创建UserController控制器。
注意,如果在app/Http/Controllers/目录下新建后台控制器目录 Admin/ ,需要在控制器文件中修正命名空间
3.高级路由
3.1命名路由
//命名闭包路由 Route:get(‘user‘, array(function(){},‘as‘ => ‘alias‘); 或 Route:get(‘user‘, array(function(){})->name(‘alias‘); //命名控制器路由 Route:get(‘user‘, array(‘uses‘ => ‘Admin\IndexController@index‘, ‘as‘ => ‘alias‘)); 或 Route:get(‘user‘, array(‘uses‘ => ‘Admin\IndexController@index‘})->name(‘alias‘);
3.2路由分组
3.2.1路由前缀和命名空间
例如,有两个指向后台控制器动作的路由
Route::get(‘admin/login‘, ‘Admin\IndexController@login‘);
Route::get(‘admin/index‘, ‘Admin\IndexController@index‘);
显然,URI 和 控制器动作 中都有相同的部分,那么,我们启用路由分组来看看
//prefix 定义url前缀,namespace 定义命名空间 Route::group(array(‘prefix‘ => ‘admin‘, ‘namespace‘ => ‘Admin‘), function(){ Route::get(‘login‘, ‘IndexController@login‘); Route::get(‘index‘, ‘IndexController@index‘); });
嗯,好多了,后期调整会方便些。
3.2.2资源路由
1.创建资源控制器 ArticleController
php artisan make:controller ArticleController
为它添加手动方法public function article(){}
2.定义资源路由
这里我还是选择在路由分组下定义
Route::group(array(‘prefix‘ => ‘admin‘, ‘namespace‘ => ‘Admin‘), function(){ Route::get(‘login‘, ‘IndexController@login‘); Route::get(‘index‘, ‘IndexController@index‘); Route::resource(‘article‘, ‘ArticleController‘); });
3.查看路由
php artisan route:list //列出当前的所有路由
看到生成了很多的资源路由:
这就是资源路由的好处了吧,定义一条生成很多嘛,我们只需在Admin\Article 控制器下添加上面列表中的这些方法就行了。
4.测试
在测试这些方法时,我使用了 Chrome 浏览器的 postman 插件。在测试 post 方法时,出现了CSRF错误,解决方法参考 http://www.cnblogs.com/HD/p/4555369.html
Laravel 5.2 二、HTTP(高级)路由与创建控制器