国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 詳解Symfony2的插件格式

詳解Symfony2的插件格式

Jan 05, 2018 pm 05:47 PM
插件 格式

本文主要介紹了Symfony2的插件格式,詳細(xì)分析了Symfony2的插件原理及創(chuàng)建與使用插件的相關(guān)技巧。需要的朋友可以參考下,希望對(duì)大家有所幫助。

一個(gè)bundle類似于其它框架中的插件,但是比插件表現(xiàn)更好。它跟其它框架最主要的不同是在Symfony2中所有東西都是bundle,包括核心框架功能和你寫的所有應(yīng)用程序代碼。Symfony2中,bundle可是一等公民。這給了你使用其它第三方開發(fā)的內(nèi)容包或者分發(fā)你自己的bundle更多靈活性。你可以方便的選擇哪些內(nèi)容可以應(yīng)用到你的程序中那些不用,來根據(jù)你的想法優(yōu)化它們。

一個(gè)bundle就是一個(gè)目錄,它具有很好的結(jié)構(gòu)性,它能存放從類到controller和web資源等任何東西。

一個(gè)bundle僅僅是一個(gè)結(jié)構(gòu)化的文件目錄集合,它實(shí)現(xiàn)一個(gè)單一的內(nèi)容。

你可以創(chuàng)建一個(gè)BlogBundle,一個(gè)ForumBundle或者一個(gè)實(shí)現(xiàn)用戶管理的bundle(好像已經(jīng)有很多此類開源的bundle了)。每個(gè)bundle目錄包含跟實(shí)現(xiàn)內(nèi)容有關(guān)的所有東西,包括PHP文件,模板,樣式表,javascript文件,測(cè)試內(nèi)容以及其它任何相關(guān)的東西。要實(shí)現(xiàn)的內(nèi)容的各方面都保存在一個(gè)bundle中。

一個(gè)應(yīng)用程序是由在AppKernel類中registerBundles()方法里定義的所有bundle組成。

// app/AppKernel.php
public 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 JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
  );
  if (in_array($this->getEnvironment(), array('dev', 'test'))) {
    $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
    $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
    $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
    $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
  }
  return $bundles;
}

在這里你可以通過該方法來統(tǒng)一控制和管理你的應(yīng)用程序組成。

一個(gè)bundle可以存放在任何目錄下,只需要能夠通過配置app/autoload.php文件中的自動(dòng)加載器即可被自動(dòng)加載。

創(chuàng)建一個(gè)bundle

Symfony2標(biāo)準(zhǔn)版中已經(jīng)為你準(zhǔn)備好了一全功能的創(chuàng)建bundle的工具文件。你可以運(yùn)行它來創(chuàng)建bundle的所有內(nèi)容,當(dāng)然你也可以

選擇自己手工創(chuàng)建?,F(xiàn)在我們創(chuàng)建一個(gè)AcmeTestBundle并讓它能夠在我們的應(yīng)用程序中工作。注意,這里的Acme是一個(gè)虛假的提供商名字,你完全可以替換它為你自己組織或公司的名字。

首先,創(chuàng)建一個(gè)src/Acme/TestBundle/ 目錄并添加新文件AcmeTestBundle.php

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

接下來,讓它在你的應(yīng)用程序可用,則需要在AppKernel類中的registerBundles()方法中添加它。

// app/AppKernel.php
public function registerBundles()
{
  $bundles = array(
    // ...
    // register your bundles
    new Acme\TestBundle\AcmeTestBundle(),
  );
  // ...
  return $bundles;
}

雖然現(xiàn)在它不能做任何事情,但是它已經(jīng)成為你應(yīng)用程序的一部分了。

我們同樣可以使用Symfony2為我們提供給命令行工具來創(chuàng)建:

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

如果你使用上面的命令行工具,則創(chuàng)建的bundle會(huì)自動(dòng)的注冊(cè)到appKernel類中。

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

看一下我們Symfony2自帶的Demo bundle的目錄結(jié)構(gòu):

bundle的目錄機(jī)構(gòu)簡(jiǎn)單靈活,從上面的截圖中可以看到:

