Может войдёшь?
Черновики Написать статью Профиль

Как создать фасад в Laravel 4

перевод

Есть три компонента при создания фасада:

  1. Корень фасада (Facade Root) — базовый класс, методы которого вызывает фасад.
  2. Класс фасада, который указывает Laravel, к какому зарегистрированному (базовому) классу он относится.
  3. Сервис-провайдер, который регистрирует базовый класс в контейнере приложения (PHPApp).

Сценарий использования

Предположим, у нас есть класс, для которого мы хотим сгенерировать фасад. Например, класс PHPFideloper\Example\UnderlyingClass.

PHP
<?php namespace Fideloper\Example;

class 
UnderlyingClass {

    public function 
doSomething()
    {
        echo 
'Doing something!';
    }

}

Теперь предположим, что мы хотим создать такой фасад для этого класса, который позволит разработчикам получать доступ к нему с помощью таких вызовов:

PHP
UnderlyingClass::doSomething();

Реализация

Сначала вам надо создать класс фасада:

PHP
<?php namespace Fideloper\Example\Facades;

use 
Illuminate\Support\Facades\Facade;

class 
UnderlyingClass extends Facade {

    
/**
     * Получить зарегистрированное имя компонента.
     *
     * @return string
     */
    
protected static function getFacadeAccessor() { return 'underlyingclass'; }

}

Возвращая underlyingclass из метода-доступа фасада, мы даем понять Laravel, что класс фасада ищет PHP$app['underlyingclass'].

Далее вам надо соединить ваш базовый класс с вашим фасадом. Это можно сделать с помощью сервис-провайдера, который сделает две вещи:

  1. Привяжет underlyingclass к нашему объекту PHPUnderlyingClass. Как уже упоминалось выше, это соединит идентификатор фасада underlyingclass с привязанным PHP$app['underlyingclass'].
  2. Создаст псевдоним, используемый для доступа к базовому классу PHPUnderlyingClass. Этот псевдоним зарегистрирован для созданного нами фасада, который в свою очередь настроен на доступ к нашему базовому классу. Понятно? Хорошо. Примечание: установка псевдонима в сервис-провайдере — это создание ярлыка, поэтому вам не надо беспокоиться о добавлении записи в псевдонимы в app/config/app.php. На мой взгляд, добавление псевдонима в сервис-провайдере проще для разработчиков — просто подключите сервис-провайдер в app/config/app.php и продолжайте работу!

Вот сервис-провайдер:

PHP
<?php namespace Fideloper\Example;

use 
Illuminate\Support\ServiceProvider;

class 
ExampleServiceProvider extends ServiceProvider {

    
/**
     * Регистрация сервис-провайдера.
     *
     * @return void
     */
    
public function register()
    {
        
// Регистрация экземпляра контейнера 'underlyingclass' для нашего объекта UnderlyingClass
        
$this->app['underlyingclass'] = $this->app->share(function($app)
        {
            return new 
Fideloper\Example\UnderlyingClass;
        });

        
// Создание ярлыка, разработчикам не надо добавлять псевдоним в app/config/app.php
        
$this->app->booting(function()
        {
            
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
            
$loader->alias('UnderlyingClass''Fideloper\Example\Facades\UnderlyingClass');
        });
    }
}

Последний шаг — зарегистрируйте ваш сервис-провайдер в файле app/config/app.php вместе с другими провайдерами, и вы сможете использовать ваш новый фасад!

PHP
'providers' => array(

    ... 
Прочие провайдеры выше ...
    
'Illuminate\Workbench\WorkbenchServiceProvider',

    
'Fideloper\Example\ExampleServiceProvider',

),

Вот и всё! Вы можете использовать ваш фасад как того и хотели:

PHP
UnderlyingClass::doSomething();

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.