Задать вопрос
@g905

Как задать маршрут «/» в модуле Laravel?

Привет.
Есть маршруты модулей в modules.php:
<?php
Route::group(['namespace' => 'Gepard\Modules\Core\Controllers', 'middleware' => 'admin'], base_path('app/Modules/Core/Routes/routes.php'));
Route::group(['prefix' => '/admin', 'namespace' => 'Gepard\Modules\Admin\Controllers', 'middleware' => 'admin'], base_path('app/Modules/Admin/Routes/routes.php'));
Route::group(['namespace' => 'Gepard\Modules\Page\Controllers'], base_path('app/Modules/Page/Routes/routes.php'));
Route::get('/', 'Gepard\Modules\Page\Controllers\PageController@index');

Указаны префиксы, хренефиксы, неймспейсы, базовый путь к файлам с маршрутами модуля.
Очевидно же, что "если видим префикс "админ", то идем в файл /base_path/ и берем маршруты оттуда, вставляя неймспейс модуля".

Ок, берем модуль "Админ", вот его файл с маршрутами:
<?php
    Route::get('/', 'AdminController@index')->name('sdf');
    Route::get('/test/{id?}', 'AdminController@view');
    Route::get('/profile/{user?}', 'ProfileController@index')->name('a.user');


Я ожидаю, что по маршруту "domain.local/admin" мне покажут index() из AdminController (Modules\Admin\Controllers\AdminController), а по маршруту "domain.local/" мне покажут вот это
Route::get('/', 'Gepard\Modules\Page\Controllers\PageController@index');

Так вот, по маршруту "domain.local/admin" мне таки показывают все что нужно, а вот по маршруту "domain.local/" мне пишут, что Контроллер AdminController не найден, мать его! С чего? С какого они взяли, что для маршрута "/" нужен маршрут из группы с префиксом "admin"?

Пробую убрать вообще "/" из группы "admin". Пишут, что CoreController не найден. Это потому что там тоже определен маршрут "/". Ок, убираем и его. И вот тогда уже мне выдают этот ваш
Route::get('/', 'Gepard\Modules\Page\Controllers\PageController@index');

Т.е., я не могу создать маршрут просто с черточкой "/". Одного префикса недостаточно. Почему?
Как мне создать тогда индексный маршрут для модуля? Я хочу, чтобы по адресу domain.local/admin запускался Gepard\Modules\Admin\Controllers\AdminController@index, а по адресу domain.local/ запускалось что-то еще, пусть Gepard\Modules\Admin\Controllers\PageController@index, ну или хотя бы App\Http\Controllers\WelcomeController@index... Что мне поправить?

Что не так с этими неймспейсами?(

modulesServiceProvider
<?php namespace Gepard\Modules;
use Illuminate\Support\ServiceProvider;
/**
* Сервис-провайдер для подключения модулей
*/

class ModulesServiceProvider extends ServiceProvider {
    public function boot()
    {
        $modules = config('module.modules');
        if($modules)
        {
            foreach ($modules as $module)
            {
                if (file_exists(__DIR__.'/'.$module.'/Routes/routes.php'))
                {
                    $this->loadRoutesFrom(__DIR__.'/'.$module.'/Routes/routes.php');
                }
                //Загружаем View
                //view('Test::admin')
                if(is_dir(__DIR__.'/'.$module.'/Views'))
                {
                    $this->loadViewsFrom(__DIR__.'/'.$module.'/Views', $module);
                }
                //Миграции
                if(is_dir(__DIR__.'/'.$module.'/Migrations'))
                {
                    $this->loadMigrationsFrom(__DIR__.'/'.$module.'/Migrations');
                }
                //Переводы
                if(is_dir(__DIR__.'/'.$module.'/Lang'))
                {
                    $this->loadTranslationsFrom(__DIR__.'/'.$module.'/Lang', $module);
                }
            }
        }
    }

    public function register()
    {

    }
}


RouteServiceProvider
protected function mapModulesRoutes()
    {
        Route::middleware('web')
             ->group(base_path('routes/modules.php'));
    }
  • Вопрос задан
  • 235 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
Ну по моему все очевидно - в вашем ModuleLoader'е вы загружаете рауты напрямую из __DIR__.'/'.$module.'/Routes/routes.php' (лучше app_path(), ну да ладно), и, скорее всего, вы подключаете этот провайдер после дефолтного ларавеловского, который грузит routes/modules

Либо используете одно (и группы внутри соответствующих модулей - более правильное решение), либо другое (ваш modules.php, но это бредовая имплементация, учитывая, что laravel позволяет делать большее (и вы уже это сделали))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы