eX1stenZ
@eX1stenZ
Web Dev

Laravel: Заготовки шаблона?

Здравствуйте, я столкнулся с проблемой о реальном не знании как в Laravel сделать повторяющийся код.

Допустим, у меня есть 2 Controller'a:
BaseController
HomeController

Допустим в обоих мне надо передавать в шаблон layout.main -> {{ title }} с одинаковым содержимым

Самое одекватное решение для меня это: передать title при помощи with.

но как быть если у меня 5000 контроллеров? возможно ли как-то дублировать "Заготовки шаблона"
  • Вопрос задан
  • 2948 просмотров
Решения вопроса 1
vanchelo
@vanchelo
Можно создать сервис провайдер
<?php

use Illuminate\Support\ServiceProvider;

class MyServiceProvider extends ServiceProvider
{
    public function boot()
    {
        //
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        // Вешаем на роуты
        Route::when('*' , function ()
        {
            View::share('title', 'Дефолтный заголовок');
        });

        // или вот так на определенный шаблон
        View::composer(['layout.main', 'layout.page', /* ... */] , function ($view)
        {
            $view->with('title', 'Дефолтный заголовок');
        });
    }
}

Прописать этот сервис провайдер в /app/config/app.php -> providers -> MyServiceProvider
'providers' => [
    /* ... */
    'MyServiceProvider',
    /* ... */
],


Складывать провайдеры можно в отдельной папке (к примеру, app/services), затем прописать ей в composer.json
"autoload": {
    "classmap": [
        "app/services"
    ]
}

или лучше всего завести отдельный Namespace для своего кода
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Все возможно. Но 5000 контроллеров... вы уверены в том что вы делаете? Так же можно воспользоваться HMVC для решения этой проблемы. Вообще если у вас реально большой проект стоит пересмотреть выбор фреймворка и взять что-то более подходящее, например Symfony2
Ответ написан
Ваш ответ на вопрос

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

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