LoginSignup
4
5

More than 5 years have passed since last update.

LaravelのFacadeをLaravel以外から使う

Posted at

基本的にはLaravel コードで見るファサードクラスの仕組み - Shin x blog
を見ればよいのだけれど、How Laravel Facades Work and How to Use Them Elsewhereという記事があったので、試しにSilexからFacadeを使ってみる。

ざっくりおさらい

  • Facadeは、PimpleのようなIocコンテナに格納されたサービスを簡単に使うための方法。
  • App::make('some_service')->methodName()app()->make('some_service')->methodName()のかわりに、SomeService::methodName()と書くことができる。
  • Facadeという名前については色々議論がある。
  • LaravelのFacadeを使うこと自体についても色々議論はある。個人的にはケースバイケースではないかと思う。

ではまずSilexとMonolog、そしてFacadeを使うためにilluminate/supportをインストールしよう。

$ composer require silex/silex monolog/monolog illuminate/support

適当にログを出力するアプリを作る。

web/index.php
<?php
require __DIR__.'/../vendor/autoload.php';

$app = new Silex\Application();
$app->register(new Silex\Provider\MonologServiceProvider(), [
    'monolog.logfile' => 'php://stderr'
]);

$app['monolog']->addInfo("Hello");

このように、Monologを"monolog"という文字列をキーに呼び出している。これの代わりとなるFacadeクラスを作ろう。

app\Facades\Log.php
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Log extends Facade
{
    protected static function getFacadeAccessor() {
        return 'monolog';
    }
}

composer.jsonにautoloaderの設定をしてcomposer dump-autoloadしておこう。

composer.json
{
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    },
...

Facade::setFacadeApplication()にコンテナを渡す。これだけで取りあえずはFacadeを使えるようになる

web/index.php
<?php
require __DIR__.'/../vendor/autoload.php';

$app = new Silex\Application();
$app->register(new Silex\Provider\MonologServiceProvider(), [
    'monolog.logfile' => 'php://stderr'
]);

Illuminate\Support\Facades\Facade::setFacadeApplication($app);

$app['monolog']->addInfo("Hello");
App\Facades\Log::addInfo("World");

これでも悪くないが、使う場合はnamespaceを書くかuseする必要がある。LaravelのAliasLoaderを使えばこれを省略することができる。なんだけれどもAliasLoaderを使うにはlaravel/frameworkが必要なようだ。さすがにちょっとやり過ぎ感があるのでここでやめておこう。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5