チュートリアルに従って学習を進めていきます。
いつものように文体が教える形式になっていますが、単にその方が書きやすいというだけで、基本的に自分が学習するために書いてます。
あまり気にしないが吉。
とりあえず真っ先にSymfonyの問題点を挙げておくと、APIの日本語リファレンスが無い。
習得にあたり、SmartyやZFがほぼ完全なリファレンスを提供しており、CakePHPも不完全ながら主要コンポーネント等については一覧を用意しているのに対し、大きなハンデとなっています。
あるのはチュートリアルのようなものばかりです。
http://symfony.xrea.jp/
http://www.symfony-project.org/jobeet/1_2/Doctrine/ja/
英語版は存在しますが、"form_tag"で検索しても何も出てこないなど、何処に何があるのか先に知っておかないと使えないという全く意味のないリファレンスになっています。
単にフォームを表示したいだけなのにオブジェクトがどうとかメソッドがどうとかいった内容をデザイナーに押しつけるという馬鹿げた発想が無くならない限り、積極的に使いたいとは到底思えないんですが。
確かにエスケープやフォームの肩代わりをしてくれるのは楽といえば楽なのですが、そのぶん参入障壁も非常に高くなっているので、入口を整備しないとなかなか入り込めないのですが。
あとフォームやDBの内容を取得すると無駄に馬鹿でかいオブジェクトが入ってくるので、var_dump()等目視によるチェックが行いにくいというのも難点です。
なにやらいきなり文句ばかりになりました。
最終日までに解消されればいいのですが。
インストールそのものは簡単です。
チュートリアルではダウンロードして解凍してといったことが書かれていますが、Pearを利用した方が楽です。
コマンドラインから
> pear channel-discover pear.symfony-project.com
> pear remote-list -c symfony
> pear install symfony/symfony
とするとPEARパッケージとしてインストールされます。
今回はバージョン1.2.9。
次にプロジェクトを作成します。
ディレクトリ構成なんかを簡単に作ってくれるバッチファイルがあります。
プロジェクトを作成したいフォルダに移動し、コマンドを一行打つと完了です。
勿論先にphpとsymfonyにパスを通しておきます。
> cd C:\xampp\htdocs\symfony
> symfony init-project jobeet
> symfony init-app frontend
サブドメインを作成します。
httpd.confを編集。
NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot "C:\xampp\htdocs\symfony\web" DirectoryIndex index.php ServerName symfony.localhost <Directory "C:\xampp\htdocs\symfony\web"> AllowOverride All Allow from All </Directory> </VirtualHost> |
hostsに
127.0.0.1 symfony.localhost
以上を追加することで、
http://symfony.localhost/
でC:\xampp\htdocs\symfony\webがDocumentRootになります。
まあ、元々
http://localhost/
でC:\xampp\htdocsにアクセスできるようにしているのでこのディレクトリ構成だとセキュリティ的には全く意味がありませんが。
根本からディレクトリを分け、プロジェクト作成後に現れるwebディレクトリだけが外部公開され、それ以外のすべては外部から見えないところに隠される、という状態にすべきです。
以上でjobeetプロジェクトと、frontendアプリケーションが作成されました。
同時に開発環境も作成されます。
http://symfony.localhost/index.php
http://symfony.localhost/frontend_dev.php
というURLでそれぞれアクセスできます。
データベース等を開発環境用と本番用で分けたりするといったことができる他に、開発環境では実行したSQLや発生した例外の内容などを見ることができるようになっています。
とりあえずアクセスすると、CSSも画像も認識されず状態になっていました。
開発環境で使用する画像は何故か全然別のフォルダに入っています。
私の場合
C:\php5\pear\data\symfony\web\sf
とかいうところにありました。なんで。
sfディレクトリをwebディレクトリ内にコピペするか、シンボリックリンクで参照できるようすると、インデックスにアクセスできるようになります。
チュートリアルではhttpd.confを設定しろみたいな話になっているのですが、DocumentRootやAllowOverride等は仕方ないとして、たかがWebアプリケーションのためにわざわざhttpd.confでエイリアス設定させる思想ってどうなんですかね?
さて、上記の記事を書いたときには公式のコマンドはinit-projectだったはずなのですが、今見たらいつのまにかgenerate:projectに変わってました。
何故。
どちらを使用しても結果は同じになります。たぶん。
Symfonyの記事一覧
トラックバック
コメント
>バージョンの違いがごっちゃになってそう
それはあると思います。
最初のインストールの頃とか何がどうなっているのかさっぱりわからずにやっていたので、変なマニュアルとかよくわからない解説サイトとかを見ていたかもしれません。
ていうか、未だによくわかりません。
$formって一体何処からやってくるの?とかsfRequestRouteってそもそも何?とかそんなレベルです。
>form_tagが検索して無い
のはリファレンスのせいです。
バージョン1.2のリファレンスですが、
http://www.symfony-project.org/api/1_2/
form_tagで検索しても「There is no API documentation for "form_tag". 」となります。
http://www.symfony-project.org/api/search/1_2?search=form_tag
実際にはform_tagはFormHelperの中に存在します。
http://www.symfony-project.org/api/1_2/FormHelper
FormHelper::form_tagとパッケージ名からフルで検索すると見つかりますが、そんなの素人にはわかんねーよ、ということで。
>あと、webアプリケーションとかでエイリアス使うのって全然普通じゃないですかね??
まじですか。
実はCakeとZFくらいしか触ったこと無いのですが、どちらもDocumentRoot以外は.htaccessだけで十分だったのでそんなものだろうと思ってました。
lnだけで済むことなのに、いちいちhttpd.conf編集して再起動して、とかどうなの、と思ったのですが。
#アクセス権とかセキュリティはあんまり考えてない
form_tagが検索して無いとかgenerate:projectになっているとかもバージョンの違いじゃないですかね。
なので、各バージョンごとにドキュメントが用意されていて、それぞれ微妙に異なるので注意が必要です。(ググってでてきたブログなどの記事も同様)
バージョンの違いがごっちゃになってそうだったのでコメントしておきました。
あと、webアプリケーションとかでエイリアス使うのって全然普通じゃないですかね??