コントローラの基本

Posted by muchag | Symfony 1.x | 2011-06-03 (金) 17:33:40

コントローラMVC の C 。

公式:Practical symfony 4日目: Controller と View

【環境】
[symfony] 1.4.11
役割

モデル から受け取った情報を処理・加工
および
ユーザからのリクエストを受け付け、それに沿った処理
そして、結果を ビュー へ渡す。
 

ネーミング
ファイル名
自動生成した場合

actions.class.php
 

クラス名
自動生成した場合

(モジュール名)+ Actions
例) jobActions
 

格納場所
apps\(アプリ名)\modules\(モジュール名)\actions

 

メソッド
定義済みメソッド

 

アクションメソッド

メソッドうちビューのための処理をするのが アクション 。
 

ネーミング

execute プレフィクスが付く。
例)executeIndex
 

ビューとの関係

executeIndex アクションと indexSuccess.php ビューが自動的に紐付けられる。
 

値の受け渡し

一般値
アクション内に以下のように記述することで

  1. $this->変数名 =;
  2.  
  3. 例)
  4. $this->author = 'Hoge';
  5. $this->blog_cms = array('WordPress', 'MovableType');

ビュー内で変数として値を利用できる。

  1. echo $author;
  2. // Hoge
  3.  
  4. echo $blog_cms[0];
  5. // WordPress

 
DB の値
モデルを利用して DB の値を受け渡すには

  1. $this->jobeet_jobs = Doctrine::getTable('JobeetJob')
  2.     ->createQuery('a')
  3.     ->execute();

としてやると、ビュー内で

  1. foreach ($jobeet_jobs as $->jobeet_job) {
  2.     echo $jobeet_job->getHowToApply();
  3. }

と、get + カラム名のキャメル記法 で、値を取れる。
 

ユーザリクエスト

アクションメソッドは

  1. public function executeIndex(sfWebRequest $request)

のように、HTML リクエストを引数としているので
これを用いて必要な処理を行える。

  1. $request->getParameter('id')

のようにして値を取得できる。
 

エラー処理
  1. $this->forward404Unless($this->job);
  2.  
  3. または
  4.  
  5. if (!$this->job)
  6. {
  7.     $this->forward404();
  8. }
  9.  
  10. または
  11.  
  12. if (!$this->job)
  13. {
  14.     $this->forward('default', '404');
  15. }

と記述することで、$this->job が true でない場合は
Default モジュールの 404 アクション(ページ)へ自動遷移する。
 

一般メソッド
Symfony 1.x | 2011-06-03 (金) 17:33:40 |

ビューの基本

Posted by muchag | Symfony 1.x | 2011-06-03 (金) 12:20:13

ビューMVC の V 。
Symfony では テンプレート と呼ぶ方が一般的っぽい。

公式:Practical symfony 4日目: Controller と View

【環境】
[symfony] 1.4.11
役割

ブラウザへの表示を担当。
 

ファイル名

アクション名に「Success」というサフィックスを付ける。
例)executeIndex -> indexSuccess.php
 

格納場所
apps\(アプリ名)\modules\(モジュール名)\templates

 

中身

中身は HTML

基本的には、値の表示とループ等のステートメントのみ PHP

もちろん、CSS やら Javascript やらも利用可能。
 

ヘルパー
CSS, JavaScript 宣言
  1. include_javascripts()
  2. include_stylesheets()

 

ビュー内で CSS を指定
  1. use_stylesheet('jobs.css')

のように use_stylesheet を用いて宣言する。

ところで、Symfony って、行末の ; (セミコロン)がなくてもいいのだろうか・・・。
 

ラッパー

Symfony では、グローバルテンプレート または レイアウト と呼ぶっぽい。

apps\(アプリ名)\templates

に格納する。デフォルトファイル名は layout.php
 

設定

YAML ファイルを用いる。
 

格納場所
アプリ全体
apps\(アプリ名)\config\view.yml

例)

  1. # apps/frontend/config/view.yml
  2. default:
  3.   http_metas:
  4.     content-type: text/html
  5.  
  6.   metas:
  7.     #title:        symfony project
  8.     #description:  symfony project
  9.     #keywords:     symfony, project
  10.     #language:     en
  11.     #robots:       index, follow
  12.  
  13.   stylesheets:    [main.css]
  14.  
  15.   javascripts:    []
  16.  
  17.   has_layout:     on
  18.   layout:         layout

 

