Как создать собственный фасад в Laravel 4

Посмотрел несколько руководств по фасадам и laravel 4 … попробовал … не понравилось, как они работают.

Например, они не все предоставляют способ определить, где хранить файлы фасадов и поставщиков услуг … и я попытался отойти от этого и получил мою голову наткнулся на несколько стен, пока я не решил сделать эту нить.

Итак: скажем, у меня есть приложение под названием Laracms (laravel cms).

Я хотел бы сохранить все, что я создаю – фасады, поставщики услуг и т. Д. В папке под приложением с именем laracms.

Поэтому у меня были бы / app / laracms / facades, / app / laracms / serviceproviders и так далее. Я не хочу смешивать фасады с моделями баз данных, я хочу, чтобы вещи были как можно более раздельными.

Возьмем теперь, в моем случае, имя параметра для фасада (я хочу реализовать класс настроек для использования в представлениях и администратора для настройки разного типа).

Настройки :: get (), Settings :: set () как методы.

Может ли кто-нибудь объяснить, как правильно установить фасады? Я не знаю, что я делаю неправильно, и мне нужно новое начало.

Спасибо, Крис

Ищете шаг за шагом простые объяснения того, как и почему.

Сначала вам нужно перейти в app/config/app.php и в разделе providers добавить:

 'Laracms\Providers\SettingsServiceProvider', 

В том же файле в разделе aliases вы должны добавить:

  'Settings' => 'Laracms\Facades\Settings', 

В app/Laracms/Providers вы должны создать файл SettingsServiceProvider.php

 <?php namespace Laracms\Providers; use Illuminate\Support\ServiceProvider; class SettingsServiceProvider extends ServiceProvider { public function register() { $this->app->bind('settings', function() { return new \Laracms\Settings(); }); } } 

В вашем app/Laracms/Facades/ вы должны создать файл Settings.php :

 <?php namespace Laracms\Facades; use Illuminate\Support\Facades\Facade; class Settings extends Facade { protected static function getFacadeAccessor() { return 'settings'; } } 

Теперь в вашем каталоге app/Laracms вы должны создать файл Settings.php :

 <?php namespace Laracms; class Settings { public function get() {echo "get"; } public function set() {echo "set"; } } 

Поскольку вы хотели иметь свои файлы в пользовательских папках Laracms вам нужно добавить эту папку в ваш composer.json (Если вы использовали стандартную папку app/models вам не нужно было бы ничего добавлять к этому файлу). Итак, теперь откройте файл composer.json и в разделе classmap -> classmap вы должны добавить app/Laracms чтобы этот раздел composer.json мог выглядеть так:

 "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php", "app/Laracms" ] }, 

Теперь вам нужно запустить консоль внутри вашего проекта:

 composer dump-autoload 

создать карту классов

Если все в порядке, теперь вы сможете использовать в своих приложениях Settings::get() и Settings:set()

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

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

  • Хочется быть Фасадным классом, который должен стать фасадом.
  • Фасад потребовал класса, который сообщает Laravel, какой зарегистрированный класс он имеет отношение к
  • Поставщик услуг, который регистрирует класс Facade в контейнере App

1. хочу быть классом фасада:

 <?php namespace Moubarmij\Services\ModelsServices; class AuthenticationService extends MoubarmijService implements AuthenticationServiceInterface{ /** * @param $email * @param $password * * @return mixed */ public function login($email, $password) { return Sentry::authenticate([ 'email' => $email, 'password' => $password, ]); } /** * @return mixed */ public function logout() { return Sentry::logout(); } } 

2. необходимый класс для работы фасада:

 <?php namespace Moubarmij\Facades; use Illuminate\Support\Facades\Facade; /** * Class AuthenticationServiceFacade * @package Moubarmij\Services\ModelsServices */ class AuthenticationServiceFacade extends Facade{ /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'authentication_service'; } } 

note: authentication_service может быть любым, что вы хотите (его имя компонента, зарегистрированного в IOC)

3. поставщик услуг

 <?php namespace Moubarmij\Providers; use Illuminate\Support\ServiceProvider; /** * A service provider for the Authentication Service * * Class AuthenticationServiceSP * @package Moubarmij\Providers */ class AuthenticationServiceSP extends ServiceProvider { /** * bind interfaces * * @return void */ public function register() { // Register 'authentication_service' instance container to our AuthenticationService object $this->app['authentication_service'] = $this->app->share(function($app) { return $app->make('Moubarmij\Services\ModelsServices\AuthenticationService'); }); // Shortcut to auto add the Alias in app/config/app.php $this->app->booting(function() { $loader = \Illuminate\Foundation\AliasLoader::getInstance(); $loader->alias('AuthenticationService', 'Moubarmij\Facades\AuthenticationServiceFacade'); }); } }