【问题标题】:Laravel 5 Route variable has spaceLaravel 5 Route 变量有空间
【发布时间】:2016-04-08 12:47:09
【问题描述】:

我在一个名为 SearchController 的控制器中有一些代码,我重定向到一个包含一些已定义变量的路由。当城市有两个词(例如:得梅因)时,城市变量已删除空格并添加破折号。那将返回“des-moines”。我这样做是因为它在 URL 中显示为“des+monies”。但是改了之后。该路线似乎确实知道该做什么,否则它会中断。那么我怎样才能告诉路线 {city} 也可以是“des-moines”而不是“des+moines”。或者有没有更好的方法。

我想要的网址(但中断并出错):

www.domain.com/des-moines-ia-provider1-50301

SearchController(精简版):

$city =  strtolower(preg_replace('/\s+/', '-', $data[0]->City));
$state = strtolower($data[0]->State);
$provider = strtolower($data[0]->{'Provider Name'});
$zipcode = $data[0]->{'Zip Code'};  

return redirect()->route('search.provider1',[$city,$state,$zipcode])->with('data',$data);

路线:

Route::get('{city}-{state}-provider1-{zipcode}',['uses' => 'PagesController@provider1','as' => 'search.provider1']);

错误:

NotFoundHttpException in RouteCollection.php line 161:

【问题讨论】:

  • 这是意料之中的,因为路由器无法知道将哪个破折号解释为分隔符,它很可能将城市解释为des,将州解释为moines,这会留下一个-ia-provider1 之前的额外-provider1 会破坏比赛。为什么不只使用斜线而不是破折号?它们提供了良好的 URL 结构,但在这种情况下,我建议您切换州和城市,因为城市是州的一部分,而且分层更有意义:{state}/{city}/provider-1/{zipcode},因为www.domain.com/ia/des-moines/provider1/50301 看起来很好。

标签: php laravel routes laravel-5 laravel-routing


【解决方案1】:

您可以做的是替换不会在城市/州/邮政编码中使用的路线分隔符。

也许:

Route::get('{city}/{state}/provider1/{zipcode}',['uses' => 'PagesController@provider1','as' => 'search.provider1']);

会更好吗?我想/ 没有在城市/州和邮政编码中使用

【讨论】:

  • 我试过这样做,但它打破了我的看法。之后似乎找不到CSS。有什么我应该改变的吗?
猜你喜欢
  • 2016-02-29
  • 2015-09-01
  • 2015-09-15
  • 2014-12-15
  • 2023-04-09
  • 2018-07-23
  • 1970-01-01
  • 2015-05-17
  • 2017-11-28
相关资源
最近更新 更多