- 追加された行はこの色です。
- 削除された行はこの色です。
* symfonyの簡単なまとめ [#i6b39216] ** インストール [#jddf979f] pear channel-discover pear.symfony-project.com pear install symfony/symfony-1.2.10 ** モジュールの追加 [#e241f351] frontendアプリケーションにcontentモジュールを追加。 cd PROJECT_DIR ** プロジェクト(アプリケーション・モジュール)の作成 [#ic582aef] *** プロジェクトの作成 [#t288842f] myprojectプロジェクトを作成する。 mkdir myproject cd myproject/ symfony generate:project myproject chmod 777 cache/ log/ 以後、すべてのコマンドはmyprojectディレクトリ直下で行う。 *** アプリケーションの作成 [#re3390c4] myprojectにfrontendアプリケーションを作成する。 symfony generate:app frontend *** モジュールの作成 [#e241f351] myprojectのfrontendにcontentモジュールを作成する。 symfony generate:module frontend content ** アクションの追加 [#b9370f0f] showアクションを追加。URLは http://localhost/frontend_dev.php/content/show になる。 ** アクションの作成 [#b9370f0f] showアクションを作成。URLは http://localhost/frontend_dev.php/content/show になる。 - actions/actions.class.php <?php class contentActions extends sfActions { public function executeShow() { $this->mesg = 'SHOW!'; } } - content/templates/showSuccess.php <html> <body> <?php if ($mesg): ?> [<?php echo $mesg ?>] <?php endif; ?> </body> </html> *** アクションからテンプレートに値を渡す [#o5502374] - アクション public function executeIndex() { $this->setVar('foo', 'bar'); $this->foo = 'bar'; } - テンプレート <html><body> <?php echo $foo ?> <?php echo $bar ?> </body></html> *** アクションでテンプレートを指定する [#e7169d8b] public function executeIndex() { $this->setTemplate('foo'); } apps/frontend/modules/XXX/templates/fooSuccess.php が呼ばれる。 ** ページのレイアウト [#vffd1fbc] sampleモジュールのindexアクションのページを考えると、デフォルトの構成では、以下のように2つのファイルを使い、レイアウトに<html>タグや<head>タグを記述し、テンプレートには<body>内を記述する。 :レイアウトファイル|apps/frontend/templates/layout.php :テンプレートファイル|apps/frontend/modules/sample/templates/indexSuccess.php *** 任意のレイアウトを指定する [#je43e40e] - apps/frontend/templates/my_layout.php - /apps/frontend/modules/sample/config/view.yml: all: has_layout: on indexSuccess: layout: my_layout ** テンプレートからテンプレートを呼び出す [#hfdd63e8] *** 部分テンプレート [#e8e09f07] 以下のようにテンプレートに記述する。 <?php include_partial('mypartial1') ?> # frontend/modules/mymodule/templates/_mypartial1.phpが呼び出される <?php include_partial('foobar/mypartial2') ?> # frontend/modules/foobar/templates/_mypartial2.phpが呼び出される 部分テンプレート内で変数を参照するには、呼び出す際に以下のようにすると、mytotal変数に参照出来る。 <?php include_partial('mypartial', array('mytotal' => $total)) ?> *** コンポーネント [#y27476cb] TODO ** 既存のデータベースからスキーマファイルを作成 [#j36c5c37] ** データベース接続情報ファイルを作成 [#c4670972] symfony configure:database "mysql:host=localhost;dbname=mydb" db_user db_passwd 以下のファイルが出来る。 - config/databases.yml all: propel: class: sfPropelDatabase param: dsn: mysql://login:passwd@localhost/blog - 以下のコマンドを実行する。 - config/propel.ini ** データベースからスキーマファイルを作成 [#w3c54a82] propel.iniを使ってデータベースにアクセスし、全テーブルの情報をYAMLファイルに落とし込む。 symfony propel:build-schema config/schema.yml が出来る。 ** スキーマファイルからデータモデルクラスを作成 [#h21024e7] データベースのテーブルを基にしたデータモデルクラス(テーブルクラス)を作成する。 symfony propel:build-model *** データモデルクラス [#kd76815d] - lib/model/XXX.php - ロジックを記述し、実際に編集する。 *** 基底データモデルクラス [#nd5c27a4] - lib/model/om/XXX.php - symfonyシステムファイルで通常編集しない。 *** オブジェクトクラス [#s1c6ed9e] - lib/model/TableA.php - lib/model/om/BaseTableA.php - テーブルのレコードそのものを表すクラス。 $tblA = new TableA(); $myname = $tblA->getMyName(); *** ピアクラス [#xcdb5ac4] - lib/model/TableAPeer.php - lib/model/om/BaseTableAPeer.php - テーブルのレコードを操作(取得)するクラス。 $tblA_list = TableAPeer::retrieveByPks(array(1,2,3)); ** データベースを変更したら(テーブル追加など) [#u45a7dac] 以下の通りにコマンドを再実行する。 symfony propel:build-schema symfony propel:build-model symfony propel:build-sql ** CRUD [#y7363eab] TODO ** URL・ルーティング [#z36da454] // 内部のURI構文 <module>/<action>[?param1=value1][¶m2=value2][¶m3=value3]... // 内部URIの例で、エンドユーザーに決して表示されない article/permalink?year=2006&subject=finance&title=activity-breakdown // 外部URLの例で、エンドユーザーに表示される http://www.example.com/articles/finance/2006/activity-breakdown.html - routing.yml article_by_title: url: articles/:subject/:year/:title.html param: { module: article, action: permalink } - url_for()ヘルパーは内部URIを外部URLに変換する <a href="<?php echo url_for('article/permalink?subject=finance&year=2006&title=activity-breakdown') ?>"> ここをクリック</a> // ヘルパーはURIがarticle_by_titleルールにマッチすることを見る // ルーティングシステムはそれから外部URLを作成する => <a href="http://www.example.com/articles/finance/2006/activity-breakdown.html">ここをクリック</a> - link_to()ヘルパーは直接ハイパーリンクを出力し、PHPとHTMLを混在させることを回避する <?php echo link_to( 'ここをクリック', 'article/permalink?subject=finance&year=2006&title=activity-breakdown') ?> ) ?> - 内部では、link_to()はurl_for()を呼び出すので結果はつぎのものと同じ => <a href="http://www.example.com/articles/finance/2006/activity-breakdown.html">ここをクリック</a> *** FORMタグ例 [#gad40b34] <html><body> <form action="<?php echo url_for('author/edit'.(!$author->isNew() ? '?id='.$author->getId() : '')) ?>" method="post" <?php $form->isMultipart() and print 'enctype="multipart/form-data" ' ?>> <input type="submit" value="Save" /> </form> </body></html> *** Aタグ例 [#o1a6695c] <html><body> <?php echo link_to('Delete', 'author/delete?id='.$author->getId(), array('post' => true, 'confirm' => 'Are you sure?')) ?> </body></html> ** フォームヘルパー [#pfd3d088] *** フォームタグ [#e3141512] <?php echo form_tag('test/save') ?> => <form method="post" action="/path/to/save"> <?php echo form_tag('test/save', 'method=get multipart=true class=simpleForm') ?> => <form method="get" enctype="multipart/form-data" class="simpleForm"action="/path/to/save"> 閉じタグは</form>自分で。 ** propelフォーム [#p4c9e5de] symfony propel:build-forms ** デバッグ [#j8a22615] *** ログ [#qd78083e] public function executeIndex(sfWebRequest $request) { $this->logMessage('ログです'); $this->logMessage('エラーです','err'); } <html><?php use_helper('Debug') ?> <?php log_message('エラーです', 'err') ?></html>