モジュール(コントローラ)単位

必要な部分だけを記述。

apps\(アプリ名)\modules\(モジュール名)\config\view.yml
  1. # apps/frontend/modules/job/config/view.yml
  2. indexSuccess:
  3.   stylesheets: [jobs.css]
  4.  
  5. showSuccess:
  6.   stylesheets: [job.css]

 

複数定義

CSS などは

  1. stylesheets:    [main.css, jobs.css, job.css]
  2. stylesheets:    [main.css, jobs.css, job.css, print: { media: print }]

という書き方で複数定義する。

出力結果

  1. <link rel="stylesheet" type="text/css" media="screen" href="/css/main.css" />
  2. <link rel="stylesheet" type="text/css" media="screen" href="/css/jobs.css" />
  3. <link rel="stylesheet" type="text/css" media="screen" href="/css/job.css" />
  4. <link rel="stylesheet" type="text/css" media="print" href="/css/print.css" />

 

ヘルパーの利用
  1. use_helper('Text')

とすることで、ヘルパー(例の場合は Text ヘルパー群)をロードすることができる。
 

日付カラム

DB にタイムスタンプ型のカラムがある場合

  1. $job->getDateTimeObject('created_at')->format('m/d/Y');

ビュー内で上記のようにすることで、書式設定可能。
 

スロット

ヘルパー。

レイアウト領域が個別テンプレートに依存するとき スロット を定義する。
例)ページタイトル

apps/frontend/templates/layout.php
  1. <title><?php include_slot('title') ?></title>
  2.  
  3. <title>
  4.     <?php include_slot('title', 'Jobeet - Your best job board') ?>
  5. </title>
  6.  
  7. <title>
  8.     <?php if (!include_slot('title')): ?>
  9.         Jobeet - Your best job board
  10.     <?php endif ?>
  11. </title>

 

apps/frontend/modules/job/templates/showSuccess.php
  1. <?php slot('title') ?>
  2.     <?php echo sprintf('%s is looking for a %s', $job->getCompany(), $job->getPosition()) ?>
  3. <?php end_slot() ?>
  4.  
  5. <?php slot('title') ?>
  6.     <?php echo sprintf('%s is looking for a %s', $job->getCompany(), $job->getPosition()) ?>
  7. <?php end_slot() ?>
Symfony 1.x | 2011-06-03 (金) 12:20:13 |

DB

Posted by muchag | Symfony 1.x | 2011-06-02 (木) 20:58:10

【環境】
[symfony] 1.4.11
ORM

SymfonyORM(Object-relational mapping)ツールには

の2種類がある。
 

抽象化レイヤー

Symfony では、抽象化レイヤーに PDO を利用しているようだ。

Symfony 1.x | 2011-06-02 (木) 20:58:10 |

Doctrine

Posted by muchag | Symfony 1.x | 2011-06-02 (木) 20:26:31

Practical symfony 3日目: データモデル
を、実際に試しながら自分用に残すメモ。

ロボットのように設定しただけで
さっぱりピンときてない・・・。

【環境】
symfony:1.4.13
doctrine:1.2.4

Doctrine Manual
英語版
日本語版

デフォルト ORM

参考元サイトを見ると Symfony のデフォルトは Propel とのことだが
アーカイブからインストール したせいかヴァージョンの問題か
私の環境ではデフォルトが Doctrine であった。

よって、Propel から Doctrine へ移行する手順は参考元サイトを参照。
 

databases.yml

DB 接続情報を記載。

コマンドラインの jobeet プロジェクトルートまで移動して

  1. >I:\xampp\php\php symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=jobeet" root mYsEcret

とすることで、以下のファイルが自動生成される。

jobeet\config\databases.yml
  1. all:
  2.   doctrine:
  3.     class: sfDoctrineDatabase
  4.     param:
  5.       dsn: 'mysql:host=localhost;dbname=jobeet'
  6.       username: root
  7.       password: mYsEcret

ちなみに、私の環境では、パスワードこそ空白のものの
それ以外の部分を記載した databases.yml がデフォルトで設置されていた。
 

パラメータ

