Посмотрел несколько уроков по фасадам и laravel 4 … попробовал несколько … не понравилось, как они работают.
Например, не все они дают способ определить, где хранить файлы фасадов и поставщиков услуг … и я попытался отойти от этого и ударился головой о несколько стен, пока я не решил заняться этим потоком.
Итак: допустим, у меня есть приложение под названием Laracms (laravel cms).
Я хотел бы хранить все, что я создаю — фасады, поставщики услуг и т. Д. В папке в приложении с именем laracms.
Так что у меня есть / app / laracms / facades, / app / laracms / serviceproviders и так далее. Я не хочу смешивать фасады с моделями базы данных, я хочу, чтобы все было как можно более отдельно.
Давайте возьмем теперь, в моем случае, имя настроек для фасада (я хочу реализовать класс настроек для использования в представлениях и администратора для настройки разного. Вещи).
Настройки :: get (), Настройки :: 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
файл и в разделе autoload
-> 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'; }}
примечание: 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');
});
}
}