Symfony2 は、PHP 言語をベースにした Web 開発フレームワークで、開発速度が速く、パフォーマンスが高いという特徴があります。この記事では、プログラム例の実装プロセスを通じて、Symfony2 フレームワークの構成とプログラム開発について詳しく説明します。
Ubuntu システムを例として、.tgz 圧縮パッケージを使用し、ソース ファイルを /var/www ディレクトリに解凍して次のコマンドを実行します。
tar zxvf Symfony_Standard_Vendors_2.0.###.tgz -C /var/www
上記の ### はバージョン番号を指します。ダウンロードしたところ、BETA5 でした。
解凍後の Symfony2 のディレクトリは次のとおりです:
/var/www/ <- Web根目录 Symfony/ <- Symfony2解压目录 app/ <- 存放symfony的核心文件的目录 cache/ <- 存放缓存文件的目录 config/ <- 存放应用程序全局配置的目录 logs/ <- 存放日志的目录 src/ <- 应用程序源代码 ... vendor/ <- 供应商或第三方的模组和插件 ... web/ <- Web入口 app.php <- 生产环境下的前端控制器 ...
ベンダー (サードパーティ) コンテンツをインストールする必要がある場合 (ベンダーなしバージョンをダウンロードした場合)、またはベンダー (サードパーティ) コンテンツを更新する必要がある場合は、次を使用できます:
cd /var/www/Symfony php bin/vendors install
2. 設定
Symfony2 の設定は非常に簡単で、ブラウザに
http://localhost/Symfony/web/config.php
と入力し、プロンプトに従うだけです。注目に値するのは、app/cache ディレクトリと app/logs ディレクトリの権限の問題です。Ubuntu にインストールしたので、使用できます (firehare は私のユーザー名です。ここでは自分のユーザー名に置き換えることができます):
#为了保险起见 rm -rf app/cache/* rm -rf app/logs/* #设置ACL sudo setfacl -R -m u:www-data:rwx -m u:firehare:rwx app/cache app/logs sudo setfacl -dR -m u:www-data:rwx -m u:firehare:rwx app/cache app/logs
システムが setfacl コマンドをサポートしていない場合、確認する場所が 2 つあります:
setfacl がインストールされているかどうか、インストールされていない場合は、次のコマンドを使用してインストールできます (デフォルトで setfacl がインストールされているようです) (acl と呼ばれる) を含む Ubuntu 11.10:
sudo apt-get install setfacl
setfacl がインストールされている場合は、/etc/fstab ファイルをチェックして、acl オプションが追加されているかどうかを確認してください:
# /var was on /dev/sda7 during installation UUID=c2cc4104-b421-479a-b21a-1108f8895110 /var ext4 defaults,acl 0 2
次に、次のように入力します。ページのプロンプトに従ってデータベース名とその他の情報を入力し、次に示すように、この情報を /var/www/Symfony/app/config/parameters.ini ファイルにコピーします。 OK、ブラウザに次のアドレスを入力すると、デモ ページが表示されます:
; These parameters can be imported into other config files ; by enclosing the key with % (like %database_user%) ; Comments start with ';', as in php.ini [parameters] database_driver="pdo_mysql" database_host="localhost" database_name="symfony" database_user="symfony" database_password="symfony" mailer_transport="smtp" mailer_host="localhost" mailer_user="" mailer_password="" locale="zh_CN" secret="29f96e9e70c2797cb77dd088d3954d3c38d9b33f"
3. プログラムの例:
http://localhost/Symfony/web/app_dev.php2. ルーティングを作成します。 app/config/routing.yml に作成しますが、適切なプログラミング習慣とコード構成を身に付けるために、作成したバンドル ディレクトリの Resources/config/routing.yml と app/config/routing に配置できます。以下に示すように、ルーティング ファイルへの参照のみが yml に保持されます。
php app/console gen:bundle "AcmeHelloBundle" src 为了确保Acme名称空间可以被自动加载,请在你的app/autoload.php文件添加下列语句: $loader->registerNamespaces(array( // ... //添加自定义的名称空间 'Acme' => __DIR__.'/../src', // ... )); 最后是将该Bundle注册到Symfony2中,请在你的app/AppKernel.php文件中添加下列语句: // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new AcmeHelloBundleAcmeHelloBundle(), ); // ... return $bundles; }実際のルーティングは、以下に示すように、src/Acme/HelloBundle/Resources/config/routing.yml ルーティング ファイルに書き込まれます。 :
# app/config/routing.yml homepage: pattern: / defaults: { _controller: FrameworkBundle:Default:index } hello: resource: "@AcmeHelloBundle/Resources/config/routing.yml"3. コントローラーを作成します: コントローラーの名前は HelloController.php である必要があります。理由は非常に簡単です。なぜなら、上記のルーティング ファイルで既にコントローラーの名前が指定されているからです。 4 行目と 7 行目のコントローラーはすべて AcmeHelloBundle:Hello で始まります。ここで、AcmeHelloBundle はバンドル名を表し、Hello はコントローラー名を表します。そのため、コントローラーは HelloController.php である必要があり、コントローラー名の拡張子が命名規則です。後続のインデックスはコントローラークラスのメソッドとなります。インデックス メソッドは以下で定義されています。もちろん、メソッド名 IndexAction も命名規則です。
# src/Acme/HelloBundle/Resources/config/routing.yml hello: pattern: /hello/{name} defaults: { _controller: AcmeHelloBundle:Hello:index, name:'pu' }このように、ブラウザに
// src/Acme/HelloBundle/Controller/HelloController.php namespace AcmeHelloBundleController; use SymfonyComponentHttpFoundationResponse; class HelloController { public function indexAction($name) { return new Response('<html><body>Hello '.$name.'!</body></html>'); } }という単語が表示されます。と表示されます。 4. テンプレートを作成します: レイアウト ファイル内のブロックを再利用するには、テンプレートを使用してコントローラー内の HTML ステートメントを置き換えます。まず、ページ レイアウト ファイルを作成します:
http://localhost/hello/index/Worldこのファイルは app/Resources/views/ ディレクトリにあり、そのスコープはアプリケーション全体のグローバル テンプレート ファイルであることに注意してください。このファイルには、タイトルと本文という 2 つのブロックが定義されています。次のステップでは、以下に示すように、Hello コントローラー専用のテンプレートを作成します。
{# app/Resources/views/layout.html.twig #} <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{% block title %}Hello Application{% endblock %}</title> </head> <body> {% block body %}{% endblock %} </body> </html>このファイルでは、グローバル テンプレートを継承してブロック本体を定義し、グローバル テンプレート本体のブロックをオーバーライドします。システムがこのテンプレートをレンダリングする場合、グローバル テンプレートのブロック本体をブロック本体で上書きしてからレンダリングします。
最後に、コントローラーの HTML ステートメントを変更して、上記のテンプレートをレンダリングします。
{# src/Acme/HelloBundle/Resources/views/Hello/index.html.twig #} {% extends '::layout.html.twig' %} {% block body %} Hello {{ name }}! {% endblock %}
高性能 PHP フレームワーク Symfony2 クラシック入門チュートリアルに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。