So-net無料ブログ作成
検索選択

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」を作成したら解決。



疲れたので、他の機能についてはまた今度。。。


nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

syamo

3つめのエラーで私もはまりました。。
フレームワークのインストール失敗とかいろいろ疑ってましたけど、
viewsのディレクトリ名が間違ってました(´Д⊂ヽ

ありがとうございますw

by syamo (2009-09-05 23:50) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

関連リンク

メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。