0

使用 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 时,我想知道在模块级别创建 Bundle 的优缺点。在模块级别创建可能的陷阱是什么?

我可以看到为模块提供捆绑包的许多优点

  1. 一个模块的所有Controller、Views、Models都在同一个地方,并从其他模块的Controller、Models、Views中抽象出来。这样,在一个模块上工作的人必须只在一个文件夹内工作,而不必担心模块2(即Bundle2)中正在进行的工作

  2. 清除缓存可以在应用程序级别使用以下命令清除缓存仅用于前端应用程序

    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

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

请在我的方法中提出漏洞?

4

2 回答 2

1

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

Symfony2中没有这样的东西module。有一篇食谱 文章解释了 Symfony2 和 symfony1 之间的区别。我认为您在谈论不同的应用程序。您可以拥有不同的应用程序,但不建议这样做,您应该创建另一个项目并共享捆绑包。

我认为你想要实现的这个项目会破坏很多东西,你将无法再使用第三方包。

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

从他们的博客中引用:

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

于 2012-08-30T09:53:46.627 回答
0

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

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

于 2012-09-12T12:49:17.153 回答