参考元サイト:アシアルブログ symfony DoctrineのTIPS
こちらを見ると、パラメータが他にも設定してある。

これを参考にすると、こんな感じ。

  1. all:
  2.   doctrine:
  3.     class: sfDoctrineDatabase
  4.     param:
  5.       classname:  DoctPDO
  6.       dsn: 'mysql:host=localhost;dbname=jobeet'
  7.       username: root
  8.       password: mYsEcret
  9.       encoding:   utf8
  10.       persistent: true
  11.       pooling:    true

コマンドラインからの自動生成では不十分そうだ。
 

schema.yml
DB があるとき

コマンドラインの jobeet プロジェクトルートまで移動して

  1. >I:\xampp\php\php symfony doctrine:build-schema

で、作成できるらしいが試していない。
 

バグ

ヴァージョンがわからないが
これを実行すると databases.yml の connection の行が消えるバグがあるらしい。
参考元サイト:アシアルブログ symfony DoctrineのTIPS
 

DB がないとき

気合で記述する。

jobeet\config\doctrine\schema.yml
  1. # config/doctrine/schema.yml
  2. JobeetCategory:
  3.   actAs: { Timestampable: ~ }
  4.   columns:
  5.     name: { type: string(255), notnull: true, unique: true }
  6.  
  7. JobeetJob:
  8.   actAs: { Timestampable: ~ }
  9.   columns:
  10.     category_id:  { type: integer, notnull: true }
  11.     type:         { type: string(255) }
  12.     company:      { type: string(255), notnull: true }
  13.     logo:         { type: string(255) }
  14.     url:          { type: string(255) }
  15.     position:     { type: string(255), notnull: true }
  16.     location:     { type: string(255), notnull: true }
  17.     description:  { type: string(4000), notnull: true }
  18.     how_to_apply: { type: string(4000), notnull: true }
  19.     token:        { type: string(255), notnull: true, unique: true }
  20.     is_public:    { type: boolean, notnull: true, default: 1 }
  21.     is_activated: { type: boolean, notnull: true, default: 0 }
  22.     email:        { type: string(255), notnull: true }
  23.     expires_at:   { type: timestamp, notnull: true }
  24.   relations:
  25.     JobeetCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs }
  26.  
  27. JobeetAffiliate:
  28.   actAs: { Timestampable: ~ }
  29.   columns:
  30.     url:       { type: string(255), notnull: true }
  31.     email:     { type: string(255), notnull: true, unique: true }
  32.     token:     { type: string(255), notnull: true }
  33.     is_active: { type: boolean, notnull: true, default: 0 }
  34.   relations:
  35.     JobeetCategories:
  36.       class: JobeetCategory
  37.       refClass: JobeetCategoryAffiliate
  38.       local: affiliate_id
  39.       foreign: category_id
  40.       foreignAlias: JobeetAffiliates
  41.  
  42. JobeetCategoryAffiliate:
  43.   columns:
  44.     category_id:  { type: integer, primary: true }
  45.     affiliate_id: { type: integer, primary: true }
  46.   relations:
  47.     JobeetCategory:  { onDelete: CASCADE, local: category_id, foreign: id }
  48.     JobeetAffiliate: { onDelete: CASCADE, local: affiliate_id, foreign: id }

以上、公式からのコピペ。
 

ORM
モデルの生成

コマンドラインの jobeet プロジェクトルートまで移動して

  1. >I:\xampp\php\php symfony doctrine:build --model

とすることで

jobeet\lib\model\doctrine

が生成され

doctrine
◇┣ base
◇┃◇┣ BaseJobeetAffiliate.class.php
◇┃◇┣ BaseJobeetCategory.class.php
◇┃◇┣ BaseJobeetCategoryAffiliate.class.php
◇┃◇┗ BaseJobeetJob.class.php
◇┃    ↑ Base*** は *** の親クラス。doctrine:build –model を実行するたびに上書きされる
◇┃    ↑ よって、全てのカスタマイズは *** クラスで行うこと
◇┣ JobeetAffiliate.class.php
◇┣ JobeetAffiliateTable.class.php
◇┣ JobeetCategory.class.php
◇┣ JobeetCategoryAffiliate.class.php
◇┣ JobeetCategoryAffiliateTable.class.php
◇┣ JobeetCategoryTable.class.php
◇┣ JobeetJob.class.php
◇┗ JobeetJobTable.class.php
    ↑ ***Table クラスは *** オブジェクトのコレクションを返すメソッドなどを定義する
    ↑ *** クラスのオブジェクトは、当該テーブルの単独のレコードを表す

