【问题标题】:Best practice for organizing symfony2 project services/classes组织 symfony2 项目服务/课程的最佳实践
【发布时间】:2015-05-05 12:36:52
【问题描述】:

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

我们正在从非框架应用程序迁移到 symfony2。我们将把核心部分放在一个包中。 (我知道对此有不同的看法。)插件将在Test\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}

的其他一些类中

第二个“基础”问题: 我们有一些可以单独上课的课程。 (例如有一个日期/时间类,它对给定的时间戳进行一些计算)但我不知道把它放在哪里。 如果我把它们放在例如在“Services”中,迟早会变得混乱。 将它们放在不同的文件夹中(基于它们的功能)会更好。

请让我知道关于这个想法和我的想法的任何想法。我很想听听你的意见。

更新:最后的想法:将类直接放在命名空间文件夹“test”中会完全错误吗?

【问题讨论】:

  • 关于配置服务,我建议使用工厂服务,它实际上为给定用户创建了一个具体的配置对象。例如。 $factory-&gt;createFor($accountId): Configuration。您甚至可以将其封装在服务容器中。
  • @Yoshi 非常感谢。我将看看使用工厂创建服务。

标签: php symfony


【解决方案1】:

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

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

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

【讨论】:

  • 这是我所期望的答案。感谢您的提示。我会尝试一下我的想法和您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多