在Symfony 3中组织模型

时间:2017-06-26 19:05:13

标签: php symfony doctrine-orm

我刚刚阅读了官方的Symfony 3文档并指出当我需要从数据库中检索对象时我应该使用这样的东西:

$repository = $em->getRepository('AppBundle:Product');

这里Product只是一个没有父级的实体类,因此Doctrine通过注释来处理它。但我不确定用引号对模型名称进行硬编码是个好主意。如果稍后我总结命名模型 Good ,我应该搜索整个项目并替换Good on Good。以Laravel为例,每个模型都扩展了基础模型类,因此我可以编写:Product::model()->find('nevermind')。 Symfony 3.3中有没有这样的选项?

3 个答案:

答案 0 :(得分:4)

如果它是您问题的解决方案,我不会感到害羞,但您可以写下:

$repository = $em->getRepository(Product::class);

答案 1 :(得分:1)

publishMessageSource("market-data", ADDRESS, { record: Handler<AsyncResult<Unit>> -> if (!record.succeeded()) { record.cause().printStackTrace() } println("Market-Data service published : ${record.succeeded()}") }) 返回混合数据类型(取决于第一个参数)。即使您编写Type Mismatch required Handler<AsyncResult<Unit>> found (Handler<AsyncResult<Unit>>) -> Unit,IDE也无法解析实际数据类型。我建议这个方法(伪代码):

$em->getRepository('...')

答案 2 :(得分:1)

您可以将存储库声明为如下服务:

services:
    app.product_repo:
        class: AppBundle\Entity\ProductRepository
        factory: ['@doctrine.orm.default_entity_manager', getRepository]
        arguments:
            - AppBundle\Entity\Product

然后在你的控制器中:

$repository = $em->get('app.product_repo');

至少它适用于PHPStorm及其Symfony插件。实现服务的自动完成是必须的。