【问题标题】:What is best way to add additional object classes to my symfony2 controller files?将其他对象类添加到我的 symfony2 控制器文件的最佳方法是什么?
【发布时间】:2013-06-29 01:12:54
【问题描述】:

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

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

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

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

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

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

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

提前感谢您的建议。

【问题讨论】:

    标签: symfony controller include registry autoloader


    【解决方案1】:

    所以你有一个看起来像这样的项目结构,对吧?

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

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

    【讨论】:

    • 哇……托马斯,我欠你一两杯啤酒。多谢。我有一些小错误。都修好了。 '
    猜你喜欢
    • 2020-10-17
    • 2015-04-26
    • 2013-07-08
    • 2011-07-28
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多