3

我对 Symfony2 比较陌生,所以我边做边学。我的控制器类越来越大。我想用函数()或对象->方法()来分解它。不幸的是,我无法弄清楚将代码放在哪里。(实际上它非常简单的功能......但我可以将它包装在一个对象中......)

--我无法将它添加到我的 DefaultController.php 文件的底部。它会出错,并且在 {} 内部或外部都不是可以启动的漂亮代码。

--我不能简单地将新的NewObject.php 文件添加到控制器目录中。那错误了。错误: FatalErrorException: ...NewObject 未找到。

--我已经玩弄了../app/autoload.php 的手动修改,但这对于添加到我的./SRC/ 包中的简单类来说并没有什么意义。也许我应该构建一个 ./src/autoload.php 文件(类似于 ./vender/autoload.php),但该文件的内容对我来说根本没有意义。我根本无法弄清楚 AnnotationRegistry 加载器是如何工作的。

我错过了什么吗?这似乎太难了..我想要的是一个包装好的“包含”,所以我可以在开发和部署之后使用该类。

如何在我的代码中包含 NewObject.php (以及随附的 $newObject->function() )?

我被告知我可以添加一个服务,但是对于这样一个看似简单的任务来说,这似乎是一个令人发指的开销(同样,我要做的只是清理我很长的控制器 php 代码......)

提前感谢您的建议。

4

1 回答 1

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 服务记录电子邮件活动。

但是,如果您的类不需要了解应用程序(称为“服务容器”),例如,如果它只是用于传输数据,那么辅助类可能更合适。

于 2013-06-29T01:54:43.527 回答