• laravel5.2总结--路由


     

    1 基本路由

     
    1.1 定义路由的文件
    app/Http/routes.php
     
    1.2 最基本的路由:
    Route::get(''index", function () { return "hello world"; }
    可用的路由方法:
    Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
     
    1.3 一个可以响应多个HTTP动作的路由:
     
    Route::match(['get', 'post'], '/', function () { // }); Route::any('foo', function () { // });
     

    2 路由参数

     
    2.1 必选参数
    Route::get('user/{id}', function ($id) { return 'User '.$id; });
     
    Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // });
     
    注意: 路由参数不能包含 - 字符。请用下划线 (_) 替换。
     
    2.2 可选的路由参数
    可以在参数名称后面加上 ? 来实现:
    Route::get('user/{name?}', function ($name = null) { return $name; }); Route::get('user/{name?}', function ($name = 'John') { return $name; });
     
    2.3 正则表达式限制参数
    你可以使用 where 方法来限制路由参数格式。where 方法接受参数的名称和定义参数应该如何被限制的正则表达式: Route::get('user/{id}', function ($id) { // }) ->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // }) ->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
     
    2.4 全局限制
    所有的路由参数都遵循,则可以使用 pattern 方法。
    在 RouteServiceProvider 的 boot 方法里定义这些模式:
    /** * 定义你的路由模型绑定,模式过滤器等。 * * @param IlluminateRoutingRouter $router * @return void */ public function boot(Router $router) { $router->pattern('id', '[0-9]+'); parent::boot($router); }
     

    3 命令路由

    命名路由让你可以更方便的为特定路由生成 URL 或进行重定向,如果你在每个视图中生成url时候都使用别名,当某个路由改变时候不必去每个url中更改。
     
    3.1 使用 as 数组键
    Route::get('user/profile', ['as' => 'profile', function () { // }]);
     
    Route::get('user/profile', [ 'as' => 'profile', 'uses' => 'UserController@showProfile' ]);
     
    3.2 链式调用 name 方法:
    Route::get('user/profile', 'UserController@showProfile')->name('profile');
     
    3.3 对命名路由生成 URLs
    一旦你在指定的路由中分配了名称,则可通过 route 函数来使用路由名称生成 URLs 或重定向:
    $url = route('profile'); $redirect = redirect()->route('profile');
    如果路由定义了参数,那么你可以把参数作为第二个参数传递给 route 方法。指定的参数将自动加入到 URL 中:
    Route::get('user/{id}/profile', ['as' => 'profile', function ($id) { // }]); $url = route('profile', ['id' => 1]);
     

    4 路由群组

     
    路由群组允许你共用路由属性,例如:中间件、命名空间,你可以利用路由群组统一为多个路由设置共同属性,而不需在每个路由上都设置一次。共用属性被指定为数组格式,当作 Route::group 方法的第一个参数。
     
    4.1 路由前缀
    Route::group(['prefix' => 'admin'], function () { Route::get('users', function () { // 符合「/admin/users」URL }); });
    你也可以使用 prefix 参数去指定路由群组中共用的参数:
    Route::group(['prefix' => 'accounts/{account_id}'], function () { Route::get('detail', function ($account_id) { // 符合 accounts/{account_id}/detail URL }); });
     
    4.2 中间件
    Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // 使用 Auth 中间件 }); Route::get('user/profile', function () { // 使用 Auth 中间件 }); });
     
    4.3 命名空间
    Route::group(['namespace' => 'Admin'], function() { // 控制器在「AppHttpControllersAdmin」命名空间 Route::group(['namespace' => 'User'], function() { // 控制器在「AppHttpControllersAdminUser」命名空间 }); });
     
    请记住,默认 RouteServiceProvider 会在命名空间群组内导入你的 routes.php 文件,让你不用指定完整的 AppHttpControllers 命名空间前缀就能注册控制器路由。所以,我们只需要指定在基底 AppHttpControllers 根命名空间之后的部分命名空间。
     

    5 资源路由

     
    请求方法 请求URI 对应的控制器方法 代表的意义
    GET /admin/article index 索引/列表
    GET /admin/article/create create 创建(显示表单)
    POST /admin/article store 保存你创建的数据
    GET /admin/article/{id} show 显示对应id的内容
    GET /admin/article/{id}/edit edit 编辑(显示表单)
    PUT/PATCH /admin/article/{id} save 保存你编辑的数据
    DELETE /admin/article/{id} destroy 删除
     
    1>定义资源路由Route::resource('admin/article', 'ArticleController');。
    2>当我使用get方式访问地址http://yourdomain/admin/article,相当于访问控制器ArticleController的index方法。
    3>当我使用get方式访问地址http://yourdomain/admin/article/create,就会访问到create方法。
    4>当我通过POST提交数据至地址http://yourdomain/admin/article,相当于由store方法处理。
     
    使用命令 php artisan route:list 可以查看我们现有的路由,如下截图
     

    6 控制器路由

    注意:laravel5.3版本中被彻底移除
    控制器路由我认为主要是解决路由定义繁杂的情况,因为大型的应用业务复杂,控制器相当的多,我们不可能每一个控制器的方法都要定义一个路由。Laravel的控制器路由可以完美解决问题:
    Route::controller('/', 'HomeController');
    我们的控制器方法的写法也要有所变化:
    <?php namespace AppHttpControllers; use AppHttpControllersController; class HomeController extends Controller { /** * 显示首页。 * * @return Response */ public function getIndex() { return view('home'); } /** * 显示关于界面 * * @return Response */ public function getAbout() { return view('about'); } }
    依照上述例子,如果我们访问地址http://yourdomain/就会显示HomeController的getIndex方法产生的内容,访问http://yourdomain/about,就会显示getAbout方法产生的内容。除了使用如get{Method}这种格式,还可以有post{Method}、delete{Method}等,至于前缀get,post等代表的意义,应该猜得出吧?
     
    这样的定义我们可以不用再给控制器的每一个方法定义一个路由,只需给控制器定义一个路由即可。
     
     
     
  • 相关阅读:
    【Javascript】javascript学习 二十二 JavaScript 对象简介
    【Javascript】javascript学习 二十六 JavaScript Boolean(逻辑)对象
    【Javascript】javascript学习 二十九 JavaScript HTML DOM 对象
    【Javascript】javascript学习 二十八 JavaScript RegExp 对象
    【Javascript】javascript学习 二十一 JavaScript 指导方针
    【Javascript】javascript学习 二十三 JavaScript 字符串(String)对象
    【Javascript】javascript学习 三十 JavaScript 浏览器检测
    【Javascript】javascript学习 二十五 JavaScript Array(数组)对象
    【Javascript】javascript学习 二十四 JavaScript Date(日期)对象
    【Javascript】javascript学习 二十七 JavaScript Math(算数)对象
  • 原文地址:https://www.cnblogs.com/redirect/p/7456508.html
Copyright © 2020-2023  润新知