Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Подскажите правильное направление » 06.07.2016 14:13:50

Мне кажется такой подход не совсем гибкий, тем более что хочу использовать в связке Title и H1, где H1 может содержать HTML тэги, а для Title их нужно вычищать.

Покопавшись в SeoTools на гитхабе пришел к следующей конструкции через сервис провайдера:

PageToolsServiceProvider:

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;

use App\Http\MyLibs\PageTools\Contracts;
use App\Http\MyLibs\PageTools;

class PageToolsServiceProvider extends ServiceProvider{

    protected $defer = true;

    public function boot(){

    }

    public function register(){
        $this->app->singleton('pagetools', function () {
            return new PageTools();
        });

        $this->app->bind(Contracts\PageTools::class, 'pagetools');
    }

    public function provides(){
        return [
            Contracts\PageTools,
            'pagetools'
        ];
    }
}

Интерфейс:

<?php
namespace App\Http\MyLibs\PageTools\Contracts;

interface PageTools{
    public function setTitle($title);
    public function getTitle();
}

Сам класс:

<?php
namespace App\Http\MyLibs\PageTools;
use App\Http\MyLibs\PageTools\Contracts\PageTools as PageToolsContract;

class PageTools implements PageToolsContract{
    public $title;

    public function __construct(){
    }

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

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

Фасад

<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class PageToolsFacade extends Facade{protected static function getFacadeAccessor(){return 'pagetools';}}

Конфиг App

App\Providers\PageToolsServiceProvider::class,
'PageTools' =>  App\Facades\PageToolsFacade::class,

В итоге я хочу получить возможность в любом месте дергать методы, которые отвечают за отображение страницы. От сео примочек, до подключаемых JS\CSS бибилиотек которые я использую во view, непосредственно в шаблоне.

Ну и есть пара вопросов.

1. В правильном ли я направлении действую?
2. Как только начал в провайдере использовать связывание, вывалилась ошибка. Которую не могу победить:

FatalErrorException in Facade.php line 217: Call to undefined method App\Facades\PageToolsFacade::setTitles()

Подскажите что я делаю не так?

Заранее спасибо за помощь.

#2 Laravel 5.x » Подскажите правильное направление » 05.07.2016 15:42:06

mrFlyer
Ответов: 4

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

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

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

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

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

Заранее спасибо за помощь!

Подвал раздела