Configurator_AppRootプラグイン
(Piece_Unity >= 0.12.0)
概要
Webから見えるアプリケーションのドキュメントツリーのトップとなるディレクトリとURIのパスを設定するためのコンフィギュレータ
コンポーネント
説明
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
