dregvw1801
2017-01-26 21:52
浏览 221
已采纳

如何从Laravel中的路由操作中删除路由前缀

I am creating localization in Laravel 5.3 application. It must follow such requirements:

  1. If route path contains locale prefix, locale should be set according to this prefix

  2. If there's no route prefix, it should be set to English.

For instance:

A) mysite.org/pl/blog/133 sets locale to pl and calls BlogController with parameter 113

B) mysite.org/en/blog/133 sets locale to en and calls BlogController with parameter 113

C) mysite.org/blog/133 acts in the same way as previous.

To implement this, I was using the following code:

#routes/web.php

require base_path('routes/common.php');
// TODO set default locale to en

Route::group(['prefix' => '{locale}'], function($group) {

    require base_path('routes/common.php');
    // TODO set locale to $locale

    foreach ($group -> getRoutes() as $route) {
        $route->where('locale', 'en|ru|pl|ua|de');
    }

});


#routes/common.php

Route::get('/blog/{id}', function($id) {
    // Return view of respective blogpost
});

The problem is that when I use path A or B i get an extra first parameter in my action function, which derives from the locale prefix.

Can I hide this parameter somehow? Or is there a way to achieve what I want in a way more architecturally correct?

图片转代码服务由CSDN问答提供 功能建议

我在Laravel 5.3应用程序中创建本地化。 它必须遵循以下要求:

  1. 如果路径路径包含区域设置前缀,则应根据此前缀设置区域设置

  2. 如果没有路由前缀,则应将其设置为英语。

    例如: \ n

    A) mysite.org/pl/blog/133 将语言环境设置为 pl ,并使用参数113调用BlogController

    B) mysite.org/en/blog/133 将语言环境设置为 en ,并使用参数113调用BlogController

    C) mysite.org/blog/133 的行为与之前相同。

    为了实现这一点,我使用了以下代码:

     #routes / web.php 
     
    require base_path('routes / common.php'); 
     // TODO将默认语言环境设置为en 
     
    Route :: group(['prefix'=  >'{locale}'],函数($ group){
     
    需要base_path('routes / common.php'); 
     // TODO将语言环境设置为$ locale 
     
     foreach($ group  -  > getRoutes()as $ route){
     $ route-> where('locale','en | ru | pl | ua | de'  ); 
    } 
     
    }); 
     
     
    #routes / common.php 
     
    Route :: get('/ blog / {id}',function($ id){
     /  /返回各个博文的视图
    }); 
       
     
     

    问题是当我使用路径A或B时,我在动作函数中获得了额外的第一个参数, 派生自区域设置前缀。

    我可以以某种方式隐藏此参数吗? 或者有没有办法以更加架构正确的方式实现我想要的东西?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题