Задать вопрос
@flammerman
Web Developer / И фронт и сервер

Что нужно сделать в Laravel 5.6, чтобы фреймворк понимал эту конструкцию?

Привет Всем

Недавно нашел интересный для себя репозиторий https://github.com/z-song/laravel-admin для админки. Понравился тем, что не "гадит" своими файлами в приложение, то есть админка жестко отделена от структуры папочкой Admin в разделе App\Admin. Задумал все свои админ контроллеры перенести в такую жу папку на тестовой ветке. Но как заставить ларавелку видеть контроллеры в этой папке. Структура примерно такая должна быть:
App
-- Admin
------ Controllers
---------- DashboardController.php
------ Extensions
------ Middleware
------ e/t/c по вкусу ...
Прописал в файле routes\web.php
use Illuminate\Routing\Router;

Route::group([
    
    'prefix'        => 'admin',
    'namespace'     => 'App\\Admin\\Controllers',
    'middleware'    => ['web'],

], function (Router $router) {
    
    $router->get('/welcome', function () {
    	return view('welcome');	
    });
    $router->get('/dashboard', 'DashboardController@index');
    
});


В DashboardController

namespace App\Admin\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class DashboardController extends Controller
{
    public function index()
    {
    	return view('welcome')
    }
}


Но сцабака ошибку выдает 5b0af5fea668f790313732.jpeg

Он прибавляет всегда конструкцию в начале App\Http\Controllers к любому Namespace в таком роуте. Миддвейр контейнер @web@ - стандартный комплект идущий с установкой системы, ничего нет даже логинов.
  • Вопрос задан
  • 277 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@flammerman Автор вопроса
Web Developer / И фронт и сервер
Вроде бы нашел решение, не знаю будут ли подводные камни

В папку App/Admin кладем файлик routes.php
use Illuminate\Routing\Router;

Route::group([
    
    'prefix'        => config('admin.route.prefix'),                 // 'admin'
    'namespace'     => 'App\\Admin\\Controllers',
    'middleware'    => config('admin.route.middleware'),  // ['web']

], function (Router $router) {
    
    $router->get('/welcome', function () {
    	return view('welcome');	
    });
    $router->get('/dashboard', 'DashboardController@index');
    
});


Далее делаем сервис провайдер для админки: (AdminServiceProvider.php)
namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AdminServiceProvider extends ServiceProvider
{

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot() // Собственно эта функция и есть мое решение (грузит роуты для админки)
    {
        if (file_exists($routes = config('admin.admin_dir').'/routes.php')) {
            $this->loadRoutesFrom($routes);
        }
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}


Регистрируем сервис провайдер в конфиге app.php, внизу там как обычно, увидите кто новичек такие строки
и добавите туда еще одну строку:
App\Providers\AdminServiceProvider::class,
Ну и вроде бы все, видим любые контролеры по маршрутам example.com/admin/some_action
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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