Controller/ 包含bundle的所有controllers文件,比如HelloController.php 。
DependencyInjection/ 保存了特定的依賴注入擴(kuò)展類,該類可能會(huì)導(dǎo)入服務(wù)配置,注冊(cè)編譯器傳輸或者更多其它。該目錄并不是必需的。
Resources/config/ 存放著配置文件,包括路由配置(比如:routing.yml)。
Resources/views/ 所有的模板被按照對(duì)應(yīng)controller的名字分成文件夾保存在這里。比如Hello/index.html.twig 。
Resources/public/ 所有可訪問的web資源(圖片,樣式表等)和通過assets:install控制臺(tái)命令拷貝或者異步鏈接到項(xiàng)目 web/ 目錄的內(nèi)容。
Tests/ 保存bundle所有的測(cè)試

下面是Symfony2 推薦的一些有關(guān)bundle的標(biāo)準(zhǔn)規(guī)則:

Bundle名稱:

一個(gè)bundle同時(shí)也是一個(gè)PHP的命名空間。命名空間必須遵守PHP5.3命名空間和類名的內(nèi)部技術(shù)標(biāo)準(zhǔn)。開頭使用提供商名,接著是分類段(可以省略),最后是命名空間的簡(jiǎn)寫名字,而且該名字必須以Bundle作為后綴。一個(gè)命名空間變?yōu)橐粋€(gè)bundle只需要你在該命名空間內(nèi)添加一個(gè)bundle類即可。

Bundle類的命名:

僅適用數(shù)字,字母和下劃線
使用駝峰式命名
使用描述性簡(jiǎn)潔的名字(不超過兩個(gè)單詞)
使用供應(yīng)商名稱做前綴(可選的分類命名空間)

添加Bundle作為名稱后綴

比如:

Namespace => Bundle 類名稱

Acme\Bundle\BlogBundle => AcmeBlogBundle
Acme\Bundle\Social\BlogBundle =>AcmeSocialBlogBundle
Acme\BlogBundle => AcmeBlogBundle

定義bundle類時(shí)的getName()方法應(yīng)該返回類名稱。

每個(gè)bundle都有一個(gè)別名,它是小寫字符簡(jiǎn)寫版的bundle名,使用下劃線分割。比如 acme_hello 的bundle原名是AcmeHelloBundle, acme_social_blog 則是AcmeSocialBlogBundle的實(shí)例。

別名在一個(gè)bundle中必須是唯一的。

Bundle的目錄結(jié)構(gòu):HelloBundle的基礎(chǔ)目錄結(jié)構(gòu)

XXX/...
  HelloBundle/
    HelloBundle.php
    Controller/
    Resources/
      meta/
        LICENSE
      config/
      doc/
        index.rst
      translations/
      views/
      public/
    Tests/

上面的XXX/... 映射到該bundle的命名空間。其中下面的文件是必備的:

HelloBundle.php;

Resources/meta/LICENSE: 全文的許可代碼;
Resources/doc/index.rst: bundle說明的根目錄文件。

使用類的子文件夾的深度應(yīng)該保持到最小(2級(jí)是極限)。如果更多級(jí)可以定義為非靜態(tài),不過很少使用。bundle的目錄是只讀的。如果你需要修改臨時(shí)文件,把它們保存到主應(yīng)用程序的cache/ 或者 log/ 目錄下。

需要強(qiáng)調(diào)的類和文件

類型 VS 目錄

Commands VS Command/
Controllers VS Controller/
Service Container Extensions VS /DependencyInjection/
Event Listeners VS EventListener/
Configuration VS Resources/config
Web Resources VS Resources/public
Translation files VS Resources/translations/
Templates VS Resources/views
Unit and Functional Test VS Tests/

類:

bundle的目錄結(jié)構(gòu)是被用來當(dāng)作命名空間層級(jí)的。比如HelloController類保存在 Bundle/HelloBundle/Controller/HelloController.php文件中。

所以類的完全限定名是 Bundle\HelloBundle\Controller\HelloController 。 一些類被看作是裝飾,應(yīng)該越短越好,比如Commands,Helpers, Listeners 和Controllers等,一般都會(huì)被當(dāng)作后綴。

