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

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

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

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

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

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

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

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

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

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

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

6

Решение

Сначала вам нужно пойти в 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()

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

13

Другие решения

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

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

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');
});

}
}
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector