@mrFlyer

Как правильно передать заголовки из контролера\шаблона в главный шаблон (laravel5)?

Здравствуйте.

Изучаю ларавел 5 и не понятно как реализовать правильно следующее:

Есть класс который отвечает скажем за заголовок h1 и тэг title.

Я хочу его вызывать из любого контроллера или блэйд шаблона. Что то типа Titles->set("Привет!"); Внутри данного метода я обрабатываю данные и уже в основном шаблоне делаю Titles->getTitle() ; Titles->getH1();

Подскажите в какую сторону копать что бы правильно реализовать такой функционал. Заплутал я совсем в провайдерах, сервис контроллерах, фасадах и тд...

Заранее спасибо за помощь!
  • Вопрос задан
  • 217 просмотров
Пригласить эксперта
Ответы на вопрос 2
Создайте основной класс-помощник для таких целей, предположим app/Helpers/Titles.php:

<?php

namespace App\Helpers;

class Titles
{

    private $title = null;
    private $h1 = null;

    public function setTitle($title) {
        $this->title = $title;
    }

    public function getTitle() {
        return $this->title;
    }

    public function setH1($h1) {
        $this->h1 = $h1;
    }

    public function getH1() {
        return $this->h1;
    }

}


Зарегистрируйте такой класс-синглтон в app/Providers/AppServiceProvider.php:

...
    public function boot()
    {
...
        $this->app->singleton('Titles', function($app) {
            return new \App\Helpers\Titles();
        });
...
    }
...


Обращайтесь к такому помощнику из любого места контроллера или представления как:

app()['Titles']->setTitle('Очередной интернет-магазин');
app()['Titles']->getTitle();


Для придания более эстетичного вида можно использовать фасад, создать \app\Facades\Titles.php:

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Titles extends Facade
{

    protected static function getFacadeAccessor() {
        return 'Titles';
    }

}


Далее зарегистрировать его в \app\config\app.php:

...
    'aliases' => [
...
        'Titles' => \App\Facades\Titles::class,
...
    ],
...


И, допустим, использовать в контролере, например:

<?php

namespace App\Http\Controllers;

use Titles;

class UserController extends Controller
{

    public function signup() {
        Titles::setTitle('Добро пожаловать!');
        return view('user.signup');
    }

}


Удачи! ;-)
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Основной шаблон
<title>@yield('title')</title>

IШаблон страницы
@section('title') SomeTitle @endsection
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы