组织symfony2项目服务/类的最佳实践

时间:2015-05-05 12:36:52

标签: php symfony

开头的一些信息。我使用的是2.7.0-BETA1,但以下问题更多的是关于Symfony2的Best-Practice。 我阅读了Symfony的最佳实践指南。对于基础知识来说,它们很好,但有些事情对我来说似乎并不清楚。

我们正在从非框架应用程序迁移到symfony2。我们将把核心部分放入一个捆绑包中。 (我知道对此有不同的看法。)插件将在测试\plugin\FooblaPluginBundle

每个用户都可以在他的个人资料中设置一些设置,这些设置保存在表格中(conf)(字段:id,category,key,value,accountid) 我刚开始写一个服务。 (刚开始,因为我不确定正确的方法)

<?php
namespace Test\CoreBundle\core;
use Doctrine\ORM\EntityManager;

class Configuration {

    private $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function loadAll($accountid = '1') {
         $conf = $this->em->getRepository('TestCoreBundle:Conf')->findAllByAccount('1');
         dump($conf);
    }
}

最后控制器会像

那样
$conf = $this->get('test.conf');
$conf->setCategory('foobla');
$conf->get('keyname');

只需填写代码:(services.yml)

services:
test.conf:
    class: Test\CoreBundle\core\Configuration
    arguments: [ @doctrine.orm.entity_manager  ] 

这是正确的方式吗?

使用的密钥/设置将(再次)在代码中使用默认值和可能的选项进行硬编码,用户可以设置这些选项。在注册时,将为用户设置默认值。 这些信息将放在我将放入Test\CoreBundle\Core\Configuration\{category}

的其他一些课程中

第二个&#34;基地&#34;题: 我们有一些可以独自留下的课程。 (例如,有一个日期/时间类,它对给定的时间戳进行一些计算)但我不知道在哪里放置它。 如果我把它们放在in&#34; Services&#34;它迟早会混乱。 将它们放在不同的(基于它们的功能)不同的文件夹中会更好。

请让我知道有关这个想法和想法的任何想法。我很乐意听到你的消息。

更新:最后的想法:将类直接放在命名空间文件夹中是否完全错误&#34; test&#34; ?

1 个答案:

答案 0 :(得分:1)

我认为第一个问题是询问您的Conf服务是否正确设置并且答案是肯定的。在某些时候,您应该学习如何将存储库定义为服务,并注入存储库而不是完整的实体管理器。但这只是一个改进。

第二个问题似乎是谈论独立组件。制作一个Test \ Component目录并将它们放在那里。最终,您可能希望将它们放在自己的存储库中,并使用composer来加载它们。但这又是一个改进。

如果您还没有这样做,请花些时间为迁移编写一些自动化测试。随着事情的进展,设计变得更加清晰,这将使你有能力重新考虑因素。