ここでは、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)/・・・