これだけのファイルが自動生成された。
 

概略

jobeet_job テーブルに対して、以下の3つのクラスファイルが生成される。

  • JobeetJob.class.php
    JobeetJob クラスのオブジェクトは、当該テーブルの単独のレコードを表す
  • BaseJobeetJob.class.php
    BaseJobeetJob は JobeetJob の親クラス。doctrine:build –model を実行するたびに上書きされる
    よって、全てのカスタマイズは JobeetJob クラスで行うこと
  • JobeetJobTable.class.php
    JobeetJobTable クラスは JobeetJob オブジェクトのコレクションを返すメソッドなどを定義する

 

SQL の生成
  1. >I:\xampp\php\php symfony doctrine:build --sql

更にコマンドを上述のようにして続けると

jobeet\data\sql\schema.sql

を自動生成してくれる。
 

テーブル群の生成
  1. >I:\xampp\php\php symfony doctrine:insert-sql

とすることで、実際にテーブルを生成してくれる。

 

一括処理
  1. >I:\xampp\php\php symfony doctrine:build --all --no-confirmation

とすることで、今までの一連の作業を一括処理してくれる。
 

キャッシュの削除

参考元サイトによると、ここでキャッシュの削除を行う。

  1. >I:\xampp\php\php symfony cc

 

初期データのセッティング

symfony では、DB のテーブルを作成するたびに全てのデータが消える。

よって、ユーザに因らないデータ=初期データを毎回取り込まねばならない。

それには doctrine:data-load タスクを用いる。
 

フィクスチャファイル
jobeet\data\fixtures\categories.yml
  1. # data/fixtures/categories.yml
  2. JobeetCategory:
  3.   design:
  4.     name: Design
  5.   programming:
  6.     name: Programming
  7.   manager:
  8.     name: Manager
  9.   administrator:
  10.     name: Administrator

 

jobeet\data\fixtures\jobs.yml
  1. # data/fixtures/jobs.yml
  2. JobeetJob:
  3.   job_sensio_labs:
  4.     JobeetCategory: programming
  5.     type:         full-time
  6.     company:      Sensio Labs
  7.     logo:         sensio-labs.gif
  8.     url:          http://www.sensiolabs.com/
  9.     position:     Web Developer
  10.     location:     Paris, France
  11.     description:  |
  12.       You've already developed websites with symfony and you want to work
  13.       with Open-Source technologies. You have a minimum of 3 years
  14.       experience in web development with PHP or Java and you wish to
  15.       participate to development of Web 2.0 sites using the best
  16.       frameworks available.
  17.     how_to_apply: |
  18.       Send your resume to fabien.potencier [at] sensio.com
  19.     is_public:    true
  20.     is_activated: true
  21.     token:        job_sensio_labs
  22.     email:        job@example.com
  23.     expires_at:   '2010-10-10'
  24.  
  25.   job_extreme_sensio:
  26.     JobeetCategory:  design
  27.     type:         part-time
  28.     company:      Extreme Sensio
  29.     logo:         extreme-sensio.gif
  30.     url:          http://www.extreme-sensio.com/
  31.     position:     Web Designer
  32.     location:     Paris, France
  33.     description:  |
  34.       Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
  35.       eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
  36.       enim ad minim veniam, quis nostrud exercitation ullamco laboris
  37.       nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
  38.       in reprehenderit in.
  39.  
  40.       Voluptate velit esse cillum dolore eu fugiat nulla pariatur.
  41.       Excepteur sint occaecat cupidatat non proident, sunt in culpa
  42.       qui officia deserunt mollit anim id est laborum.
  43.     how_to_apply: |
  44.       Send your resume to fabien.potencier [at] sensio.com
  45.     is_public:    true
  46.     is_activated: true
  47.     token:        job_extreme_sensio
  48.     email:        job@example.com
  49.     expires_at:   '2010-10-10'

の2つのファイルを用意する。(公式よりコピペ)

