2013年2月18日月曜日

Zend Framework を Ubuntuで使う

タイトルの通りです.

今までwebアプリケーションを作る際に,フレームワークというものを利用したことがなかったので,今回初めて挑戦してみました.

お試しとして,PHPのフレームワークでやろうと思ったので,その中でも(おそらく)一番有名なZend Frameworkを使ってみました.


  1. 環境
    • Ubuntu 12.04 LTS
    • apache 2.2.22
    • PHP 5.3.10
    • ZendFramework-1.12.1
  2. 参考にしたサイト



それでは始めます.

とりあえずフレームワーク本体を入手する.

まずはソースコードを入手します.
ここから最新版(現在は2.1)もしくは1.12を取得します.
おそらくtar.gz形式なので
$ tar zxvf Zend~.tar.gz
とコマンドを使って解凍します.
これを好きなところへ保存し置きます.
どこがいいんだろう?/var/の下?それともホームディレクトリ?よくわからないのでお好きなように.
ただし,保存した場所までのパスは覚えておいてください.次はそこへのパスを通します.

パスを通す

ソースの取得が終われば今度はパスを通します.
/etc/php5/apache2/php.ini
を編集します.
おそらく789行目のあたりに
; UNIX: "/path1:/path2"
include_path = ".:/usr/share/php:
と記述された部分があるので,そこに先ほど保存したソースコードの中にあるlibraryへのパスを書き込みます.
その際に,incldue_path = ...の部分はコメントアウトされているのでコメントアウトを外しておいてください.

apacheの設定をいじる

次にapacheの設定を変更します.

  • モジュールを有効にする
  • 作るディレクトリの設定を.htaccessで変更できるようにする
この二つです.
まずは
sudo a2enmod rewrite
とやってURL変換のためのモジュールを有効にします. ここでいったんapacheをリスタートさせておくと安心です.
次に
/etc/apache2/sites-avaivable/
の中にあるファイルを変更します.今利用している設定ファイル(おそらくdefault)をコピーします(名前はhoge).
そこにこれから作る予定のディレクトリについての以下の設定を追加します.
<directory /web_dir/hoge>
    AllowOverride All
</directory>
これでOKです.ディレクトリのパスなんかは適宜変更してください.
でまたapacheの再起動を行います.

hello worldアプリを作る

やっとみなさんお待ちかねのアプリ制作です.

まずはディレクトリを作りましょう.


  • application(controller,model,viewなど実際にはアクセスされないものをしまっておく場所)
  • html(フロントコントローラなど実際にアクセスされる部分)
htmlにはindex.php,.htaccessを作成します.
それぞれの中は
index.php
<?php
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('../application/controllers');//ここのパスは適宜変更
.htaccess
php_flag magic_quotes_gpc off

RewriteEngine on
RewriteBase /hoge/html/
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
このようになっています. .htaccessの最初の行を付けないチュートリアルもあるのですが,これがないとサーバーがスラッシュをディレクトリの切れ目と判断してしまうので困ったことになります.
これでいわゆるフロントコントローラは完成です.

次にapplicationのほうに行きましょう
作るディレクトリはcontrollers, views, modelsです.
controllersにはとりあえずIndexController.phpを作成します.
中身はこんな感じです.

IndexController.php
<?php
require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
    }  //不要な場合は、メソッドの中は空でも構いません
    public function helloAction()  //helloアクションメソッド
    {
      $req = $this->getRequest();
      $this->view->assign('name', $req->getPost('yourname'));
    }

}
ここら辺から大文字小文字にも気を付けてください.これを間違えるとかなりハマります.
これでコントローラは完成です.
次にviewを作成します.コントローラ/アクションごとに,対応するビューである「views/scripts/<コントローラ名>/<アクション名>.phtml」というファイルを作成します.
注意してほしいのは,コントローラ名は大文字で始まりますが,viewのためのコントローラ名がついたディレクトリは小文字で始まることです.
今回作るのはindexActionのためのindex.phtmlとhelloActionのためのhello.phtmlです.
それぞれは
index.phtml
<html>
<head>
<title>Hello World!</title>
</head>
<body>
こんにちは!<br />
お名前をどうぞ。<br />

<form action="Index/hello" method="post">
<?php echo $this->formText('yourname','your name')?>
<?php echo $this->formSubmit('','Go')?>
</form>

</body>
</html>
hello.phtml
<html>
<head>
<title>Hello World!</title>
</head>
<body>

こんにちは、
<?php echo $this->escape($this->name); ?>
さん!
<br />

</body>
</html>
こんな感じです.実際に動かしてみてきちんと動作したら完了です.