ホームページ > php教程 > PHP开发 > 高性能PHPフレームワークSymfony2クラシック入門チュートリアル

高性能PHPフレームワークSymfony2クラシック入門チュートリアル

高洛峰
リリース: 2016-12-26 11:27:07
オリジナル
1577 人が閲覧しました

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 &#39;;&#39;, 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. プログラムの例:

1. バンドルの作成:

まずバンドルを作成します:

http://localhost/Symfony/web/app_dev.php
ログイン後にコピー

2. ルーティングを作成します。

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(
 // ...
 //添加自定义的名称空间
 &#39;Acme&#39; => __DIR__.&#39;/../src&#39;,
 // ...
));
  最后是将该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:&#39;pu&#39; }
ログイン後にコピー

このように、ブラウザに

// src/Acme/HelloBundle/Controller/HelloController.php
namespace AcmeHelloBundleController;
use SymfonyComponentHttpFoundationResponse;
class HelloController
{
 public function indexAction($name)
 {
  return new Response(&#39;<html><body>Hello &#39;.$name.&#39;!</body></html>&#39;);
 }
}
ログイン後にコピー

という単語が表示されます。と表示されます。

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 &#39;::layout.html.twig&#39; %}
{% block body %}
 Hello {{ name }}!
{% endblock %}
ログイン後にコピー

高性能 PHP フレームワーク Symfony2 クラシック入門チュートリアルに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート