2017-07-05 17 views
0

私は、LaravelがFacadeクラスに基づいて魔法の機能をどのように作成するかについて、何かを求めています。今私が欲しいのは、クラス名に基づいて作成された魔法の関数の中心的なクラスです。たとえば: クラス名の動的関数

// Example main class 
class Facade 
{ 
    public function __construct(array $aliases = []) 
    { 
     $this->aliases = $aliases; 
    } 

    public function load() 
    { 
     // Do some magic... 
    } 
} 

// Example Facade subclass 
class Navigation 
{ 
    public function items(string $name) 
    { 
     return $name; 
    } 
} 

// Array with aliases 
$aliases = [ 
    'navigation' => 'App\Facades\Navigation', 
]; 
new Facade($aliases); 

// Then I want to call everywhere: 
echo navigation()->items('name'); == 'name' 

私はこれをどのように行うことができ、私はLaravelこれはどうするかについては何も見つけることができません。

答えて

0

ではなく、ファサードクラスのPHPのオートローダーを定義します。その後、

spl_autoload_register(function ($class_name) { 
    $aliases = [ 
     'navigation' => 'App\Facades\Navigation', 
    ]; 

    if (array_key_exists($class_name, $aliases) { 
     include $aliases[$class_name] . '.php'; 
    } 
}); 

そして(不足しているブラケットに注意を払う)ことで、あなたのクラスを呼び出す:詳細情報については

echo navigation->items('name'); 

からPHP autoload doc

+0

あなたの答えをありがとう。私があなたに見えるのは、ファイルを含むことだけです。しかし、すべてのクラス/ファイルは、すでにコンポーザーのオートローダーによって読み込まれています。また、ナビゲーションは関数ではありません: '' navigation() - > items(); '' '。 – justkidding96