【问题标题】:Laravel route to same depthLaravel路线到相同深度
【发布时间】:2014-04-15 01:23:08
【问题描述】:

我在子文件夹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,但这只会导致错误。重定向到登录有效,但如何在视图中获得正确的链接?

【问题讨论】:

    标签: php laravel-4 laravel-routing


    【解决方案1】:

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

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

    不过,转到 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,与路径无关。

    编辑: 路线是绝对的。如果你想建立一个相对于相同深度的链接,在你看来只需做&lt;a href="login"&gt;Login&lt;/a&gt;。但这不推荐。在这种情况下,您无法从不同深度的路线显示相同的视图/链接。而是使用命名路由(就像您所做的那样),它可以为您提供最大的灵活性。只需在您的视图中输入正确的名称 vendor_login 并将您的 Redirect::to 更改为 Redirect::route('vendor_login')

    希望对你有帮助

    【讨论】:

    • 抱歉,vendor_login 是原文中的拼写错误。我正在尝试更改名称并在将其复制到此处时将其保留-我认为“登录”可能是保留字,因此我尝试更改路由名称和链接的值,但这不起作用。此外,redirect::to 已经可以工作了——视图中的 route() 调用没有
    • 您是否尝试将其仅放在 2 个括号中? {{route('login')}} 。 3个括号转义字符,可能会导致问题。打印用户填写的内容时,应使用 3 个括号。
    • 试过了,没用。这不是逃避问题,而是域问题
    【解决方案2】:

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

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

    这将允许它忽略在组函数中指定的域。不幸的是,据我所知,您需要为所有这些人都这样做。

    【讨论】:

    • 从我在这里看到的情况来看,你更像是把你的路由名称重命名为'as' =&gt; 'login'。这应该会导致链接现在正常工作。请参阅我的回答,以更深入地了解重定向的工作原理以及视图如何访问路由。
    • @MatthiasS 糟糕,抱歉,打错了,谢谢指出
    猜你喜欢
    • 2020-12-03
    • 2015-08-31
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多