Laravel路线相同的深度

时间:2014-03-11 12:21:57

标签: php laravel-4 laravel-routing

我在子文件夹example.com/mysite中有一个网站。我在那里有一条路线login,可通过example.com/mysite/login访问。这是路线:

Route::group(array('domain' => 'example.com'), function()
{

    Route::get('/', function()
    {
        return Redirect::to('login');
    });

    Route::get('/login/', array('as' => 'login', 'uses' => 'AccountController@login'));

})

问题是,当我在我的视图中有这样的链接时:

<a href='{{{ route('login') }}}'>Login page</a>

它显示路径example.com/login而不是example.com/mysite/login。它认为这与域组有关,但我不知道如何告诉它保留当前的子目录。我已尝试在group命令中将域更改为example.com/mysite,但这只会导致错误。重定向到登录有效,但如何在视图中获得正确的链接?

2 个答案:

答案 0 :(得分:0)

原来,这是因为当它生成路由时,它使用组中提供的域而不是从URL获取它。但是,可以通过在单个路由匹配中指定空域来覆盖它,如下所示:

Route::get('/login/', array('as' => 'login', 'uses' => 'AccountController@login', 'domain' => ''));

这将允许它忽略组函数中指定的域。不幸的是,从我所知道的,你需要为所有人做到这一点。

答案 1 :(得分:0)

您的路线不遵循相对路径。即使您位于example.com/mysite中,您的路由也是在example.com域中进行的。 您的重定向会将您重定向到example.com/login。 这是您的路线所在。您的重定向是将重定向到'登录'。

您将路线命名为vendor_login。因此,在视图中,您必须编写<a href='{{{ route('vendor_login') }}}'>才能访问正确的路由。

但是,转到example.com/mysite/login不会显示您的登录页面。可通过example.com/login获取。 如果您想通过example.com/mysite/login访问,请使用以下代码。

Route::group(array('domain' => 'example.com'), function()
{

  Route::get('/', function()
  {
      return Redirect::route('vendor_login');
  });

  Route::group(array('prefix' => 'mysite'), function()
  {
    Route::get('/login/', array('as' => 'vendor_login', 'uses' => 'AccountController@login'));
  });

});

这里的不同之处在于登录路线现在位于使用“mysite”前缀的组中。在这种情况下,您的登录路线可通过example.com/mysite/login获得。 重定向从Redirect::to('login')(重定向到example.com/login,更改为Redirect::route('vendor_login')更改为命名路由vendor_login,与路径无关。

编辑: 路线是绝对的。如果要创建相对于相同深度的链接,请在视图中执行<a href="login">Login</a>。但不建议这样做。在这种情况下,您无法从具有不同深度的路径显示相同的视图/链接。而是使用命名路线(就像你做的那样),它给你最大的灵活性。只需在视图中输入正确的名称vendor_login,然后将Redirect ::更改为Redirect :: route('vendor_login')

希望这有帮助