<< Piece_Unityユーザーズマニュアル

Configurator_AppRootプラグイン

(Piece_Unity >= 0.12.0)

概要

Webから見えるアプリケーションのドキュメントツリーのトップとなるディレクトリとURIのパスを設定するためのコンフィギュレータ

コンポーネント

Piece_Unity

説明

void invoke (void)

このプラグインは、Web上に公開されるアプリケーションのドキュメントツリーの位置を、ファイルシステムのディレクトリとURIの相対パスを使って指し示すために使われます。このプラグインによって、設定中の相対パスの開始位置の固定と、HTML内で使われる、エントリポイント、CSS, 画像といったリソースへのパスの抽象化を実現できます。

拡張ポイント

拡張ポイントはありません。

設定ポイント

appRoot

(Piece_Unity >= 0.12.0)

概要

Webから見えるアプリケーションのドキュメントツリーのトップとなるディレクトリ

デフォルト値

null

説明

この設定ポイントにディレクトリのパスが設定されると、このプラグインはそのディレクトリに対するchdir()を実行します。

設定ファイル(piece-unity-config.yaml)やダイナミックコンフィグレーションでは、設定値として多数のディレクトリが用いられます。これらのディレクトリには、アプリケーションの設定を抽象化しポータビリティを高めるために、エントリポイントからの相対パスが使われる場合があります。しかし、アプリケーションが同一ディレクトリ階層のエントリポイントのみで構成されていない場合、この設定は無意味になってしまいます。結果としてディレクトリのパスのみが異なる設定ファイルを別のディレクトリに配置しなければ、この問題は解決できませんでした。

Webから見えるアプリケーションのドキュメントツリーのトップとなるディレクトリが/data/www/myapp/web/htdocsの場合の例を示します。下記は、設定ファイルの一部です。

- name: Renderer_Flexy
  point:
    - name: useLayout
      type: configuration
      value: true
    - name: layoutView
      type: configuration
      value: Layout_Layout
    - name: templateDir
      type: configuration
      value: ../webapp/templates
    - name: compileDir
      type: configuration
      value: ../webapp/compiled-templates

上記の設定ファイルには、htdocsディレクトリの階層にあるエントリポイントからの相対パスが記述されています。エントリポイントhtdocs/foo.phpの場合は、テンプレートディレクトリ../webapp/templates/data/www/myapp/web/webapp/templatesを指し示します。しかし、エントリポイントhtdocs/bar/baz.phpの場合は、../webapp/templates/data/www/myapp/web/htdocs/templatesと誤ったディレクトリを指し示してしまい、HTMLレンダリングが失敗します。これは明らかに望まれている動作ではありません。下記は、appRootを使うことでこの問題を解決するための設定です。

- name: Configurator_AppRoot
  point:
    - name: appRoot
      type: configuration
      value: /data/www/myapp/web/htdocs

この設定によって、アプリケーションのカレントディレクトリは/data/www/myapp/web/htdocsとなり、設定中の相対パスの位置が固定されることで、複数階層のエントリポイントで構成されるアプリケーションを作成することができるようになります。

さらに、エントリポイントによるダイナミックコンフィグレーションを使うことで、相対パスによってappRootを設定することができます。

htdocs/bar/baz.php:

<?php
$unity = &new Piece_Unity("$base/config", "$base/cache");
$unity->setConfiguration('Configurator_AppRoot', 'appRoot', dirname(__FILE__) . '/..');
?>

設定中の相対パスの開始位置にあるエントリポイントに対しては、上記のダイナミックコンフィグレーションによる設定は必要ありません。

appRootPath

(Piece_Unity >= 0.12.0)

概要

Webから見えるアプリケーションのドキュメントツリーのトップからの相対URI

デフォルト値

null

説明

この設定ポイントに設定されたURIは、ビルトインビューエレメント__appRootPathとして使うことができます。これによって、異なるURI階層から同一のHTMLレイアウトを参照することができるようになります。

<link rel="stylesheet" type="text/css" href="{__appRootPath}/css/default.css" media="screen,projection" />

この相対URIが/の場合は、この設定ポイントを使う必要はありません。ただし、その場合でもテンプレート中に__appRootPathを使うことを推奨します。

ソースコード

Piece/Unity/Plugin/Configurator/AppRoot.php


<< Piece_Unityユーザーズマニュアル