有什么办法让我的所有控制器总是在 symfony2 中包含特定文件


Is there any way that my all controllers always include particular file in symfony2

当我必须在所有文件中使用一些类似的use statements时,我发现这很烦人。

不时地,我必须复制所有 conrollers 非常常见的行,例如

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

有什么方法可以在一个文件中定义它们,它们将被所有控制器使用,我的整个应用程序。

命名空间

的存在是为了防止文件之间的命名冲突,这就是为什么按照您的要求进行操作可能是不明智的。它可能会导致幻影错误,您无法解释,因为您忘记了类名的别名。更糟糕的是,如果其他人必须维护你的代码,他们真的可能会试图弄清楚为什么他们的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的第一个类名尚未定义或加载,则将调用任何已注册的类自动加载器以加载它。

好吧,如果您使用IDE,则可以最大程度地减少这种烦恼。例如,NetBeans 会自动完成类的完整 FQCN。然后,您可以使用其修复导入功能将定义移动到使用部分。PHPStorm 和 Eclipse PDT 也有类似的功能。