Php 在Symfony中创建新文件夹结构

Php 在Symfony中创建新文件夹结构,php,symfony,symfony-4.3,Php,Symfony,Symfony 4.3,我想在Symfony中按如下文件夹分隔我的分区: src - Blog -- Controller -- Entity -- Form -- Repository - Main -- Controller -- Entity -- Form -- Repository 对于bundle,我不能在controller和entity中使用注释,也不能在我的博客中单独使用make:entity。有没有办法在symfony 4中创建此结构?由于symfony是一个P

我想在Symfony中按如下文件夹分隔我的分区:

src
 - Blog
  -- Controller
  -- Entity
  -- Form
  -- Repository
 - Main
  -- Controller
  -- Entity
  -- Form
  -- Repository

对于bundle,我不能在controller和entity中使用注释,也不能在我的博客中单独使用make:entity。有没有办法在symfony 4中创建此结构?

由于symfony是一个PHP框架,不强加任何选择,只要能够加载类,您就可以将类随意放置在任何地方。您可能需要配置包,以便在其他名称空间/位置查找对象。默认情况下,它们在应用程序中配置为从预定义的文件结构加载

例如,当您的实体位于
src/Blog/entity/Post
中时,它可能应该具有完全限定的类名,如
App\Blog\entity\Post
。然后,您必须加载具有以下名称空间的实体:

doctrine:
    # ...
    orm:
        # ...
        mappings:
            Blog:
                is_bundle: false
                type: annotation

                # before:
#               dir: '%kernel.project_dir%/src/Entity'
#               prefix: 'App\Entity'
#               alias: App

                # after:
                dir: '%kernel.project_dir%/src/Blog/Entity'
                prefix: 'App\Blog\Entity'
                alias: Blog

另一个例子是,您必须这样做,以便它在
App\Blog\Controller
中查找控制器:

blog_routes:
    resource: '../src/Blog/Controller/'
    type:     annotation

由于Symfony是一个PHP框架,不强加任何选择,因此只要能够加载类,您就可以将类随意放置在任何地方。您可能需要配置包,以便在其他名称空间/位置查找对象。默认情况下,它们在应用程序中配置为从预定义的文件结构加载

例如,当您的实体位于
src/Blog/entity/Post
中时,它可能应该具有完全限定的类名,如
App\Blog\entity\Post
。然后,您必须加载具有以下名称空间的实体:

doctrine:
    # ...
    orm:
        # ...
        mappings:
            Blog:
                is_bundle: false
                type: annotation

                # before:
#               dir: '%kernel.project_dir%/src/Entity'
#               prefix: 'App\Entity'
#               alias: App

                # after:
                dir: '%kernel.project_dir%/src/Blog/Entity'
                prefix: 'App\Blog\Entity'
                alias: Blog

另一个例子是,您必须这样做,以便它在
App\Blog\Controller
中查找控制器:

blog_routes:
    resource: '../src/Blog/Controller/'
    type:     annotation

这完全有可能,您只需使用稍微复杂的配置即可:

# services for all src/*/ directories, ecxluding 
App\:
    resource: '../src/*'
    exclude: 
      - ../src/Tests/
      - ../src/Kernel.php
      - '../src/*/{Entity,Migrations}'

App\Blog\Controller\:
    resource: '../src/Blog/Controller'
    tags: ['controller.service_arguments']
# repeat for other sub-directories
# App\Main\Controller\:
要使用Maker捆绑包,请为其提供更具体的路径

# config/packages/dev/maker.yaml
# create this file if you need to configure anything
maker:
    # tell MakerBundle that all of your classes lives in an
    # Acme namespace, instead of the default App
    # (e.g. Acme\Entity\Article, Acme\Command\MyCommand, etc)
    root_namespace: 'App\Blog\'
由于它仍然是同一个应用程序,您可以通过将其反转并按节对每种类型的类进行分组来避免“假捆绑”布局:

src/
  - Controller/
    -- Blog/
    -- Main/ 
  - Entity
    -- Blog/
    -- Main/ 

这不需要对标准样式进行任何配置更改。

完全有可能,您只需使用稍微复杂的配置即可:

# services for all src/*/ directories, ecxluding 
App\:
    resource: '../src/*'
    exclude: 
      - ../src/Tests/
      - ../src/Kernel.php
      - '../src/*/{Entity,Migrations}'

App\Blog\Controller\:
    resource: '../src/Blog/Controller'
    tags: ['controller.service_arguments']
# repeat for other sub-directories
# App\Main\Controller\:
要使用Maker捆绑包,请为其提供更具体的路径

# config/packages/dev/maker.yaml
# create this file if you need to configure anything
maker:
    # tell MakerBundle that all of your classes lives in an
    # Acme namespace, instead of the default App
    # (e.g. Acme\Entity\Article, Acme\Command\MyCommand, etc)
    root_namespace: 'App\Blog\'
由于它仍然是同一个应用程序,您可以通过将其反转并按节对每种类型的类进行分组来避免“假捆绑”布局:

src/
  - Controller/
    -- Blog/
    -- Main/ 
  - Entity
    -- Blog/
    -- Main/ 

这将不需要对标准样式进行任何配置更改。

因为它可能主要是关于类的,所以改编composer.json和config/services.yaml应该足够了,回到Symfony 2的好ole时代,我们曾经使用bundle来处理这类内容。BlogBundle、MainBundle等。您仍然可以,但有很好的理由表明bundle在应用程序级别已经消失了。如果您想要一个不同的布局,那么使用您的操作系统支持的任何“makedirectory”命令并开始调整。我想你可能会发现这并不值得你这么做。你是在问如何手动创建文件夹吗?如果是,请删除您的问题,因为这不是该网站。如果您正试图使用代码,请对此进行解释,并展示一些您尝试过的代码。:)因为它可能主要是关于类的,所以改编composer.json和config/services.yaml应该足够了,因为在Symfony 2的好ole时代,我们曾经使用bundle来处理这类东西。BlogBundle、MainBundle等。您仍然可以,但有很好的理由表明bundle在应用程序级别已经消失了。如果您想要一个不同的布局,那么使用您的操作系统支持的任何“makedirectory”命令并开始调整。我想你可能会发现这并不值得你这么做。你是在问如何手动创建文件夹吗?如果是,请删除您的问题,因为这不是该网站。如果您正试图使用代码,请对此进行解释,并展示一些您尝试过的代码。:)