※この job フィクスチャファイルは2つの画像を参照するので
http://www.symfony-project.org/get/jobeet/sensio-labs.gif
http://www.symfony-project.org/get/jobeet/extreme-sensio.gif
を DL して

jobeet\web\uploads\jobs

に配置する。

※ YAML ファイルでは
description カラムのようにデータが複数行になる=文字列が改行を含むときは
| (パイプ)を用いる。
 

doctrine:data-load

コマンドラインの jobeet プロジェクトルートまで移動して

  1. >I:\xampp\php\php symfony doctrine:data-load

とすることで
jobeet_category, jobeet_job の2テーブルにデータが挿入される。
 

doctrine:build –all –and-load

このタスクによってフォーム、フィルタ、モデルを生成し、
データベースを削除してからすべてのテーブルを再作成する。

  1. >I:\xampp\php\php symfony doctrine:build --all --and-load

これはつまり、ここまでの全てを一括処理してくれるということかしら?
 

モジュール

JobeetJob モデル用の、基本的な操作機能を提供するモジュールを自動生成。

  1. >I:\xampp\php\php symfony doctrine:generate-module --with-show --non-verbose-templates frontend job JobeetJob

とすることで

jobeet\apps\frontend\modules\job

job
◇┣ actions
◇┃◇┗ actions.class.php
◇┗ templates
◇◇◇┣ _form.php
◇◇◇┣ editSuccess.php
◇◇◇┣ indexSuccess.php
◇◇◇┣ newSuccess.php
◇◇◇┗ showSuccess.php

これらのファイルが自動生成される。
 

フォームの生成

もしここでエラーが出るようなら、上記コマンドの前に

  1. >I:\xampp\php\php symfony doctrine:build-forms

とし、フォームの生成を行う。
参考元サイト:ネットの隅でまったりと Symfony で最初の24時間にやること:3時間目
 

モジュールのテスト

http://localhost/frontend_dev.php/job

と、楽しみ~に上記アドレスへアクセスしたら、上図の結果で目を丸くした@@

でもまぁ 冷静に考えれば、このアドレスで編集画面のわけがなく
適当に類推して
 

詳細画面

http://localhost/frontend_dev.php/job/show/id/1
 

編集画面

http://localhost/frontend_dev.php/job/edit/id/1

と、無事に見ることができた。
 

Tips

1.複数のデータベースに接続
2.sqlの数を減らす
3.関連データをまとめて削除
参考元サイト:アシアルブログ symfony DoctrineのTIPS

バージョンチェック
  1. echo Doctrine::VERSION;
  2.  
  3. $version = Doctrine::VERSION;

など。

参考サイト

公式:Practical symfony 3日目: データモデル
ここを読んでも上手くいかなかったので
symfony で開発 Blog:Jobeet3日目 Doctrineでデータモデル作成
こちらを参考にさせていただきました。

symfony-doc-ja:sfDoctrinePlugin

Symfony 1.x | 2011-06-02 (木) 20:26:31 |

アーカイブからインストール

Posted by muchag | Symfony 1.x | 2011-05-11 (水) 0:24:48

インストール の 2 の手法。

公式:Practical symfony 1日目: プロジェクトを始める
で解説されている「アーカイブからインストール」する手法。

どうやらプロジェクト毎に毎回インストールする手法っぽい。

アーカイブの DL

The symfony framework Installation より

symfony-1.4.11.zip

を DL 。(2011-05-10現在)
 

インストールディレクトリの作成

上記サイトでの解説ではコマンドラインにてディレクトリを作成しているが
まぁ、手抜きでエクスプローラから作成。

Eclipse をエディタおよびデバッガとして利用するつもりなので
Eclipse ワークスペース内に作成。

また、上記サイトのチュートリアルを練習してみるつもりなので
それに合わせて作成。

結果、パスは以下の通り。

J:\Eclipse_PDT\sfprojects\jobeet\lib\vendor

 

解凍&改称

DL してきた

symfony-1.4.11.zip

を上記フォルダ内に配置して解凍。

解凍後、symfony-1.4.11 というフォルダ名を symfony と改称。
 

インストールの検証

まずコマンドラインで練習プロジェクト jobeet のフォルダまで移動。

  1. >cd /d J:\Eclipse_PDT\sfprojects\jobeet

 
