亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Symfony2中文手冊(cè) / Bundle系統(tǒng)

Bundle系統(tǒng)

bundle類似于其他軟件中的插件,但卻更好。關(guān)鍵區(qū)別在于:Symfony中的每一樣?xùn)|西都是bundle,包括框架核心功能,以及你編寫(xiě)的程序代碼。bundle是Symfony體系中的一等公民。這就給了你一個(gè)彈性架構(gòu),既可以使用 第三方bundle 中的預(yù)建功能,也可以發(fā)布你自己的bundle。bundle可以讓你在自己的程序中挑選“開(kāi)啟哪個(gè)功能”變得很容易,還能按你的方式來(lái)優(yōu)化之。

在本文中你可以學(xué)到bundle基礎(chǔ)知識(shí),“最佳實(shí)踐”中有大章節(jié)專注于bundle的組織和最佳實(shí)踐。

一個(gè)bundle,就是一組結(jié)構(gòu)化的文件,存于一個(gè)“用于實(shí)現(xiàn)某個(gè)獨(dú)立功能”的目錄中。你可以創(chuàng)建一個(gè)BlogBundle,一個(gè)ForumBundle,或者是一個(gè)管理用戶的bundle(很多類似bundle已經(jīng)作為開(kāi)源項(xiàng)目存在)。每個(gè)目錄都包含著關(guān)乎那個(gè)功能的所有東西,包括php文件,模板,css,js文件,tests,以及其他。每一個(gè)功能的子項(xiàng)都存在于bundle中,每一個(gè)功能都存在于bundle中。

要在你的程序中使用bundle,必須通過(guò) AppKernel 類的 registerBundles() 方法來(lái)注冊(cè)并使用它們:

// app/AppKernel.phppublic function registerBundles(){
    $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
    );     if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    }     return $bundles;

registerBundles() 方法可以讓你完全控制在程序中使用哪個(gè)bundle(包括Symfony的核心bundle)。

bundle可以存在于任何地方,只要它能夠被自動(dòng)加載(通過(guò) app/autoload.php 中所配置的自動(dòng)加載器實(shí)現(xiàn))

創(chuàng)建一個(gè)Bundle ?

Symfony標(biāo)準(zhǔn)版內(nèi)置了超好用的命令,用來(lái)幫你創(chuàng)建全功能bundle。當(dāng)然,手動(dòng)創(chuàng)建bundle也一樣容易。

為了展示一個(gè)簡(jiǎn)單的bundle系統(tǒng),我們創(chuàng)建一個(gè)全新的AcmeTestBundle并開(kāi)啟它。

Acme部分只是個(gè)假名,實(shí)戰(zhàn)中應(yīng)被一些“vendor”名字替換掉,以代表你或者你所在的組織(比如ABCTestBundle代表某個(gè)名為 ABC 的公司)

從新建一個(gè) src/Acme/TestBundle/ 目錄開(kāi)始,再新建一個(gè) AcmeTestBundle.php 文件:

// src/Acme/TestBundle/AcmeTestBundle.phpnamespace Acme\TestBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle; 
class AcmeTestBundle extends Bundle
{
}

AcmeTestBundle遵守 bundle命名約定。你可以選擇簡(jiǎn)化bundle名稱為T(mén)estBundle,通過(guò)把類名改為T(mén)estBundle(同時(shí)修改文件名為 TestBundle.php

這個(gè)空類就是你在創(chuàng)建全新bundle時(shí),唯一需要的東西。盡管一般情況下確實(shí)是空的,但這個(gè)類格外強(qiáng)大,專門(mén)用于定制該bundle的各種行為。

現(xiàn)在你已經(jīng)創(chuàng)建了bundle,在AppKernel類中開(kāi)啟它:

// app/AppKernel.phppublic function registerBundles(){
    $bundles = array(
        // ...         // register your bundle / 注冊(cè)你的bundle
        new Acme\TestBundle\AcmeTestBundle(),
    );
    // ...     return $bundles;}

盡管目前啥也沒(méi)做,AcmeTestBundle已經(jīng)可以使用。

就這么簡(jiǎn)單,Symfony也提供了命令行界面,用于生成一個(gè)基本的bundle骨架:

$  php bin/console generate:bundle --namespace=Acme/TestBundle

bundle骨架包括控制器、模板和路由資源等,而且都可以自定義。在后面的Symfony命令行工具小節(jié),你可以學(xué)到更多。

不管是創(chuàng)建新bundle還是使用第三方bundle,應(yīng)確保bundle被 registerBundles() 開(kāi)啟。當(dāng)使用 generate:bundle 命令時(shí),Symfony替你注冊(cè)完成了。

Bundle目錄結(jié)構(gòu) ?

bundle目錄是簡(jiǎn)單而有彈性的。默認(rèn)條件下,bundle系統(tǒng)遵循著一組命名約定,以保持所有Symfony bundle的代碼一致性??匆谎跘cmeDemoBundle,它包括了一個(gè)bundle最常見(jiàn)的某些元素:

  • Controller/
  • 里面有該bundle的控制器(如 `RandomController.php`)。
  • DependencyInjection/
  • 里面有特定的Dependency Injection Extension類,用來(lái)導(dǎo)入服務(wù)配置信息,注冊(cè)compiler passes,以及更多內(nèi)容(這個(gè)目錄并非必需)。
  • Resources/config/
  • 存放配置信息,包括路由配置(`routing.yml` 等)。
  • Resources/views/
  • 存放模板。依控制器名字來(lái)組織子文件夾(如 `Hello/index.html.twig`)。
  • Resources/public/
  • 存放web assets資源(圖片,css等),將通過(guò)硬拷貝或symlink方式導(dǎo)入到項(xiàng)目的 `web/` 目錄,通過(guò)console命令 `assets:install` 實(shí)現(xiàn)。
  • Tests/
  • 存放本bundle的所有測(cè)試類。

一個(gè)bundle依其實(shí)現(xiàn)的功能而或小或大。它只包含你需要的文件,再無(wú)其他。

在你通讀中文指南的過(guò)程中,你將學(xué)到如何持久化對(duì)象到數(shù)據(jù)庫(kù)中,創(chuàng)建和驗(yàn)證表單,為程序增加翻譯功能,編寫(xiě)測(cè)試,以及更多內(nèi)容。所有這些,都是基于bundle而有自己的目錄和功能。