【发布时间】: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