[ ZendFramework1 ] 標準のルータ: URLとモジュール コントローラ アクションの関係

Pocket

ここでは、Zend Framework における標準のルータ ( Zend_Controller_Router_Rewrite ) の動作(URL とモジュール、コントローラ、アクションの紐付き)について 掲載しています。

スポンサーリンク

rewrite モジュールを有効にしてすべてを index.php に集約する

ZendFramework1 では rewrite モジュールを有効にし、すべてのリクエストを index.php に集約し、URL に応じて処理を割り振ります。

index.php への集約条件は以下のように .htaccess ファイルに記述します(http.conf でも可能)。 なお、.htaccess ファイルは index.php と同一フォルダに配置することが多いと思います。

.htaccess ( Zend Framework の推奨設定 )

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

上記は、ドキュメントルート配下に実際に存在するファイル以外はすべて index.php にリクエストを集約する設定となります。

index.php の処理内容

Zend_Tool コマンドで Zend プロジェクトを作成した場合の index.php は次の通りです。(多くの場合、このファイルを編集せず、そのまま使用することができると思います)

// アプリケーションディレクトリパスの定義
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// 環境変数:APPLICATION_ENV の定義
// .htaccess などに 『SetEnv APPLICATION_ENV development』のように定義可能
// 設定されていない場合はデフォルトで production を定義する
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// ライブラリディレクトリを include_path に追加する
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// ブートストラップを起動し、アプリケーションを開始する
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

デフォルトのルータ(Zend_Controller_Router_Rewrite)

index.php に集約されたリクエストは、デフォルトのルータ(Zend_Controller_Router_Rewrite)によって、URI を以下のように解釈して各アクションを実行します。

default モジュールのみの場合http://(host)/(コントローラ名)/(アクション名)/
モジュールが複数ある場合http://(host)/(モジュール名)/(コントローラ名)/(アクション名)

※ 存在しないモジュールに対して要求があった場合は default モジュールに割り当てられモジュール名が コントローラ名として解釈される

パラメータ

モジュールの有無にかかわらず、アクション名以降に続く URI はパラメータとして扱われます。

http://(host)/(コントローラ名)/(アクション名)/(キー1)/(値1)/(キー2)/(値2)/・・・

 

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>