symfony2 学習ノート プラグイン形式の分析、symfony2 学習ノート_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:56:51
オリジナル
701 人が閲覧しました

Symfony2のプラグインフォーマット分析、symfony2の学習ノート

この記事ではSymfony2のプラグインフォーマットについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

バンドルは他のフレームワークのプラグインに似ていますが、プラグインよりも優れたパフォーマンスを発揮します。他のフレームワークとの主な違いは、Symfony2 のコア フレームワーク関数と作成したすべてのアプリケーション コードを含むすべてがバンドルであることです。 Symfony2 では、バンドルは第一級市民です。これにより、他のサードパーティが開発したコンテンツ パッケージを使用したり、独自のバンドルを配布したりする柔軟性が高まります。アイデアに応じて、プログラムに何を適用し、何を最適化しないかを簡単に選択できます。

バンドルはディレクトリであり、非常に優れた構造を持ち、クラスからコントローラー、Web リソースまであらゆるものを保存できます。

バンドルは、単一のコンテンツを実装するファイル ディレクトリの構造化されたコレクションにすぎません。

BlogBu​​ndle、ForumBundle、またはユーザー管理を実装するバンドルを作成できます (そのようなオープンソース バンドルはすでに多数あるようです)。各バンドル ディレクトリには、PHP ファイル、テンプレート、スタイル シート、JavaScript ファイル、テスト コンテンツ、その他関連するものを含む、実装コンテンツに関連するすべてのものが含まれています。実装されるコンテンツのすべての側面がバンドルに保持されます。

アプリケーションは、AppKernel クラスの registerBundles() メソッドで定義されたすべてのバンドルで構成されます。

リーリー

ここでは、この方法を使用してアプリケーション構成を均一に制御および管理できます。

バンドルは任意のディレクトリに保存でき、app/autoload.php ファイルでオートローダーを設定することによって自動的にロードするだけで済みます。

バンドルを作成する

Symfony2 標準バージョンには、フル機能のバンドル作成ツール ファイルが用意されています。これを実行してバンドルのすべてのコンテンツを作成できます。もちろん、それも可能です

自分で作成することを選択します。次に、AcmeTestBundle を作成し、アプリケーションで動作させます。ここでの Acme は偽のプロバイダー名であることに注意してください。これを自分の組織または会社の名前に完全に置き換えることができます。

まず、src/Acme/TestBundle/ ディレクトリを作成し、新しいファイル AcmeTestBundle.php を追加します

リーリー

次に、アプリケーションで使用できるようにするには、AppKernel クラスの registerBundles() メソッドに追加する必要があります。

リーリー

今は何もできませんが、アプリケーションの一部になっています。

Symfony2 が提供するコマンドラインツールを使用して以下を作成することもできます:

リーリー

上記のコマンドラインツールを使用すると、作成したバンドルがappKernelクラスに自動的に登録されます。

バンドルのディレクトリ構造

Symfony2 に付属するデモ バンドルのディレクトリ構造を見てください:

上記のスクリーンショットからわかるように、Bundle のディレクトリ構造はシンプルで柔軟です:

Controller/ には、HelloController.php などのバンドルのすべてのコントローラー ファイルが含まれます。
dependencyInjection/ は、サービス構成のインポート、コンパイラ トランスポートの登録などを行う、特定の依存関係注入拡張クラスを保持します。このディレクトリは必須ではありません。
Resources/config/ には、ルーティング設定 (routing.yml など) を含む設定ファイルが保存されます。
リソース/ビュー/ すべてのテンプレートは、対応するコントローラーの名前に従ってフォルダーに分割され、ここに保存されます。たとえば、Hello/index.html.twig などです。
Resources/public/ アクセス可能なすべての Web リソース (画像、スタイル シートなど) と、assets:install コンソール コマンドを使用してプロジェクトの web/ ディレクトリにコピーまたは非同期的にリンクされたコンテンツ。
バンドル内のすべてのテストをテスト/保存します

以下は、Symfony2 が推奨するバンドルの標準ルールの一部です:

バンドル名:

バンドルも PHP 名前空間です。名前空間は、名前空間とクラス名に関する PHP5.3 の内部技術標準に準拠する必要があります。先頭にプロバイダー名を使用し、その後に分類セグメント (省略可能)、最後に名前空間の短縮名を使用します。名前の末尾には Bundle を付ける必要があります。ネームスペースをバンドルにするには、バンドル クラスをネームスペースに追加するだけです。

バンドルクラスの名前:

数字、文字、アンダースコアのみを使用できます
キャメルケースの名前付けを使用します
説明的で簡潔な名前を使用してください (2 単語以内)
ベンダー名をプレフィックスとして使用します (オプションのカテゴリ名前空間)

名前のサフィックスとしてバンドルを追加します

例:

名前空間 => バンドルクラス名

リーリー

バンドルクラスを定義するときの getName() メソッドはクラス名を返す必要があります。

