PHP/ZendFramework1/HelloWorld

PHP/ZendFramework1/HelloWorld

とりあえず動かしてみる

入り口を作る(フロントコントローラー)

Zend Frameworkではユーザーに公開するのは1ファイルindex.phpのみ。こいつが全リクエストを捌く。

公開するディレクトリに index.php を作成

// コンポーネントをロードする
require_once 'Zend/Controller/Front.php';
 
//自動描画モードをオフる
$front = Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
// アプリケーションを実行する
$front = Zend_Controller_Front::run('../application/controllers');

最後のrunメソッドに渡しているパスは index.php から見たアクションコントローラの入っているディレクトリの相対パス

Zendのコントローラーは通常のような

http://localhost/hoge/index.php?piyo=gegege

のようにパラメータを取らない。フロントコントローラーで全部受け取るという違和感をなくすために

http://localhost/hoge/moge/moge/piyo/gegege

のようなリクエストでプログラムを始動させる。

なのでWebサーバ側がスラッシュ区切りをディレクトリと判断しないために指定ディレクトリ以下のリクエストを全部index.phpへのリクエストと解釈させる必要がある。

.htaccessを作る

php_flag magic_quotes_gpc off

RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

RewriteBase というのはそのアプリの根っこのディレクトリを指定する。

http://localhost/hoge/index.php

にindex.phpを配置してるなら、RewriteBase は

/hoge/

Apache のデフォルトでは多分 htaccess による設定の上書きを禁止しているので httpd.conf とか Apache.conf あたりに

<Directory /var/www>
</Directory>

こんなふうに書いて中に何か書いて、htaccessによる設定の上書きを許可

アクションコントローラーを作る

フロントコントローラーはリクエストに応じてもっと細かい処理であるアクションコントローラーに処理を渡す。

何もリクエストでパラメータを渡さない場合

http://localhost/hoge/

のようなリクエストの場合はフロントコントローラーは IndexController.phpindexAction メソッドを呼び出します。なのでここにHelloWorld描画の記述を書く。

<?php
require_once 'Zend/Controller/Action.php';
require_once 'Zend/Db.php';
 
class IndexController extends Zend_Controller_Action{
    public function indexAction(){
        $view = new Zend_View();		
        $view->setScriptPath('../application/views');
        $view->hogehogehoge = 'HelloWorld';
        echo $view->render('hoge.php');
    }
}

ここで Zend_View という簡易的なテンプレートエンジンのようなオブジェクトを使う。

PHP はもともと言語仕様がテンプレートエンジン的なので単にそれをオブジェクトでラップしたものと考える。 HTML のすぐ裏に PHP のコードが透けて見えるぐらいのこの感覚。

setScriptPath メソッドで View が描画するためのコードが書いてあるソース群が配置されているディレクトリを指定。 気をつける点はアクションコントローラーは index.php に include されて動いているということ。 ここで使うパスの指定はindex.phpからの相対パスということになる。

最後に render メソッドを使って文字列として画面に出力。ここの引数が view ソース群中のファイル名になる。

画面表示するコードを書く

アクションコントローラーのViewで指定されたコード

古きPHPコード。HTMLに断片的にPHPコードが混じっているあれ。 view は単純なことしかしないのでコレで十分実用的。

<html>
<head>
<title>何か</title>
</head>
<body>
へろ〜〜わ〜るど
<?php echo $this->hogehogehoge){ ?>
</body>
</html>

ここで this キーワードを使ってコントローラーで貼り付けた変数にアクセスできる。 コントローラー裏で

$view->hogehogehoge = 'HelloWorld';

変数に突っ込んでいるので。同じ変数名でView側で取り出せる。

配置

ファイルはこんな感じで配置する

 hoge(公開ディレクトリ)
   |
   +--index.php
   |
   +--.htaccess

 application(非公開ディレクトリ)
   |
   +--controllers
   |     | 
   |     +--IndexController.php
   +--views
         |
         +--hoge.php

動かしてみる

http://localhost/hoge/

にアクセスすると HelloWorld が表示されるはず

Tags

php/zendframework1/hello_world.txt · 最終更新: 2020-02-04 13:23 by ore