加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

跟我学Laravel之路由

发布时间:2020-12-14 19:51:04 所属栏目:大数据 来源:网络整理
导读:《:跟我学Laravel之路由》要点: 本文介绍了:跟我学Laravel之路由,希望对您有用。如果有疑问,可以联系我们。 基本路由 PHP实战 应用中的大多数路都会定义在 app/routes.php 文件中.最简单的Laravel路由由URI和闭包回调函数组成. PHP实战 基本 GET 路由 P

《:跟我学Laravel之路由》要点:
本文介绍了:跟我学Laravel之路由,希望对您有用。如果有疑问,可以联系我们。

基本路由PHP实战

应用中的大多数路都会定义在 app/routes.php 文件中.最简单的Laravel路由由URI和闭包回调函数组成.PHP实战

基本 GET 路由PHP实战

代码如下:

Route::get('/',function()
{
??? return 'Hello World';
});

基本 POST 路由PHP实战

代码如下:

Route::post('foo/bar',function()
{
??? return 'Hello World';
});

注册一个可以响应任何HTTP动作的路由PHP实战

代码如下:

Route::any('foo',function()
{
??? return 'Hello World';
});

仅支持HTTPS的路由PHP实战

代码如下:

Route::get('foo',array('https',function()
{
??? return 'Must be over HTTPS';
}));

实际开发中经常需要根据路由生成 URL,URL::to办法就可以满足此需求:PHP实战

$url = URL::to('foo');PHP实战

路由参数PHP实战

代码如下:

Route::get('user/{id}',function($id)
{
??? return 'User '.$id;
});

可选路由参数PHP实战

代码如下:

Route::get('user/{name?}',function($name = null)
{
??? return $name;
});

带有默认值的可选路由参数PHP实战

代码如下:

Route::get('user/{name?}',function($name = 'John')
{
??? return $name;
});

用正则表达式限定的路由参数PHP实战

代码如下:

Route::get('user/{name}',function($name)
{
??? //
})
->where('name','[A-Za-z]+');

Route::get('user/{id}',function($id)
{
??? //
})
->where('id','[0-9]+');
PHP实战

传递参数限定的数组PHP实战

当然,必要的时候你还可以传递一个包括参数限定的数组作为参数:PHP实战

代码如下:

Route::get('user/{id}/{name}',function($id,$name)
{
??? //
})
->where(array('id' => '[0-9]+','name' => '[a-z]+'))

定义全局模式PHP实战

如果希望在全局范围用指定正则表达式限定路由参数,可以使用 pattern 办法:PHP实战

代码如下:

Route::pattern('id','[0-9]+');

Route::get('user/{id}',function($id)
{
??? // Only called if {id} is numeric.
});
PHP实战

拜访路由参数PHP实战

如果想在路由范围外拜访路由参数,可以使用 Route::input 方法:PHP实战

代码如下:

Route::filter('foo',function()
{
??? if (Route::input('id') == 1)
??? {
??????? //
??? }
});

路由过滤器PHP实战

路由过滤器提供了非常方便的方法来限制对应用程序中某些功能拜访,例如对于需要验证才能拜访的功能就非常有用.Laravel框架自身已经提供了一些过滤器,包括 auth过滤器、auth.basic过滤器、guest过滤器以及csrf过滤器.这些过滤器都定义在app/filter.php文件中.PHP实战

定义一个路由过滤器PHP实战

代码如下:

Route::filter('old',function()
{
??? if (Input::get('age') < 200)
??? {
??????? return Redirect::to('home');
??? }
});

如果从路由过滤器中返回了一个response,那么该response将被认为对应的是此次request,路由将不会被执行,而且,此路由中所有定义在此过滤器之后的代码也都不会被执行.PHP实战

为路由绑定过滤器PHP实战

代码如下:

Route::get('user',array('before' => 'old',function()
{
??? return 'You are over 200 years old!';
}));

将过滤器绑定为控制器ActionPHP实战

代码如下:

Route::get('user','uses' => 'UserController@showProfile'));

为路由绑定多个过滤器PHP实战

代码如下:

Route::get('user',array('before' => 'auth|old',function()
{
??? return 'You are authenticated and over 200 years old!';
}));

指定过滤器参数PHP实战

代码如下:

Route::filter('age',function($route,$request,$value)
{
??? //
});

Route::get('user',array('before' => 'age:200',function()
{
??? return 'Hello World';
}));
PHP实战

所有其后的过滤器将接收到 $response作为第三个参数:PHP实战

代码如下:

Route::filter('log',$response,$value)
{
??? //
});

