Macで作るPHPの開発環境(ZendFramework) [mac]
かなり昔、勉強会用にZendFrameworkについて書いたけど、
知らない間に1.0がリリースされて結構かわったみたいなので、
Macで開発環境を作ったついでにZendFrameworkを動かしてみる。
ZendFrameworkについて
一度いろいろ調べたけど、改めておさらい。
- PHP5専用
- MVCモデル
- PHPを作っている会社が作っている
Zend Core(2.0〜)に入ってる。Zend Studio(5.5〜)にも対応。 - 拡張しやすい(らしい)
- symfonyやcakeのような、コードの自動生成はない
- PDOに対応(でも Oracleへの対応は微妙らしい・・)
- 日本語ドキュメントが豊富
- 書籍も出たらしい(読んでないけど・・)
インストール
まず、ダウンロードにする前に、受け元のディレクトリを作っておく。
自分の場合は↓な感じで作成。
htdocs/ php_include/ controllers/ models/ views/ filters/ helpers/ scripts/ library/ Zend/
受け元を作ったら、次は公式サイトからダウンロード。
なお、最新版は2007/09/24時点で 1.0.1。
http://framework.zend.com/download
ダウンロードしたら解凍する。
解凍後「library/Zend」の中身を、受け元の「library/Zend」配下にコピーする。
Apacheの設定
Apacheのhttpd.confに以下の記述のコメントを外す。無ければ追加。
LoadModule rewrite_module modules/mod_rewrite.so DirectoryIndex index.php index.html index.html.var AccessFileName .htaccess <Directory "/Applications/MAMP/ZendFramework/htdocs"> Options Indexes FollowSymLinks AllowOverride FileInfo Options </Directory>
VirtualHostを使うので、ついでに以下の内容も設定。
NameVirtualHost *:80 <VirtualHost *:80> ServerName hoge.co.jp DocumentRoot "/Applications/MAMP/ZendFramework/htdocs" php_value include_path ".:/Applications/MAMP/ZendFramework/php_include/libraly/" </VirtualHost>
※ホストを「hoge.co.jp」として、受け元ディレクトリが
「/Applications/MAMP/ZendFramework/」配下に作られた場合の設定。
ホスト名は「/etc/hosts」にローカルとして追加しておくこと。
次に「htdocs」配下に「.htaccess」ファイルを作成する。
最低限の記述例は以下の通り。
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
設定が終わったらApacheの再起動を行う。
動かしてみる
とりあえずベタに「Hello, World!」を出してみる。
まず、起動元となる「index.php」を作る。作る場所はドキュメントルートの下。
【index.php】 <?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run(' /Applications/MAMP/ZendFramework/php_include/controllers'); ?>
ここでrunしているパスは絶対パスじゃないと動かなかったので注意。
※include_pathを通してもダメだった。
→追記:カレントからの相対パスは大丈夫だった。
例)「../php_include/controllers」
include_pathがダメなのかなぁ・・
次にメインコントローラの「IndexController.php」を作る。
パスが指定されない場合は、必ずこのコントローラが呼ばれる。
作る場所は、「php_include/controllers」の下。
【IndexController.php】 <?php require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { /*アクション*/ public function indexAction() { echo "Hello, World!"; } } ?>
昔は require_once じゃなく Zend::loadClass を使っていたけど、
何故か使えなくなっていた。公式も require_once 使うように変わっているし、
仕様が変わったのかな・・・
最後にテンプレートを作成。昔はテンプレートなくても動いていた気がしたけど、
今回はテンプレートないと動かなかった。
作る場所は「php_include/views/scripts/」配下。
作るファイルは「index/index.phtml」。拡張子は「phtml」でないとダメっぽ。
ちなみにファイルがあれば中身は空でも動くので、今回は空ファイルを作成。
ここまで終わったら、「http://hoge.co.jp(注:localhost)」にアクセスすれば、
画面に「Hello, World!」が表示されるハズ。
おまけ
「Hello, World!」を出力するだけなのに何気に半日くらいハマれたので、
参考までにその時のエラーメッセージと対処方を書いておきまふ。
【エラー】
Fatal error: Cannot access protected property Zend_Controller_Front::$_instance in
/(略)/php_include/library/Zend/Controller/Front.php on line 162
【対処方】
MAMPのeAcceleratorが悪さをしていた模様。相性が悪い?
php.iniのeAcceleratorの設定をコメント化するなどして止めたら解決。
【エラー】
Class 'Zend' not found in
/(略)/php_include/controllers/IndexController.php on line 2
【対処方】
「Zend::loadClass()」が使えなかった事で発生したエラー。
「requrei_once」に変えたら解決。
【エラー】
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception'
with message 'Invalid controller specified (error)' in
/(略)/php_include/library/Zend/Controller/Dispatcher/Standard.php:193
Stack trace: #0
/(略)/php_include/library/Zend/Controller/Front.php(911):
Zend_Controller_Dispatcher_Standard->dispatch(
Object(Zend_Controller_Request_Http),
Object(Zend_Controller_Response_Http)) #1
/(略)/php_include/library/Zend/Controller/Front.php(224):
Zend_Controller_Front->dispatch() #2
/(略)/htdocs/index.php(3):
Zend_Controller_Front::run('controllers') #3
{main} thrown in /(略)/php_include/library/Zend/
Controller/Dispatcher/Standard.php on line 193
【対処方】
requestを調べたところ、「views/scripts/index/index.phtml」を開こうとして、
ファイルが無いというエラーを返していた。
「views/scripts/index/index.phtml」を作成したら解決。
疲れたので、他の機能についてはまた今度。。。








3つめのエラーで私もはまりました。。
フレームワークのインストール失敗とかいろいろ疑ってましたけど、
viewsのディレクトリ名が間違ってました(´Д⊂ヽ
ありがとうございますw
by syamo (2009-09-05 23:50)