针对应用程序和模块的自定义文件夹结构的Symfony2确认

时间:2012-08-30 08:21:29

标签: architecture symfony symfony-1.4

将Symfony2用于我的一个结构。我想从其他模块文件中保留模块和与模块相关的各种文件。

所以对于例如。我有前端申请。在前端应用程序下我有用户,库模块。我想将所有与用户相关的文件保存在一个地方,将所有与图库相关的文件保存在一个地方。这样我就可以像在Symfony1.4中提供的那样在模块级实现抽象。

以下是我到目前为止所实现的文件夹结构。

    web/
       admin.php
       frontend.php

    apps/
        autoload.php # this autloads the common libaries/vendors for all application eg. CommonBundle
        admin/
               AppKernel.php
               AppAutoload.php # load application specific libraries
               bootstrap.php.cache
               config/
               cache/
               .
               .
               .
            frontend/
               AppKernel.php
                AppAutoload.php
               bootstrap.php.cache
               config/
               cache/
               .
               .
               .

    src/
        Admin/
            UserBundle/
                Controller/
                    UsersController.php
                Entity/
                    User.php
                Repository/
                    UserRepository.php
                Resources/
                    views/
                     indexUserView.twig.html
            DiaryBundle/
                Controller/
                    DiaryController.php
                Entity/
                    Diary.php
                Repository/
                    DiaryRepository.php
                Resources/
                    views/
                     indexDiaryView.twig.html
        Frontend/
            UserBundle/
                Controller/
                    UsersController.php
                Entity/
                    User.php
                Repository/
                    UserRepository.php
                Resources/
                    views/
                     indexUserView.twig.html
            DiaryBundle/
                Controller/
                    DiaryController.php
                Entity/
                    Diary.php
                Repository/
                    DiaryRepository.php
                Resources/
                    views/
                     indexDiaryView.twig.html

我对上面的文件夹结构很有信心。但是当我发现Symfony2社区支持在应用程序级而不是模块级创建Bundle时,我想知道在模块级创建Bundles的优缺点。什么可能是模块级别的创建陷阱?

我可以看到使用Bundles for modules

的许多优点
  1. 模块的所有控制器,视图,模型都在同一个地方,并从控制器,模型,其他模块的视图中抽象出来。这样,在一个模块上工作的人只能在一个文件夹内工作而不用担心模块2中正在进行的工作,即Bundle2

  2. 使用下面的命令clear cache for just frontend application

    ,可以在应用程序级别发生清除缓存

    shell> php apps/frontend/console cache:clear

  3. 如果您需要在前端应用程序中创建一个包,则命令如下。它在src / frontend应用程序下创建UserBundle。它还在apps / frontend / AppKernel.php中注册包名称。

    shell> php apps/frontend/console generate:bundle --namespace=frontend/userBundle --format=yml

  4. 所以一切似乎都很好。但似乎Symfony2社区不认为这种方法是正确的吗?

    请在我的方法中建议循环漏洞?

2 个答案:

答案 0 :(得分:1)

我认为你不应该这样做......

Symfony2中没有module这样的东西。有一本食谱 article解释了Symfony2和symfony1之间的区别。我想你在谈论不同的应用程序。您可以拥有不同的应用程序,但它不是recommended,您应该创建另一个项目并共享包。

我认为您希望实现的这个项目会破坏很多东西,您将无法再使用第三方捆绑包。

有一项名为KnpRad的倡议使Symfony2的项目结构更加友好,但他们有很多问题,而且这个项目现在似乎已经死了。

引用他们的blog

  

在当前的实现中,Symfony2具有硬编码路径,几乎可以在任何地方捆绑资源。这意味着,为了更改文件夹结构,我们需要覆盖所有Symfony2命令,扩展和编译器传递。它在我们的代码库中创造了一个鸿沟,并引入了一些捆绑的BC断点。

答案 1 :(得分:0)

Neetu .. Symfony1.4和symfony2有很大的不同。根据symfony2,您需要在src文件夹下生成应用程序,此处应用程序名称将是命名空间,在命名空间下,您可以创建在symfony1.4中称为模块的bundle。 命令是:

  

php app / console generate:bundle --namespace = Yournamespace / yourBundle --format = yml   php app / console cache:clear --env = prod --no-debug   您可以根据需要创建应用程序。