ルーティング

はじめに

Envi PHPでは基本的なルーティングルールが固定されています。

ActionControllerでRequestを受けた後、Envi::Controllerを使用して、再ルーティングできます。

これは、フロントコントローラーから、アクションコントローラーへの処理の委譲をできる限り簡素にするための措置です。 複雑なルーティングは、それだけで非常に動作を重くさせます。

Envi 3.4からは、 Routingクラスを使用して、ルーティングルールを書き換えることも出来ますが、上記の理由から、複雑なルーティングルールの記述は避けるべきです。

ルーティングルール

http://example.com/front_controller.php/exmodule/exaction.phpへアクセスした場合、

国際化が有効の場合は、 http://example.com/front_controller.php/<国key>/exmodule/exaction.php となります。
apps/<app_key>/modules/exmodule/actions/exaction.class.php

が実行されます。

もし、上記ファイルが存在しない場合は、

apps/<app_key>/modules/exmodule/actions/actions.class.php

内に、

  • <app_key>Validate()
  • <app_key>Execute()

が存在しないか確認しに行きます。 存在しない場合は、Envi404Exceptionを throw して終了します。

パスの設定は、ディレクトリ設定で変更できます。

実行時設定

基本的な振る舞いに関する設定を記述します。 URL関連で、他にも設定がある場合(たとえば、CDNや、静的コンテンツを修めたサーバー)は、要素を追加し、追記できます。

環境によるURLの切り替えは、config.php等で行うのでは無く、設定ファイルに記述するべきです。


  SYSTEM:
  ################################
  # 基本的な振る舞いに関する設定
  ################################
    default_module: "index"
    default_action: "index"
    ext: "php"
    top_url: "http://<?php echo $_SERVER["HTTP_HOST"];?>"
    ssl_top_url: "https://<?php echo $_SERVER["HTTP_HOST"];?>"
    dispatch_url: "http://<?php echo $_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];?>"
    ssl_dispatch_url: "https://<?php echo $_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];?>"
    ## 国際化設定の使用をするかどうか
    use_i18n: false
    ## defaultの国際化ファイル
    default_i18n: "ja"

名前 デフォルトの値 説明
default_module "index" 何も指定されなかったときに使用するデフォルトのモジュール
default_action "index" 指定されなかったときに使用するデフォルトのアクション
ext "php" URI内で、アクション名の後ろにつける拡張子
top_url "http://<?php echo $_SERVER["HTTP_HOST"];?>" トップページのURL
ssl_top_url "https://<?php echo $_SERVER["HTTP_HOST"];?>" SSLトップページのURL
dispatch_url "http://<?php echo $_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];?>" フロントコントローラーのURL
ssl_dispatch_url "https://<?php echo $_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];?>" フロントコントローラーのURL
use_i18n false 国際化対応するかどうか
default_i18n "ja" 国際化対応したときの、デフォルトの国

ディレクトリ設定

各種ディレクトリに関する設定を記述します。 ログの記録場所などは、ログの項目にあります。

ここで設定するのは、キャッシュ周りの設定と、ルーティングに使用するディレクトリです。


  DIRECTORY:
  ################################
  # ディレクトリに関する設定
  ################################
## `<?php $ds DIRECTORY_SEPARATOR$base realpath(__FILE__."..{$ds}apps{$ds}{$app_name}").$ds?>`

    base: "`<?php echo $base;?>`"
    ## 通常のリクエストやforwardで飛ばされるモジュール
    modules: "`<?php echo "{$base}modules{$ds}";?>`"
    ## アクションチェイン専用のディレクトリ
    chain_modules: "`<?php echo "{$base}chains{$ds}";?>`"
    templatec: "`<?php echo "{$base}data{$ds}template.c{$ds}";?>`"
    templateetc: "`<?php echo "{$base}data{$ds}template.etc{$ds}";?>`"
    cache: "`<?php echo realpath(ENVI_BASE_DIR."..{$ds}..{$ds}cache").$ds;?>`"
    config   : "`<?php echo "{$base}template_config{$ds}";?>`"
    base_templates: "`<?php echo "{$base}templates{$ds}";?>`"
    actions: "actions/"
    views: "views/"
    templates: "templates/"
名前 デフォルトの値 説明
base "{$ds}apps{$ds}{$app_name}" 基底のconfig.phpがある場所
modules "<?php echo "{$base}modules{$ds}";?>" 通常のリクエストやforwardで飛ばされるモジュール
templatec "<?php echo "{$base}data{$ds}template.c{$ds}";?>" テンプレートキャッシュ保存ディレクトリ
templateetc "<?php echo "{$base}data{$ds}template.etc{$ds}";?>" テンプレート設定ファイルの保存directory
cache "<?php echo realpath(ENVI_BASE_DIR."..{$ds}..{$ds}cache").$ds;?>" 各種キャッシュの保存場所
config "<?php echo "{$base}template_config{$ds}";?>" Renderer設定ファイルの保存directory
base_templates "<?php echo "{$base}templates{$ds}";?>" 共通テンプレートの保存場所
actions "actions/" アクションコントローラーの保存場所(modulesからの相対)
views "views/" ビューコントローラーの保存場所(modulesからの相対)
templates "templates/" テンプレートの保存場所(modulesからの相対

ルーター設定

:ルーティングの書き換えは、v3.4.0からの機能です。

ルーティングクラスを使用して、ルーティングを書き換える場合の設定です。

デフォルトでは、ルーティングはコメントアウトされており、設定は空ですが、デフォルトの動きをするRoutingクラスも用意されて居ます。


  Routing:
  ################################
  # Routingの設定
  ################################
    -
      class_name: EnviDefaultRouter
      resource: "`<?php echo ENVI_BASE_DIR."routers".DIRECTORY_SEPARATOR."EnviDefaultRouter.php";?>`"
名前 デフォルトの値 説明
class_name EnviDefaultRouter" ルーティングクラス名
resource "<?php echo ENVI_BASE_DIR."routers".DIRECTORY_SEPARATOR."EnviDefaultRouter.php";?>" ルーティングラスのファイルパス