跟事件分發(fā)器有關(guān)的類應(yīng)該用后綴Listener標(biāo)識(shí)。

異常類應(yīng)該保存到一個(gè)Exception子命名空間中。

關(guān)于提供商

一個(gè)bundle不應(yīng)該被嵌入第三方的PHP類庫(kù),它應(yīng)該依靠Symfony2標(biāo)準(zhǔn)來自動(dòng)加載它們。

一個(gè)bundle不應(yīng)該被嵌入第三方的javascript,CSS或者其它語言寫的任何類庫(kù)。

關(guān)于測(cè)試

一個(gè)bundle應(yīng)該有一個(gè)使用PHPUnit的測(cè)試單元并把它存儲(chǔ)在Tests/ 目錄下。

測(cè)試應(yīng)該遵循以下原則:

測(cè)試套件必須能夠被一個(gè)簡(jiǎn)單的phpunit 命令從一個(gè)簡(jiǎn)單的應(yīng)用程序中執(zhí)行。

功能測(cè)試應(yīng)該只備用來測(cè)試回復(fù)輸出和一些監(jiān)控信息。

測(cè)試代碼覆蓋應(yīng)該至少在95%以上的基本代碼。

一個(gè)測(cè)試套件可以不包含AllTests.php腳本,但必須依靠外部的phpunit.xml.dist文件。

文檔說明

所有的類必須帶有PHPDoc。

Controllers

最好的情況下,controller應(yīng)該在一個(gè)可以部署到其它地方的bundle中,那么它不能繼承Controller基類。而是通過實(shí)現(xiàn)ContainerAwareInterface接口或者繼承ContainerAware來取代繼承Controller。

Routing

如果bundle提供路由,他們必須使用bundle的別名為前綴,比如一個(gè)AcmeBlogBundle實(shí)例,所有的路由名必須是acme_blog_ 開頭。

Templates

如果bundle提供模板,它必須使用Twig。 bundle不必低通一個(gè)主布局文件,如果你的bundle是一個(gè)完整的應(yīng)用程序除外。

翻譯文件

如果bundle提供信息翻譯,它必須是被定義成XLIFF格式,區(qū)域名必須被命名在bundle名字之后,如bundle.hello

配置

為了提供更大的靈活性,一個(gè)bundle可以使用Symfony2的內(nèi)建機(jī)制提供配置設(shè)置。對(duì)于簡(jiǎn)單的設(shè)置,依賴于默認(rèn)的Symfony2的parameters配置入口。 Symfony2參數(shù)都是簡(jiǎn)單的 key/value 對(duì)。值可以是任意的合法的PHP值。 每個(gè)參數(shù)名應(yīng)該以訛bundle的別名開始,這只是一個(gè)最佳的建議。參數(shù)名其余部分用點(diǎn)號(hào)(.)分割,比如 acme_hello.email.from

讓最終用戶可以在配置文件中直接提供值信息。

YAML格式:

# app/config/config.yml
parameters:
    acme_hello.email.from: fabien@example.com

XML格式:

<!-- app/config/config.xml -->
<parameters>
   <parameter key="acme_hello.email.from">fabien@example.com</parameter>
</parameters>

PHP代碼格式:

// app/config/config.php
$container->setParameter(&#39;acme_hello.email.from&#39;, &#39;fabien@example.com&#39;);

INI格式:

[parameters]
acme_hello.email.from = fabien@example.com

這樣就可以在代碼中從容器獲取這些配置信息了:

$container->getParameter(&#39;acme_hello.email.from&#39;);

如果你定義服務(wù),我們也推薦你使用bundle的別名作為前綴。

總結(jié)思考:

以上是關(guān)于Symfony2中最主要的插件格式bundle的大體情況,在整個(gè)Symfony2為基礎(chǔ)開發(fā)的應(yīng)用程序中,幾乎全部都是有bundle組成。Symfony2本身的核心組件都是FrameworkBundle。在Symfony2交流社區(qū)中,已經(jīng)有了大量的開發(fā)者貢獻(xiàn)了他們的bundle,我們可以直接拿來集成到我們自己的應(yīng)用程序中使用。上面所說的大部分規(guī)則,都是應(yīng)用于你開發(fā)貢獻(xiàn)bundle時(shí)應(yīng)該遵循的統(tǒng)一規(guī)則,以方便其它用戶使用。

帶有第三方貢獻(xiàn)的bundle的Symfony2開發(fā)包:

如果你不打算把你的bundle貢獻(xiàn)出來,那么完全可以不用按照這里說的大部分規(guī)則進(jìn)行開發(fā)。

相關(guān)推薦:

詳解Symfony模板快捷變量的用法

詳解Symfony在模板和行為中取得request參數(shù)的方法

簡(jiǎn)述Symfony核心類

以上是詳解Symfony2的插件格式的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
qq郵箱格式怎么寫 qq郵箱格式是什么樣的 qq郵箱格式怎么寫 qq郵箱格式是什么樣的 Feb 22, 2024 pm 03:40 PM

QQ郵箱:QQ號(hào)@qq.com,英文QQ郵箱:英文或數(shù)字@qq.com,foxmail郵箱賬號(hào):自己設(shè)置賬號(hào)@foxmail.com,手機(jī)郵箱賬號(hào):手機(jī)號(hào)@qq.com。教程適用型號(hào):iPhone13系統(tǒng):IOS15.3版本:QQ郵箱6.3.3解析1QQ郵箱有四種格式,常用的QQ郵箱:QQ號(hào)@qq.com,英文QQ郵箱:英文或數(shù)字@qq.com,foxmail郵箱賬號(hào):自己設(shè)置賬號(hào)@foxmail.com,手機(jī)郵箱賬號(hào):手機(jī)號(hào)@qq.com。補(bǔ)充:qq郵箱是什么1最早的QQ郵箱還只是QQ用戶之間

在Illustrator中加載插件時(shí)出錯(cuò)[修復(fù)] 在Illustrator中加載插件時(shí)出錯(cuò)[修復(fù)] Feb 19, 2024 pm 12:00 PM

啟動(dòng)AdobeIllustrator時(shí)是否會(huì)彈出加載插件時(shí)出錯(cuò)的消息?一些Illustrator用戶在打開該應(yīng)用程序時(shí)遇到了此錯(cuò)誤。消息后面緊跟著一系列有問題的插件。該錯(cuò)誤提示表明已安裝的插件存在問題,但也可能是由于VisualC++DLL文件損壞或首選項(xiàng)文件受損等其他原因引起。如果遇到此錯(cuò)誤,我們將在本文中指導(dǎo)您修復(fù)問題,請(qǐng)繼續(xù)閱讀以下內(nèi)容。在Illustrator中加載插件時(shí)出錯(cuò)如果您在嘗試啟動(dòng)AdobeIllustrator時(shí)收到“加載插件時(shí)出錯(cuò)”的錯(cuò)誤消息,您可以使用以下用途:以管理員身

分享Edge瀏覽器不支持此插件的三種解決辦法 分享Edge瀏覽器不支持此插件的三種解決辦法 Mar 13, 2024 pm 04:34 PM

  用戶使用Edge瀏覽器的過程中可能會(huì)添加一些插件來滿足自己更多的使用需求。但是在添加插件時(shí)顯示不支持此插件,這該如何解決?今日小編就來給大家分享三種解決辦法,快來試試吧?! 》椒ㄒ唬簢L試用其他的瀏覽器。  方法二:瀏覽器上的FlashPlayer可能過時(shí)或者丟失,導(dǎo)致此插件不受支持狀態(tài),可在官網(wǎng)下載最新版本?! 》椒ㄈ和瑫r(shí)按下“Ctrl+Shift+Delete”鍵?! ↑c(diǎn)擊“清除數(shù)據(jù)”,重新打開瀏覽器即可。

PyCharm新手指南:全面了解插件安裝! PyCharm新手指南:全面了解插件安裝! Feb 25, 2024 pm 11:57 PM

PyCharm是一款功能強(qiáng)大且受歡迎的Python集成開發(fā)環(huán)境(IDE),提供了豐富的功能和工具,使得開發(fā)者們可以更加高效地編寫代碼。而PyCharm的插件機(jī)制更是其功能擴(kuò)展的利器,通過安裝不同的插件,可以為PyCharm增加各種功能和定制化的特性。因此,對(duì)于PyCharm新手來說,了解并熟練安裝插件是至關(guān)重要的。本文將為你詳細(xì)介紹PyCharm插件安裝的全

如何在蘋果筆記中使用塊引號(hào) 如何在蘋果筆記中使用塊引號(hào) Oct 12, 2023 pm 11:49 PM

在iOS17和macOSSonoma中,Apple為AppleNotes添加了新的格式選項(xiàng),包括塊引號(hào)和新的Monostyle樣式。以下是使用它們的方法。借助AppleNotes中的其他格式選項(xiàng),您現(xiàn)在可以在筆記中添加塊引用。塊引用格式可以輕松地使用文本左側(cè)的引用欄直觀地偏移部分的寫作。只需點(diǎn)擊/單擊“Aa”格式按鈕,然后在鍵入之前或當(dāng)您在要轉(zhuǎn)換為塊引用的行上時(shí)選擇塊引用選項(xiàng)。該選項(xiàng)適用于所有文本類型、樣式選項(xiàng)和列表,包括清單。在同一“格式”菜單中,您可以找到新的“單樣式”選項(xiàng)。這是對(duì)先前“等寬

Chrome的插件擴(kuò)展程序安裝目錄是什么 Chrome的插件擴(kuò)展程序安裝目錄是什么 Mar 08, 2024 am 08:55 AM

Chrome的插件擴(kuò)展程序安裝目錄是什么?正常情況下,Chrome插件擴(kuò)展程序的默認(rèn)安裝目錄如下:1、windowsxp中chrome插件默認(rèn)安裝目錄位置:C:\DocumentsandSettings\用戶名\LocalSettings\ApplicationData\Google\Chrome\UserData\Default\Extensions2、windows7中chrome插件默認(rèn)安裝目錄位置:C:\Users\用戶名\AppData\Local\Google\Chrome\User

如何在 iPhone 14 Pro 上使用 HEIF Max (48 MP)并優(yōu)化存儲(chǔ)空間 如何在 iPhone 14 Pro 上使用 HEIF Max (48 MP)并優(yōu)化存儲(chǔ)空間 Sep 21, 2023 pm 02:13 PM

最新的iPhonePro系列配備了強(qiáng)大的48MP傳感器,可確保拍攝高度詳細(xì)和水晶般清晰的照片,捕捉每一個(gè)珍貴的時(shí)刻。然而,一個(gè)潛在的缺點(diǎn)是全分辨率圖像的大小,尤其是ProRAW格式的圖像。盡管iPhone提供的最大存儲(chǔ)空間為512GB,但捕獲大量ProRAW圖像(每張約75MP)和視頻(每分鐘440MB,60FPS)會(huì)快速占用您的存儲(chǔ)空間。如果您打算將iPhone用作大型項(xiàng)目或旅行的主攝像頭,這可能會(huì)帶來問題。但是,如果您可以拍攝那些高分辨率的48MP照片而不用擔(dān)心存儲(chǔ)限制,那不是很棒嗎?這很快

如何為WordPress插件添加微信小程序功能 如何為WordPress插件添加微信小程序功能 Sep 06, 2023 am 09:03 AM

如何為WordPress插件添加微信小程序功能隨著微信小程序的普及和流行,越來越多的網(wǎng)站和應(yīng)用程序開始考慮將其與微信小程序進(jìn)行集成。對(duì)于使用WordPress作為內(nèi)容管理系統(tǒng)的網(wǎng)站來說,添加微信小程序功能可以為用戶提供更便捷的訪問體驗(yàn)和更多的功能選擇。本文將介紹如何為WordPress插件添加微信小程序功能。步驟1:注冊(cè)微信小程序賬號(hào)首先,您需要在微信開放平

See all articles