私の環境では、PHP 実行ファイルは

I:\xampp\php\php.exe

なので

  1. >I:\xampp\php\php.exe lib/vendor/symfony/data/bin/symfony -V

とすることで、インストールした Symfony のヴァージョンを表示させることができる。

無事ヴァージョンが表示されたので、インストールを正しく完了したようだ。
 
PHP へパスを通してあれば

  1. >php lib\vendor\symfony\data\bin\symfony -V

とするだけでよい。

次に以下の解説に従い手を入れようとしたところ

-V オプションは symfony のインストールディレクトリへのパス、config/ProjectConfiguration.class.php も表示します。
symfony へのパスが絶対パスである場合 (上記の手引きに従って入ればデフォルトではありません)、次のようなよりよいポータビリティのために変更します:

// config/ProjectConfiguration.class.php
require_once dirname(__FILE__).’/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php’;

この方法では、プロジェクトディレクトリをあなたのマシンもしくは別のマシンの任意の場所に移動させても、きちんと動きます。

config\ProjectConfiguration.class.php

このファイルが見つからない。

config\sfProjectConfiguration.class.php

これならある。

ヴァージョン違いで名称が変わったかしら?

でも、sfProjectConfiguration.class.php 内で sfCoreAutoload.class.php を検索してもノーヒット。。。
ん~。。。
 

発見

上からの流れで

J:\Eclipse_PDT\sfprojects\jobeet\lib\vendor\symfony\data\bin\symfony\config

を探していたが、そうではなくてプロジェクトルートフォルダだった。

J:\Eclipse_PDT\sfprojects\jobeet\config

そうと分かれば話は早くて
要は PukiWiki とか OpenPNE でやってたパターンね。

index.php

だけ Web 公開ディレクトリに置いて、残りは退避。
まぁ、MVC なんだから当たり前か。
 

プロジェクトの作成

前述の「インストールの検証」同様、コマンドラインで練習プロジェクト jobeet のフォルダまで移動。

  1. >cd /d J:\Eclipse_PDT\sfprojects\jobeet

 
プロジェクトの作成。

  1. >I:\xampp\php\php.exe lib\vendor\symfony\data\bin\symfony generate:project jobeet

 
んで、ズラズラズラ~っとこんな感じで作成される。

 

ディレクトリ 説明
apps/ プロジェクトのすべてのアプリケーションを格納する
cache/ フレームワークによってキャッシュされるファイル
config/ プロジェクトの設定ファイル
lib/ プロジェクトのライブラリとクラス
log/ フレームワークのログファイル
plugins/ インストールされたプラグイン
test/ ユニットテストと機能テストのファイル
web/ Web 公開ルートディレクトリ (下記を参照)

 

アプリケーションの作成
バッチファイルのコピー

Symfony コマンドを実行するためのバッチファイルを
プロジェクトルートへコピー。

  1. > copy lib\vendor\symfony\data\bin\symfony.bat .

 

これで心置きなくプロジェクトルートで Symfony コマンドを利用できるっていうことかな?

あ、でも「プロジェクトを作成」した時点で
プロジェクトルートに Symfony というファイルはあったなぁ。

もしかして、このコピーは余計だったかも・・・。
 

アプリケーションの作成

プロジェクトルートに frontend という名称のアプリケーションを作成。

  1. >I:\xampp\php\php.exe symfony generate:app frontend

 

 
ん~、これを見ると「ディレクトリ構造の権限」の変更も行われているようだ。
どうやら公式のチュートリアルは、記述が大分古いっぽい。
気をつけなきゃ。
 

ディレクトリ 説明
config/ アプリケーションの設定ファイル
lib/ アプリケーションのライブラリとクラス
modules/ アプリケーションのコード (MVC)
templates/ グローバルテンプレートファイル

 

Web サーバーの設定

世界中から新しいプロジェクトにアクセスできるように Apache のコンフィギュレーションを変更しましょう。