各バンドルにはエイリアスがあります。エイリアスは、バンドル名の短縮版を小文字でアンダースコアで区切ったものです。たとえば、acme_hello のバンドルの元の名前は AcmeHelloBundle で、acme_social_blog は AcmeSocialBlogBu​​ndle のインスタンスです。

エイリアスはバンドル内で一意である必要があります。

バンドルのディレクトリ構造: HelloBundle の基本的なディレクトリ構造

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说明的根目录文件。

使用类的子文件夹的深度应该保持到最小(2级是极限)。如果更多级可以定义为非静态,不过很少使用。bundle的目录是只读的。如果你需要修改临时文件,把它们保存到主应用程序的cache/ 或者 log/ 目录下。

需要强调的类和文件

类型 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的目录结构是被用来当作命名空间层级的。比如HelloController类保存在 Bundle/HelloBundle/Controller/HelloController.php文件中。

所以类的完全限定名是 Bundle\HelloBundle\Controller\HelloController 。 一些类被看作是装饰,应该越短越好,比如Commands,Helpers, Listeners 和Controllers等,一般都会被当作后缀。

跟事件分发器有关的类应该用后缀Listener标识。

异常类应该保存到一个Exception子命名空间中。

关于提供商

一个bundle不应该被嵌入第三方的PHP类库,它应该依靠Symfony2标准来自动加载它们。

一个bundle不应该被嵌入第三方的javascript,CSS或者其它语言写的任何类库。

关于测试

一个bundle应该有一个使用PHPUnit的测试单元并把它存储在Tests/ 目录下。

测试应该遵循以下原则:

测试套件必须能够被一个简单的phpunit 命令从一个简单的应用程序中执行。

功能测试应该只备用来测试回复输出和一些监控信息。

测试代码覆盖应该至少在95%以上的基本代码。

一个测试套件可以不包含AllTests.php脚本,但必须依靠外部的phpunit.xml.dist文件。

文档说明

所有的类必须带有PHPDoc。

Controllers

最好的情况下,controller应该在一个可以部署到其它地方的bundle中,那么它不能继承Controller基类。而是通过实现ContainerAwareInterface接口或者继承ContainerAware来取代继承Controller。

Routing

如果bundle提供路由,他们必须使用bundle的别名为前缀,比如一个AcmeBlogBundle实例,所有的路由名必须是acme_blog_ 开头。

Templates

如果bundle提供模板,它必须使用Twig。 bundle不必低通一个主布局文件,如果你的bundle是一个完整的应用程序除外。

翻译文件

如果bundle提供信息翻译,它必须是被定义成XLIFF格式,区域名必须被命名在bundle名字之后,如bundle.hello

配置

为了提供更大的灵活性,一个bundle可以使用Symfony2的内建机制提供配置设置。对于简单的设置,依赖于默认的Symfony2的parameters配置入口。 Symfony2参数都是简单的 key/value 对。值可以是任意的合法的PHP值。 每个参数名应该以讹bundle的别名开始,这只是一个最佳的建议。参数名其余部分用点号(.)分割,比如 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('acme_hello.email.from', 'fabien@example.com');

ログイン後にコピー

INI格式:

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

ログイン後にコピー

这样就可以在代码中从容器获取这些配置信息了:

$container->getParameter('acme_hello.email.from');

ログイン後にコピー

如果你定义服务,我们也推荐你使用bundle的别名作为前缀。

总结思考:

以上是关于Symfony2中最主要的插件格式bundle的大体情况,在整个Symfony2为基础开发的应用程序中,几乎全部都是有bundle组成。Symfony2本身的核心组件都是FrameworkBundle。在Symfony2交流社区中,已经有了大量的开发者贡献了他们的bundle,我们可以直接拿来集成到我们自己的应用程序中使用。上面所说的大部分规则,都是应用于你开发贡献bundle时应该遵循的统一规则,以方便其它用户使用。

带有第三方贡献的bundle的Symfony2开发包:

如果你不打算把你的bundle贡献出来,那么完全可以不用按照这里说的大部分规则进行开发。

希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。

您可能感兴趣的文章:

  • Symfony2联合查询实现方法
  • Symfony2创建页面实例详解
  • symfony2.4的twig中date用法分析
  • Symfony2之session与cookie用法小结
  • Symfony2实现从数据库获取数据的方法小结
  • Symfony2框架学习笔记之表单用法详解
  • Symfony2学习笔记之系统路由详解
  • Symfony2学习笔记之控制器用法详解
  • Symfony2学习笔记之模板用法详解
  • Symfony2安装第三方Bundles实例详解
  • Symfony2函数用法实例分析

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1111332.htmlTechArticleSymfony2学习笔记之插件格式分析,symfony2学习笔记 本文讲述了Symfony2的插件格式。分享给大家供大家参考,具体如下: 一个bundle类似于其它...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート