我有一个域/子域项目。为了通过slug看到事件,我做了这条路线:
Route::prefix('events')->namespace('Content\Controller')->group(function () {
Route::get('/', 'EventController@getIndex')->name('event.index');
Route::get('{slug}', 'EventController@getView')->name('event.show');
Route::get('{slug}/edit', 'EventController@getEdit')->name('event.edit');
Route::post('load-more-ajax/{region?}', 'EventController@postLoadMoreAjax');
Route::any('sorted-ajax/{region?}', 'EventController@anySortedAjax');
Route::get('category/{category_slug}/{subcategory_slug?}', 'EventController@getCategory');
});
在我的页面未正确加载后,我在控制器中进行了转储:
public function getView($slug)
{
return $slug;
}
要到达我使用此网址的路线:https://example.com/events/slug-example
。
问题是路线被击中,因为当我改变它时我看到了响应,但是我没有得到slug,而是我得到了Region
个对象。
如果我这样做:
public function getView($region, $slug)
{
return $slug;
}
然后我回到了slu ..但是我不知道这怎么可能,我怎么能这样做(我作为现有项目的另一个开发者来了)。
我尝试评论所有中间件,但它仍然是相同的。如果我没有明确说出来,我怎么能做一些填充方法?
编辑
我注意到路线文件中存在绑定:
Route::bind('region', function ($value) {
...
});
现在如果我dd($value)
我得到了变量。这个价值是如何填补的?从哪里可以转发?
答案 0 :(得分:1)
快速查看它应该有效,但也许你正在验证其他网址。
请确保放置:
Route::get('{slug}', 'EventController@getView')->name('event.show');
Route::get('{slug}/edit', 'EventController@getEdit')->name('event.edit');
您显示的路线末尾的路线。
修改强>
如果您认为情况并非如此,并且您没有缓存您的路线,则应该运行:
php artisan route:list
验证您的路线。
<强> EDIT2 强>
OP在评论中解释后,用于访问网站的域名为:
{region}.example.com
因此,在控制器中将$region
作为第一个参数是正确的行为,因为路由模型绑定和其他路由参数将是第2个,第3个等等。
答案 1 :(得分:0)
而不是
Route::prefix('events')->namespace('Content\Controller')->group(function () {
Route::get('/', 'EventController@getIndex')->name('event.index');
Route::get('{slug}', 'EventController@getView')->name('event.show');
Route::get('{slug}/edit', 'EventController@getEdit')->name('event.edit');
Route::post('load-more-ajax/{region?}', 'EventController@postLoadMoreAjax');
Route::any('sorted-ajax/{region?}', 'EventController@anySortedAjax');
Route::get('category/{category_slug}/{subcategory_slug?}', 'EventController@getCategory');
});
尝试
Route::prefix('events')->namespace('Content\Controller')->group(function () {
Route::get('/', 'EventController@getIndex')->name('event.index');
Route::post('load-more-ajax/{region?}', 'EventController@postLoadMoreAjax');
Route::any('sorted-ajax/{region?}', 'EventController@anySortedAjax');
Route::get('category/{category_slug}/{subcategory_slug?}', 'EventController@getCategory');
Route::get('{slug}', 'EventController@getView')->name('event.show');
Route::get('{slug}/edit', 'EventController@getEdit')->name('event.edit');
});