Laravel 路由异常行为

Laravel routing strange behavior

我有一个 domain/subdomain 项目。为了通过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) 我会取回变量。这个值是怎么填的?从哪里可以转发?

快速查看应该可以,但也许您正在验证其他 url。

确保你输入:

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 作为第一个参数是正确的行为,因为路由模型绑定和其他路由参数将是第二个、第三个等等。

而不是

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');
});