CakePHP-ja tumblr

Dec 26 2009

拡張子に応じてビューを変える

年末進行やべーな。
年末年始の休みを生かして仕事を進めるという前向きの姿勢で取り組んでおります。

Router::connect( '/:controller/:action.:extension' );

と言うような場合に extension の内容に応じてビューファイルを切り替えて欲しいようなケースありますよね。
そういう場合はコンポーネントの beforeRender() とかに拡張子判別の処理を加えておくと簡単です。

class PdfComponent extends Component {
	var $__extension = 'pdf';

	function beforeRender( &$Controller ){
		if( isset( $Controller->params['extension'] ) && $Controller->params['extension'] === $this->__extension ){
			$Controller->layout = $this->__extension;
			$Controller->viewPath = $Controller->viewPath.DS.$this->__extension;
		}
		return parent::beforeRender( &$Controller );
	}
}

上記例は拡張子が .pdf だった場合に PDF 用のビューファイルを読み込むコンポーネントです。
これでレイアウトとビューファイルのディレクトリが拡張子(pdf)のものに変わります。いちいちアクション増やさなくていいので便利ですね。

Page 1 of 1