namespaceを利用した開発方法


namespace psr facades

 悩み事

Laravelのプロジェクトでnamespaceを利用したい

PSR−0、PSR−1、PSR−2、PSR−4コーディング規約については理解していて、
実際に利用したいが、LaravelのFacadeを巧く利用できない

 解決方法

PSR-0準拠のディレクトリ構造にも記されている通り、
composer.jsonを編集します。

編集後に autoloadファイルを再生成しましょう

$ composer dump-autoload

これで名前空間を使用して、クラスの階層を構築することができます

Facadeはどうすればいいですか?

Laravelのファサードはグローバルで作用する為、
コントローラーやモデルで名前空間を利用すると、 その名前空間内ではインポートされていない為利用が出来なくなります

利用するにはいくつか方法があります

完全修飾名

Facadeの頭にスラッシュをつけて利用します

<?php
namespace Acme\Controllers;

class AcmeController extends BaseController
{

    public function action()
    {
        return \View::make('hello');
    }
}

Facadeをインポート

useで利用するファサードをインポートします
これはFacadeをそのまま指定するか、またはIlluminate\Support\Facadesを指定します

<?php
namespace Acme\Controllers;

use Config;
// または
use Illuminate\Support\Facades\Config;

class AcmeController extends BaseController
{

    public function action()
    {
        Config::get('app.key');
    }
}

 アドバイス

利用環境にもよりますが、pecl Eventをインストールしている環境では、
Eventが衝突するため、下記の様にして回避する必要があります

<?php
namespace Acme;

use Illuminate\Support\Facades\Event as IlluminateEvent;

class AcmeModel
{
    public function all()
    {
        IlluminateEvent::fire('acme.event', [__FUNCTION__]);
    }
}

名前空間についてしっかりと理解する事で、対応する事が出来ます


Author:Chuck Heintzelman

Editor and Translator:Yuuki Takezawa