この一言が気になり、解説サイトの設定をちょっと変更。
まぁ、ポートを開いていない限り、外からはアクセスできないとは思うのだが。。。

  1. # Be sure to only have this line once in your configuration
  2. NameVirtualHost 127.0.0.1:8080
  3.  
  4. # This is the configuration for your project
  5. Listen 127.0.0.1:8080
  6.  
  7. <VirtualHost 127.0.0.1:8080>
  8.     DocumentRoot "J:\Eclipse_PDT\sfprojects\jobeet\web"
  9.     DirectoryIndex index.php
  10.     <Directory "J:\Eclipse_PDT\sfprojects\jobeet\web">
  11.         AllowOverride All
  12.         Deny from All
  13.         Allow from 127.0.0.1
  14.     </Directory>
  15.  
  16.     Alias /sf "J:\Eclipse_PDT\sfprojects\jobeet\lib\vendor\symfony\data\web\sf"
  17.     <Directory "J:\Eclipse_PDT\sfprojects\jobeet\lib\vendor\symfony\data\web\sf">
  18.         AllowOverride All
  19.         Deny from All
  20.         Allow from 127.0.0.1
  21.     </Directory>
  22. </VirtualHost>

<変更点>
解説サイトに従って、パスを Windows 用且つ私の環境用に変更。
更にアクセス権限を 127.0.0.1 に制限。

尚、これらの設定により、既存の Web サイトへの影響は
今のところ全く見られない。
素晴らしい。 😎
 

プロジェクトルートの表示

きた~!!!
この画面を拝むまで長かった・・・。

何はともあれ、無事に表示できた。

 
ついでに、frontend_dev.php もチェック。

そし~て!
これまた成功♪

 

Subversion

この練習用プロジェクトで必要だとは思えないので
今回は華麗にスルー!

Symfony 1.x | 2011-05-11 (水) 0:24:48 |

インストール

Posted by muchag | Symfony 1.x | 2011-05-10 (火) 19:05:46

symfony のインストールには
5通りの手法があるんだそうな。

日本Symfonyユーザー会:Symfonyのインストール方法(入門者・評価向け)

  1. pearによるインストール
  2. Symfonyパッケージをダウンロードしてインストール
  3. Symfony Sandboxパッケージをダウンロードしてインストール
  4. subversionリポジトリからチェックアウトしてインストール
  5. gitリポジトリ(github)からcloneしてインストール

で、公式では 4 が推奨らしい。
公式:Practical symfony 1日目: プロジェクトを始める
ここの 1/3 ページくらいのところに
Subversion からインストールする (推奨)
と書かれている。

Symfony 1.x | 2011-05-10 (火) 19:05:46 |

PHP のコンフィギュレーション

Posted by muchag | Symfony 1.x | 2011-05-10 (火) 14:59:44

Symfony のインストールに当たり
既存の PHP が Symfony の要件を満たすかどうかをチェックする。

チェッカーファイルの DL

http://sf-to.org/1.4/check.php より

check_configuration.php

を DL 。

もし、Symfony 1.3.x を利用する場合は
http://sf-to.org/1.3/check.php
というように Symfony のヴァージョンに合わせて適宜書き換える。

DL してきたファイルは、Web ルートディレクトリに配置。
XAMPP の場合は

XAMPP フォルダ\htdocs

に配置。
 

チェック
コマンドプロンプトから実行
  1. php check_configuration.php

 
私の環境では、PHP の実行ファイルが

XAMPP フォルダ\php

Web ルートディレクトリが

XAMPP フォルダ\htdocs

であるため

  1. php ..\htdocs\check_configuration.php

と相対パスにて記述。
 

ブラウザから実行

http://localhost/check_configuration.php
ブラウザのアドレスバーに上記 URL を入力。
 

実行結果

 
実行結果を並べてみると、ほぼ同じなのだが
コマンドラインからの結果には、php.ini が複数あるよ~という WARNING がある。
むぅ、両者に違いが出るのかぁ。
 

解決
php.ini

The PHP CLI can use a different php.ini file than the one used with your web server.
(especially on the Windows platform)
If this is the case, please launch this utility from your web server.

放置。。。
 

The posix_isatty() is available

なんと~!!
posix は Windows 環境には対応していないとのこと。
PHP マニュアル:POSIX 導入

んじゃ、放置で。。。
 

A PHP accelerator is installed
XAMPP フォルダ\php\php.ini

の編集。

私の現在の XAMPP 1.7.3 環境(以前に修正している箇所あり)では
998行目のコメントアウトを外す。

  1. [PECL]
  2. extension=php_apc.dll

