Laravel路由奇怪的行为

问题描述 投票:0回答:2

我有一个域/子域项目。为了通过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;
}

要到达我正在使用此URL的路线:https://example.com/events/slug-example

问题是路线被击中,因为当我改变它时我看到了响应,但我没有得到slug,而是我得到了Region对象。

如果我这样做:

public function getView($region, $slug)
{
    return $slug;
}

然后我把塞子弄回来了。但我不知道这怎么可能,我怎么能这样做(我作为现有项目的另一个开发者)。

我试着评论出所有的中间件,它仍然是一样的。如果我没有明确说出来,我怎么能做一些填充方法呢?

编辑

我注意到路由文件中存在绑定:

Route::bind('region', function ($value) {
    ...
});

现在如果我dd($value)我得到变量。这个价值是如何填补的?从哪里可以转发?

php laravel laravel-5 laravel-routing
2个回答
1
投票

快速查看它应该可以工作,但也许你正在验证其他网址。

确保你把:

Route::get('{slug}', 'EventController@getView')->name('event.show');
Route::get('{slug}/edit', 'EventController@getEdit')->name('event.edit');

您显示的路线尽头的路线。

编辑

如果您认为情况并非如此,并且您没有缓存路由,则应运行:

php artisan route:list

验证您的路线。

Aaditi

OP在评论中解释后,用于访问网站的域名是:

{region}.example.com

所以在控制器中将$region作为第一个参数是正确的行为,因为路由模型绑定和其他路由参数将是第2,第3等等。


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');
});
© www.soinside.com 2019 - 2024. All rights reserved.