📜  Symfony-捆绑包

📅  最后修改于: 2020-10-19 03:14:39             🧑  作者: Mango


Symfony捆绑包是按特定结构组织的文件和文件夹的集合。捆绑软件的建模方式使其可以在多个应用程序中重复使用。主应用程序本身打包为一个捆绑包,通常称为AppBundle

捆绑包可以特定于应用程序打包,例如AdminBundle(管理部分),BlogBundle(站点的博客)等。此类捆绑包无法在应用程序之间共享。取而代之的是,我们可以将应用程序的某些部分(例如博客)建模为通用捆绑包,以便我们可以将捆绑包从一个应用程序复制到另一个应用程序以重复使用博客功能。

捆绑包的结构

捆绑包的基本结构如下。

  • 控制器-所有控制器都需要放置在这里。

  • DependencyInjection-所有与依赖注入相关的代码和配置都需要放在此处。

  • 资源/配置-捆绑包相关的配置位于此处。

  • 资源/视图-与包相关的视图模板位于此处。

  • 资源/公共-捆绑包相关的样式表,JavaScript,图像等位于此处。

  • 测试-捆绑包相关的单元测试文件位于此处。

创建捆绑

让我们在HelloWorld应用程序中创建一个简单的捆绑包TutorialspointDemoBundle

步骤1-选择一个名称空间。捆绑软件的命名空间应包括供应商名称和捆绑软件名称。在我们的例子中,它是Tutorialspoint \ DemoBundle

步骤2-通过扩展Bundle类创建一个空类TutorialspointDemoBundle并将其放在src / Tutorialspoint / DemoBundle下

namespace Tutorialspoint\DemoBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle;  

class TutorialspointDemoBundle extends Bundle { 
}

步骤3-AppKernel类的应用程序支持的捆绑软件列表中注册该类。

public function registerBundles() { 
   $bundles = array( 
      // ... 
      // register your bundle 
      new Tutorialspoint\DemoBundle\TutorialspointDemoBundle(), 
   ); 
   return $bundles; 
}

创建空捆绑包所需的所有这些操作以及所有其他概念与应用程序的相同。 Symfony还提供了一个控制台命令generate:bundle,以简化创建新捆绑包的过程,如下所示。

php bin/console generate:bundle --namespace = Tutorialspoint/DemoBundle

结果

Welcome to the Symfony bundle generator!

Are you planning on sharing this bundle across multiple applications? [no]: no  

Your application code must be written in bundles. This command helps 
you generate them easily.  

Give your bundle a descriptive name, like BlogBundle. 
Bundle name [Tutorialspoint/DemoBundle]:   

In your code, a bundle is often referenced by its name. It can be the 
concatenation of all namespace parts but it's really up to you to come 
up with a unique name (a good practice is to start with the vendor name). 
Based on the namespace, we suggest TutorialspointDemoBundle.  

Bundle name [TutorialspointDemoBundle]:  
Bundles are usually generated into the src/ directory. Unless you're 
doing something custom, hit enter to keep this default!
Target Directory [src/]:   

What format do you want to use for your generated configuration?  

Configuration format (annotation, yml, xml, php) [annotation]:

Bundle generation

> Generating a sample bundle skeleton into app/../src/Tutorialspoint/DemoBundle 
   created ./app/../src/Tutorialspoint/DemoBundle/ 
   created ./app/../src/Tutorialspoint/DemoBundle/TutorialspointDemoBundle.php 
   created ./app/../src/Tutorialspoint/DemoBundle/Controller/ 
   created ./app/../src/Tutorialspoint/DemoBundle/Controller/DefaultController.php 
   created ./app/../tests/TutorialspointDemoBundle/Controller/   
   created ./app/../tests/TutorialspointDemoBundle/Controller/DefaultControllerTest.php 
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/views/Default/   
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/views/Default/index.html.twig 
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/config/ 
   created ./app/../src/Tutorialspoint/DemoBundle/Resources/config/services.yml 
> Checking that the bundle is autoloaded 
> Enabling the bundle inside app/AppKernel.php 
   updated ./app/AppKernel.php 
> Importing the bundle's routes from the app/config/routing.yml file 
   updated ./app/config/routing.yml 
> Importing the bundle's services.yml from the app/config/config.yml file 
   updated ./app/config/config.yml 
Everything is OK! Now get to work :).