APC のインストールに際してのエラー
 
最後に Apache を再起動
 
ん~ 3つの WARNING のうち、1つしか解決できなかった。

Symfony 1.x | 2011-05-10 (火) 14:59:44 |

XAMPP へインストール

Posted by muchag | Symfony 1.x | 2011-05-10 (火) 2:13:36

コマンドプロンプトを開き

XAMPP フォルダ\php

まで移動して

  1. pear channel-discover pear.symfony-project.com

で、Symfony のチャンネルを追加する。

 
次に

  1. pear install symfony/symfony

で、インストール。

5分くらい待たされたかな。

これで

XAMPP フォルダ\php\symfony
XAMPP フォルダ\php\symfony.bat
XAMPP フォルダ\php\PEAR\symfony
XAMPP フォルダ\php\PEAR\data\symfony
XAMPP フォルダ\php\PEAR\docs\symfony

が増えた・・・気がする。
他にもあるかもしれない。

Symfony 1.x | 2011-05-10 (火) 2:13:36 |

Symfony 1.x Index

Posted by muchag | Symfony 1.x | 2011-05-10 (火) 1:58:53

PHP のフレームワークとしては
先に Zend Framework に挑戦してみたが
どうやら Symfony の方がシェアが大きそうなので
こちらにトライしてみる。

丸っきりの書きかけ項目は Not found になる。

序章
  1. インストール
    1. PHP のコンフィギュレーション
    2. XAMPP へインストール
    3. アーカイブからインストール
  2. 設定ファイル(.yml)
  3. Ajax
    1. JSON
    2. 手書き($.load())
    3. 手書き($.ajax())
    4. ヘルパー
  4. MVC
    1. ビュー
    2. コントローラ
  5. 現状情報の取得
  6. アクション
    1. 外部 API
    2. 共通処理
    3. テンプレート差し替え
  7. キャッシュ
  8. テンプレート
    1. エスケープ処理回避
    2. ヘルパー
      1. AssetHelper
      2. UrlHelper
  9. フォーム
    1. sfValidator
    2. sfWidget
    3. 値変更
    4. フィルタ
    5. コレクション
  10. 公式チュートリアル
    1. (書籍)symfony 1.4 による Web アプリケーション開発 目次(公式へのリンク集)
  11. ルーティング
    1. 強制遷移
  12. DB
    1. Doctrine
      1. スキーマ
        1. OpenPNE3 テーブル作成
      2. トランザクション
      3. ビヘイビア
        1. I18n
        2. NestedSet
        3. SoftDelete
      4. リレーション
  13. デバッグ
    1. Eclipse
  14. 国際化とローカリゼーション
    1. i18n

 

Doctrine
  1. DQL
    1. API
    2. 結果セット整形
    3. サブクエリ
  2. fixture
  3. オブジェクト
    1. Doctrine_Collection
  4. Tips
    1. DISTINCT, LEFT JOIN
    2. SQL の確認
    3. データ操作
    4. 生 SQL の発行

 

プラグイン
  1. 自作
    1. sfHybridAuthPlugin

 

OpenPNE
  1. OpenPNE 3.x Index

 

がい~ん!(はまったこと)
  1. 解決済み(たぶん)
    1. エラーメッセージなし
    2. Array to string conversion in Abstract.php
    3. APC のインストールに際してのエラー
    4. Cannot set values.
    5. Can’t use method return value in write context
    6. javascript でのパス指定
    7. SoftDelete ビヘイビアを利用したら取得データ数 0
    8. Doctrine
      1. Duplicate alias ‘h’ in query.
      2. Invalid hydration mode specified: ja_JP
      3. PHP Fatal error: Call to a member function evictAll() on a non-object in
      4. SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘hoge’ for key ‘PRIMARY’
      5. SQLSTATE[HY000]: General error: 1005 Can’t create table
      6. SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
  2. 未解決

 

参考

公式The symfony Reference Book
  :symfony API
日本Symfonyユーザー会ドキュメント
symfony 1.4 による Web アプリケーション開発:リンク集
→公式ドキュメントをテーマ別に整理してあるリンク集

Symfony 1.x | 2011-05-10 (火) 1:58:53 |
« 前ページへ