小编rvd*_*vid的帖子

我在哪里将通用库代码放在Symfony 2中?

快速提问:我应该在哪里将具有类似特征的代码放在本实用新型服务类中,如Benjamin Eberlei在此博客文章中所述(http://www.whitewashing.de/2013/06/27/extending_symfony2__controller_utilities.html) ?

对于过渡期,我把它放在:src/ProjectName/Library中

上下文

我注意到以下内容:

  • 此逻辑不属于特定的捆绑包,实际上它适用于要创建的所有捆绑包.
  • 此逻辑通常属于特定于应用程序的库,而不是作为bundle的一部分,因为bundle中的控制器将扩展或利用此库代码.

我找到了一些主题相似的问题的答案,但不完全是我追求的

基于我在这里单独研究SO的问题,这个问题似乎已经被某种程度上踩死了,但我认为之前提出的问题都围绕着我实际所追求的问题.无论如何,似乎我有以下选择:

  • 将这些类型的扩展放在一个包中 - 不适用于我正在开发的功能类型本质上是扩展框架代码.
  • 为项目创建供应商目录,其中所有的库代码都会去 - 如果这确实是最好的做法,那么它本质上意味着我必须通过作曲家中的私人仓库使库可用,但这意味着我' d必须维护一个单独的代码库.
  • 创建一些存在于src/Company/SomeNamespace中的伪连接器包 - 我甚至不知道这是否完全可行,但如果它符合SF最佳实践,我会调查它进一步.

同样,问题是为了简洁:我在哪里提供在Symfony 2中提供通用的全局功能的类?

我提前谢谢了.

php symfony

9
推荐指数
1
解决办法
1295
查看次数

反馈我的模型层方法Symfony 2模型层+学说

请提供以下创建模型层的方法的反馈,该模型层由业务规则组成,这些规则使Doctrine用于数据访问.

我目前的方法是基于这样的概念,即Model是一个ContainerAware类/对象,其中包含所有非库,业务特定的域逻辑.

我发现我必须锤击框架以这种方式做事,这就是为什么我的大脑部分质疑我的方法.

我目前正在使用Symfony 2,它像所有现代PHP MVC框架一样,使用像Doctrine 2这样的ORM层,并且不可避免地将其视为模型层.我猜这种情况与ZF2类似,所以尽管我的例子是用SF2编写的,但我认为这是一个与框架无关的问题.

具体例子

作为一个具体示例,请考虑以下情形:

消息要求

  • 作为用户,我可以创建属于我的消息.
  • 作为用户,我可以更新属于我的消息.
  • 作为用户,我可以归档属于我的消息.

控制器

在Symfony2中,这些要求在控制器层中编码为Actions. 我将跳过检查消息是否实际属于用户的无关代码,但显然,这也应该是域逻辑的一部分.在方法"belongsToUser"或类似的.

 // Vendor\MessageBundle\DefaultController 
 public function archiveAction(Request $request) {
    // ... 
    $em = $this->getDoctrine()
               ->getManager();
    $message = $em->getRepository('MessageBundle:Message');
                    ->getManager()
                    ->getRepository('MessageBundle:Message')
                    ->find($request->get('id'));
    $message->setIsArchived(true);
    $em->persist($entity);
    $em->flush();
    $this->flashMessage('Message has been archived.');
    // ...
}
Run Code Online (Sandbox Code Playgroud)

该模型

如果我将它放入模型中,它将如下所示:

class MessageModel 
{
     public function archive($messageId) {
     // ... 
        $em = $this->getDoctrine()
                   ->getManager();
        $message = $em->getRepository('MessageBundle:Message')
                    ->find($messageId);
        $message->setIsArchived(true);
        $em->persist($entity);
        $em->flush();
     // ... return true on success, false on fail.
     }
}
Run Code Online (Sandbox Code Playgroud)

修订控制器

我的修订控制器现在看起来像这样: …

php oop zend-framework symfony doctrine-orm

6
推荐指数
1
解决办法
249
查看次数

标签 统计

php ×2

symfony ×2

doctrine-orm ×1

oop ×1

zend-framework ×1