我的所有控制器是否总是包含symfony2中的特定文件

时间:2012-08-17 03:44:46

标签: php symfony doctrine-orm

当我必须在所有文件中使用类似的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;

有没有办法在一个文件中定义它们,并且所有控制器都会使用它们来整个应用程序。

2 个答案:

答案 0 :(得分:2)

存在命名空间以防止跨文件命名冲突,这就是为什么做你要求的事情可能是不明智的。它可能会导致你无法解释的幻影错误,因为你忘记了别名的类名。更糟糕的是,如果其他人不得不维护你的代码,那么他们真的可能会在小溪上试图找出为什么他们的Controller课程无法正确加载。

然而,如果您真的想要,可以使用class_aliasdocs来完成此任务。我建议坚持使用好的老式名称空间和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的第一个类名尚未定义或加载,则将调用任何已注册的类自动加载器以加载它。

答案 1 :(得分:0)

如果您使用IDE,这种烦恼可以最小化。例如,NetBeans自动完成类的完整FQCN。然后,您可以使用其fix import功能将定义移至使用部分。 PHPStorm和Eclipse PDT也有类似的功能。