2

use statementsすべてのファイルで同様のものを使用する必要がある場合、非常に煩わしいと思い ます。

時々、私はすべてのコントローラーにコピーする必要があります。

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

それらを1つのファイルで定義し、アプリ全体のすべてのコントローラーで使用される方法はありますか?

4

2 に答える 2

2

名前空間は、ファイル間の名前の衝突を防ぐために存在します。そのため、求めていることを実行するのは賢明ではありません。クラス名にエイリアスを付けたことを忘れたため、後で説明できない幻のエラーが発生する可能性があります。さらに悪いことに、他の誰かがあなたのコードを保守しなければならない場合、Controllerクラスが正しくロードされない理由を突き止めようとして、彼らは実際に小川を上る可能性があります。

ただし、本当に必要な場合は、class_aliasドキュメントを使用してこれを実現できます。古き良き名前空間とuseステートメントに固執することをお勧めしますが、私のアドバイスを無視したい場合は、次のことを行うことができます。

<?php // namespace_aliases.php

class_alias(
    'Symfony\Bundle\FrameworkBundle\Controller\Controller',
    'Controller'
);
class_alias(
    'Sensio\Bundle\FrameworkExtraBundle\Configuration\Method',
    'Method'
);

// etc.

そして、他の場所にnamespace_aliases.phpファイルを含めるだけです。に渡された最初のクラス名class_aliasがまだ定義されていないか、ロードされていない場合、ロードするために登録されたクラスのオートローダーが呼び出されることに注意することが重要です。

于 2012-08-17T03:59:24.103 に答える
0

IDEを使用する場合、この煩わしさを最小限に抑えることができます。たとえば、NetBeansはクラスの完全なFQCNを自動完了します。次に、その修正インポート機能を使用して、定義を使用するセクションに移動できます。PHPStormとEclipsePDTにも同様の機能があります。

于 2012-08-17T05:46:54.210 に答える