【laravel路由总结】基础请求形式

    2016年07月28日 doc php 字数:2427

目录列表

本节主要记录基础的几种请求方式

基础的GET/POST/PUT/DELETE表现形式

  • 带单个参数
  • 带多个参数
  • 可选参数
  • 正则表达式限定参数(全局限制)
  • 命名路由

带单个参数

Route::get('doumao/{id}', function ($id) {
    return 'Doumao '.$id;
});

访问链接:

http://localhost/doumao/888

带多个参数

Route::get('doumao/{doumao_name}/comments/{comment}', function ($doumaoName, $commentId) {
    return 'Doumao name is '.$doumaoName.'|----comment id is '.$commentId;
});

访问链接:

http://localhost/doumao/liyujie/comments/helloword

可变参数

Route::get('doumao/{doumao_name}/comments/{comment?}', function ($doumaoName, $commentId = 'default') {
    return 'Doumao name is '.$doumaoName.'|----comment id is '.$commentId;
});

访问链接如下:

http://localhost/doumao/liyujie/comments

如上举例,通过在参数名称后面加上 ? 来实现可选参数。

但是会存在如下的问题

http://localhost/doumao/comments/helloword

在设置doumao_name为可变参数的情况下,服务器仍旧会报错如下:

NotFoundHttpException in RouteCollection.php line 161

因此针对可选路由,都是选择最后一个参数为可选,不然会引起诸多问题。 当然为了更灵活的解决这类问题,就要依赖后面的内容介绍,本节先mark下。

正则表达式限定参数

Route::get('doumaoname/{name}', function ($name) {
    return 'Doumao name '.$name;
})
->where('name', '[A-Za-z]+');

访问链接如下:

http://localhost/doumaoname/abc

如果输入1,会报错如下,默认无法找到路由

NotFoundHttpException in RouteCollection.php line 161

全局限制

全局限制的使用场景,假如当你需要对所有的id做一个整数限制时,可以走全局限制。

具体请参照app/Providers/RouteServiceProvider.php中的boot方法,如laravel官方给出的方法说明,boot用于定义路由模型绑定,全局限制过滤等。

/**
	 * Define your route model bindings, pattern filters, etc.
	 *
	 * @param  \Illuminate\Routing\Router  $router
	 * @return void
	 */
	public function boot(Router $router)
	{
		parent::boot($router);

		//
	}

假如我希望整个框架中涉及到的id都为整数,则在boot方法中添加如下:

public function boot(Router $router)
{
    $router->pattern('id', '[0-9]+');

    parent::boot($router);
}

在boot中定义之后,这个检测将会应用到所有使用该参数名称的路由上。

命名路由

这边贴一个官方介绍的命名路由的意义:

命名路由让你可以更方便的为特定路由生成 URL 或进行重定向。你可以使用 as 数组键指定名称到路由上

一旦你在指定的路由中分配了名称,则可通过 route 函数来使用路由名称生成 URLs 或进行重定位。

Route::get('doumaomao/profile', ['as' => 'dm', function () {
        return 'come on';
}]);

//Route::get('doumaomao/profile', 'UserController@showProfile')->name('dm');

Route::get('a', function () {
    $url = route('dm');
    return $url;
});

执行链接如下:

http://localhost/a

返回结果如下:

http://localhost/doumaomao/profile

同理如需重定向,同官方文档给出

$redirect = redirect()->route('dm');