【问题标题】:structure application in symfony 2symfony 2中的结构应用
【发布时间】:2012-09-13 11:47:21
【问题描述】:

我正在使用 symfony 2.1 建立一个在线商店。基本上,我有前端部分,我的网站的用户可以从中查看、添加项目和后端部分,供管理员用户管理整个网站。前端和后端部分将有不同的模板,但两者的数据库模型(Doctrine)相同。

如何构建我的应用程序?

以前我使用的是 symfony 1.4,我可以在其中创建前端应用程序和后端应用程序。 Symfony 2 处理捆绑包。我应该创建 2 个捆绑包,一个用于前端,一个用于后端吗? 创建这样的结构,如何才能在它们之间共享模型。

请为我的应用程序建议一些结构。

【问题讨论】:

    标签: php symfony symfony-2.1


    【解决方案1】:

    我建议你去without bundles 并为后端的东西使用子命名空间:

    • Vendor\Controller\UserController — 前端用户控制器,
    • Vendor\Controller\Backend\UserController — 后端用户控制器。

    模板也将被子命名空间:

    • app/Resources/views/User/view.html.twig,
    • app/Resources/views/Backend/User/view.html.twig

    您可以将其他模板中的子命名空间模板引用为:

    {% include ':Backend\User:someTemplate.html.twig' %}
    

    【讨论】:

      【解决方案2】:

      由于 symfony2 依赖于 namespaces,您可以轻松地在它们之间共享类。

      假设您在FrontendBundle 中定义了您的实体,它们将是:

      namespace Acme\FrontendBundle\Entity;
      
      /** @ORM annotations stuff */
      class MyEntity
      {
      
          protected $id;
      
          ...
      
      }
      

      然后您可以通过从头开始创建来引用它们:

      $newEntity = new \Acme\FrontendBundle\Entity\MyEntity();
      

      或通过use 导入它们:

      namespace Acme\BackendBundle\Controller;
      
      use Acme\FrontendBundle\Entity\MyEntity;
      
      class AdminController extends Controller
      {
      
          public someAction()
          { 
      
              $newEntity = new MyEntity();
      
          }
      
      }
      

      Doctrine 存储库使用稍微不同的符号:

      $this-> getDoctrine()
          -> getEntityManager()
          -> getRepository('FrontendBundle:MyEntity')
          -> findAll();
      

      就是NameBundle:EntityName

      请参考symfony best practices以获得更好的线索!

      【讨论】:

        【解决方案3】:

        正如前面的答案所示,没有单一的最佳方法。我发现拥有三个捆绑包很有用。一个包含实体以及其他共享功能的 CoreBundle,然后是位于核心包之上的前端/后端包。但同样,没有单一的最佳方法。

        【讨论】:

        • 三个 bundle,src/Vendor/BackendBundle、src/Vendor/FrontendBundle 和 src/Vendor/SharedBundle。 SharedBundle 保存 FrontendBundle 和 BackendBundle 之间的实体和其他共享部分。这是你的意思吗?
        猜你喜欢
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        相关资源
        最近更新 更多