ZF 事始 その1 「Hello World!」すら出ず
いやぁ。 「Hello World!」に苦労した。。。
CodeZine:Zend Framework入門 にかじりつきながら
先ずは「Hello World!」を、と思って始めた。
<環境>
Windows XP SP3
XAMPP 1.7.3
PHP 5.3.1
Zend Framework 1.10.6
フォルダ・ファイル構成は、以下のようにしてみた。
//公開ディレクトリ
hoge //このフォルダはネーミング自由
┗index.php//非公開ディレクトリ
zendapps //このフォルダはネーミング自由
┣ controllers
┃◇┗IndexController.php
┣ models
┗ views
◇◇┣ filters
◇◇┣ helpers
◇◇┗ scripts
◇◇◇◇┗ index //このフォルダを「Index」か「index」で迷ったがどちらでもOKみたい
◇◇◇◇◇◇┗ index.phtml
※◇は空白埋め。意味なし。
hoge/index.php
- require_once 'Zend/Controller/Front.php';
- Zend_Controller_Front::run('zendapps/controllers');
zendapps/controllers/IndexController.php
- require_once 'Zend/Controller/Action.php';
- class IndexController extends Zend_Controller_Action {
- public function indexAction() {
- echo 'Hello World!';
- }
- }
zendapps/views/scripts/index/index.phtml
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>無題ドキュメント</title>
- </head>
- <body>
- </body>
- </html>
Dreamweaver で新規作成したPHPファイルそのまま。
上記参考サイトをほぼ丸まま真似して、さぁアクセス!
http://localhost/hoge/ ポチっ!
Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in E:\XAMPP\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php:248 Stack trace: #0 E:\XAMPP\xampp\php\PEAR\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 E:\XAMPP\xampp\php\PEAR\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() #2 E:\XAMPP\xampp\htdocs\hoge\index.php(36): Zend_Controller_Front::run(‘zendapps/cont…’) #3 {main} thrown in E:\XAMPP\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php on line 248
ぐわわわわわ~ん。
おっかしいなぁ。と悩みながら、ファイルやフォルダ名の大文字小文字やら
フォルダ構成やらファイル配置やら色々と調べてみたけど異常なし。
泣きそうになりながら考えたりいじくること半日。
ふと
CodeZine:Zend Framework入門(2):Hello World!アプリケーションの作成
の
- Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
が気になり index.php に挿入してみた。
すると無事に「Hello World!」と表示された。 😎
hoge/index.php
- require_once 'Zend/Controller/Front.php';
- Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
- Zend_Controller_Front::run('zendapps/controllers');
ん~、この1行は「自動レンダリングをOFFにする」という意味のはずなのに。。。
OFFでいいの? 自動レンダリングしてくれるから便利なのかと思ってたけど。
まぁ、きっと勉強していけばこの先意味がわかるんだろうなぁ。
ということで、表示されたからひとまずこれはこれでいいことに。
さて、次は新しいページを表示。
//公開ディレクトリ
hoge
┣ .htaccess //後から追加
┗ index.php//非公開ディレクトリ
zendapps
┣ controllers
┃◇┣ IndexController.php
┃◇┗ ExampleController.php
┣ models
┗ views
◇◇┣ filters
◇◇┣ helpers
◇◇┗ scripts
◇◇◇◇┣ index
◇◇◇◇┃◇┗ index.phtml
◇◇◇◇┗ example
◇◇◇◇◇◇┗ index.phtml
zendapps/controllers/ExampleController.php
- require_once 'Zend/Controller/Action.php';
- class IndexController extends Zend_Controller_Action {
- public function indexAction() {
- echo 'Example!';
- }
- }
として
http://localhost/hoge/example/ ポチっ!
「Object not found!」 orz
あ、そうか! .htaccess の設定はしてなかったんだ。
そういうわけで、index.php と同階層に
hoge/.htaccess と配置。
- RewriteEngine on
- RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
ポチっ!
「Example!」
おおお 大成功。 😎
あまりのショボさにめげていたけど、これで何とか前へ進めそうだ。