Новый пакет Laravel не находит правильный путь контроллера - PullRequest
0 голосов
/ 18 сентября 2019

Использование Laravel 5.6.39 Я установил пакет под названием Mercurius Messenger

Этот пакет устанавливает все свои активы через composer, поэтому я могу просматривать их в /vendor/launcher/

В своем репо у них есть файл маршрутов.

Route::group([
    'as'         => 'mercurius.',
    'namespace'  => '\Launcher\Mercurius\Http\Controllers',
    'middleware' => [
        // 'Mercurius',
        'web',
        'auth',
    ],
], function () {
    // Mercurius home
    Route::get('/messages', ['as' => 'home', 'uses' => 'MessagesController@index']);
    // User Profile
    Route::get('/profile/refresh', 'ProfileController@refresh');
    Route::get('/profile/notifications', 'ProfileController@notifications');
});

Пространство имен для контроллеров добавлено выше:

\Launcher\Mercurius\Http\Controllers

Когда я пытаюсь попасть на один из этих маршрутов, яполучить эту ошибку:

"Class App\Http\Controllers\Launcher\Mercurius\Http\Controllers\MessagesController does not exist"

Очевидно, что это добавляет пространство имен к текущему пространству имен для моего App \ Http \ Controllers, есть ли способ обойти это?Или мне нужно скопировать все относительные файлы в мой проект и разобраться, куда они должны идти?

1 Ответ

1 голос
/ 19 сентября 2019

Вам определенно не нужно (или вы не хотите) копировать файлы вендора в ваш проект.

Возможно, самый простой вариант - удалить атрибут namespace из вашей группы маршрутов и использовать полное пространство имен, когдаопределение маршрута.

Route::get('/messages', ['as' => 'home', 'uses' => '\Launcher\Mercurius\Http\Controllers\MessagesController@index']);
Route::get('/profile/refresh', '\Launcher\Mercurius\Http\Controllers\ProfileController@refresh');
Route::get('/profile/notifications', '\Launcher\Mercurius\Http\Controllers\ProfileController@notifications');

Кроме того, вы можете создать новый файл маршрутов (например, mercurius.php ) и отобразить его в вашем RouteServiceProvider.php с правильным пространством имен.

public function map()
{
    // ... existing route groups

    $this->mapMercuriusRoutes();
}

protected function mapMercuriusRoutes()
{
    Route::middleware(['web','auth','Mercurius'])
         ->namespace('\Launcher\Mercurius\Http\Controllers')
         ->group(base_path('routes/mercurius.php'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...