Посмотрел несколько руководств по фасадам и 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()
Вы должны заметить, что я использовал папки с верхними, потому что пространства имен по соглашениям начинаются с верхних букв.
Есть три компонента для создания фасада:
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'); }); } }