我对Symfony2比较陌生,所以我正在边做边学。我的控制器类变得越来越大。我想用函数()或对象 - >方法()来分解它。不幸的是我无法弄清楚代码的放置位置。 (实际上它的功能非常简单......但我可以将它包装在一个对象中......)
- 我无法将其添加到DefaultController.php文件的底部。它错误输出,而不是在{}内部或外部引导的漂亮代码。
- 我不能简单地将新的NewObject.php文件添加到控制器目录中。那错误了。错误:FatalErrorException:...找不到NewObject。
- 我已经玩过手动mod到../app/autoload.php但是对于一个简单的类添加到我的./SRC/包中并没有用。也许我应该构建一个./src/autoload.php文件(类似于./vender/autoload.php),但该文件的内容对我来说根本没有意义。我根本无法弄清楚AnnotationRegistry Loader是如何工作的。
我错过了什么吗?这看起来太难了...我想要的是一个包裹'include'所以我可以在开发和部署后使用该类。
如何在我的代码中包含NewObject.php(以及随附的$ newObject-> function())?
我被告知我可以添加一项服务,但对于这样一个看似简单的任务而言,这似乎是一种无聊的开销(同样,我要做的就是清理我的长控制器php代码...)
提前感谢您的建议。
答案 0 :(得分:7)
所以你有一个看起来像这样的项目结构,对吗?
project
-- app
-- bin
-- src
-- SomeName
-- SomeBundle
-- Controller
-- Entity
-- Resources
-- ...
-- vendor
-- web
而你只是希望拥有一种在整个捆绑中使用的“助手”类。这是对的吗?
如果是这样,那么你真的可以把它放在src/
目录中的任何地方......只要确保类名与文件名匹配,并且文件的路径与命名空间匹配在PHP代码的顶部定义。
有时当我这样做时,我会在我的捆绑下创建一个名为“Helper /”的简单目录。其他时候,当应用程序更复杂时,我可能会更明确一些。但这是第一个案例的样子......
首先,在您的包下添加您的/Helper
目录,然后创建类文件:
project
-- app
-- bin
-- src
-- SomeName
-- SomeBundle
-- Controller
-- Entity
-- Helper
-- SomeHelper.php
-- Resources
-- ...
-- vendor
-- web
SomeHelper.php
的内容可能如下所示:
<?php
namespace SomeName\SomeBundle\Helper;
class SomeHelper
{
public function doSomething()
{
...
}
}
由于您的命名空间与文件路径匹配,因此它会自动加载,因此您无需担心包含语句。只要包含use
语句:
<?php
namespace SomeName\SomeBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use SomeName\SomeBundle\Helper\SomeHelper;
class DefaultController extends Controller
{
public function indexAction()
{
...
$helper = new SomeHelper();
$helper->doSomething();
...
}
}
关于服务的使用......是的,这可能是过度的,取决于你使用它的目的。当类需要知道它周围的应用程序时,创建服务是有帮助的。例如,如果您要创建一个通过电子邮件发送给用户的服务,它可能希望通过Doctrine服务访问您的数据库,或者它可能希望通过Monolog服务记录电子邮件活动。
但是,如果您的类不需要知道应用程序(称为“服务容器”),例如,如果它只是用于传输数据,那么辅助类可能更合适。