【问题标题】:Laravel Routing - dashesLaravel 路由 - 破折号
【发布时间】:2015-03-11 05:50:39
【问题描述】:

我需要创建一个在变量后有破折号的路线。我想要的很容易通过代码解释(这是我尝试过的,但它不起作用)

Route::any('tournament/{sportName}/{regionName}/{tournamentName}-odds', array('as' => 'tournament-page', 'uses' => 'HomeController@tournament'));

问题在于这部分“-odds”。当我添加时,我收到此内容的 Laravel 错误

$others = $this->checkForAlternateVerbs($request);

        if (count($others) > 0)
        {
            return $this->getOtherMethodsRoute($request, $others);
        }

        throw new NotFoundHttpException;

我该怎么做(在路由中的参数后添加破折号)?谢谢

【问题讨论】:

  • 您的代码运行良好。 确切的错误是什么?
  • 错误截图,imgur.com/T51oRau,我尝试访问的网址是 domain.com/tournament/soccer/england/premier-league-odds
  • @VladimirSabo - 该网址中没有horse-racing
  • 对不起,错误的副本,仍然不起作用,如果我将 '-odds' 更改为 '_odds' 它可以正常工作
  • 我没有问题让同一条路线正常工作。你使用的是哪个 Laravel 版本?

标签: php laravel


【解决方案1】:

问题是,如果在路由参数之后出现以下字符之一:/,;.:-_~+*=@|,则不能在该路由参数中使用它,因为 Laravel 会调整正则表达式以排除该参数。

我相信造成这种情况的原因类似于:test/{foo}-{bar}

这意味着您显然可以将您的 URL 更改为不在路由参数中使用 -,或者使用 where() 自己指定适用于 tournamentName 的正则表达式条件:

Route::any('tournament/{sportName}/{regionName}/{tournamentName}-odds',
         array('as' => 'tournament-page', 'uses' => 'HomeController@tournament')
     )->where('tournamentName', '[^\/]+');

【讨论】:

  • 如果有人想知道为什么这仍然不起作用,请在每次更改为 web.php 后输入 php artisan route:cache
猜你喜欢
  • 2020-11-18
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 2016-01-17
  • 2015-11-29
相关资源
最近更新 更多