基于模式的过滤器PHP实战

你也可以指针对URI为一组路由指定过滤器.PHP实战

代码如下:

Route::filter('admin',function()
{
??? //
});

Route::when('admin/*','admin');
PHP实战

上述案例中,admin过滤器将会应用到所有以admin/开头的路由中.星号是通配符,将会匹配任意多个字符的组合.PHP实战

还可以针对HTTP动作限定模式过滤器:PHP实战

代码如下:

Route::when('admin/*','admin',array('post'));

过滤器类PHP实战

过滤器的高级用法中,还可以使用类来替代闭包函数.由于过滤器类是通过IoC container实现解析的,所有,你可以在这些过滤器中利用依赖注入(dependency injection)的办法实现更好的测试能力.PHP实战

定义一个过滤器类PHP实战

代码如下:

class FooFilter {

??? public function filter()
??? {
??????? // Filter logic...
??? }PHP实战

}
PHP实战

注册过滤器类PHP实战

代码如下:

Route::filter('foo','FooFilter');

命名路由PHP实战

重定向和生成URL时,使用命名路由会更便利.你可以为路由指定一个名字,如下所示:PHP实战

代码如下:

Route::get('user/profile',array('as' => 'profile',function()
{
??? //
}));

还可以为 controller action指定路由名称:PHP实战

代码如下:

Route::get('user/profile','uses' => 'UserController@showProfile'));

现在,你可以使用路由名称来创建URL和重定向:PHP实战

代码如下:

$url = URL::route('profile');

$redirect = Redirect::route('profile');
PHP实战

可以使用currentRouteName办法来获取当前运行的路由名称:PHP实战

代码如下:

$name = Route::currentRouteName();

路由组PHP实战

有时你可能必要为一组路由应用过滤器.使用路由组就可以避免单独为每个路由指定过滤器了:PHP实战

代码如下:

Route::group(array('before' => 'auth'),function()
{
??? Route::get('/',function()
??? {
??????? // Has Auth Filter
??? });

??? Route::get('user/profile',function()
??? {
??????? // Has Auth Filter
??? });
});
PHP实战

子域名路由PHP实战

Laravel中的路由功能还支持通配符子域名,你可以在域名中指定通配符参数:PHP实战

注册子域名路由PHP实战

代码如下:

Route::group(array('domain' => '{account}.myapp.com'),function()
{

??? Route::get('user/{id}',function($account,$id)
??? {
??????? //
??? });PHP实战

});
PHP实战

路由前缀PHP实战

可以通过prefix属性为组路由设置前缀:PHP实战

为路由组设置前缀PHP实战

代码如下:

Route::group(array('prefix' => 'admin'),function()
{

??? Route::get('user',function()
??? {
??????? //
??? });PHP实战

});
PHP实战

路由与模型绑定PHP实战

模型绑定,为在路由中注入模型实例提供了便捷的途径.例如,你可以向路由中注入匹配用户ID的整个模型实例,而不是仅仅注入用户ID.首先,使用 Route::model 办法指定要被注入的模型:PHP实战

将参一个模型PHP实战

Route::model('user','User');
然后,定义一个包括{user}参数的路由:PHP实战

代码如下:

Route::get('profile/{user}',function(User $user)
{
??? //
});

由于我们已将{user}参数绑定到了User模型,因此可以向路由中注入一个User实例.例如,对profile/1的拜访将会把ID为1的User实例注入到路由中.PHP实战

注意: 如果在数据库中无法匹配到对应的模型实例,404错误将被抛出.
如果你希望自定义"not found"行为,可以通过传递一个闭包函数作为 model 办法的第三个参数:PHP实战

代码如下:

Route::model('user','User',function()
{
??? throw new NotFoundException;
});

如果你想自己实现路由参数的解析,只需使用Route::bind办法即可:PHP实战

代码如下:

Route::bind('user',function($value,$route)
{
??? return User::where('name',$value)->first();
});

抛出 404 差错PHP实战

有两种从路由中手动触发404错误的办法.首先,你可以使用App::abort办法:PHP实战

代码如下:

App::abort(404);

其次,你可以抛出SymfonyComponentHttpKernelExceptionNotFoundHttpException异常.PHP实战

更多关于处理404异常以及差错发生时自定义response的信息可以查看差错文档.PHP实战

控制器路由PHP实战

Laravel不光提供了利用闭包函数处置路由的功能,还可以路由到控制器,甚至支持创建 resource controllers.PHP实战

《:跟我学Laravel之路由》是否对您有启发,欢迎查看更多与《:跟我学Laravel之路由》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读