主に IT 技術を整理するためにメモ的に書き溜めています。少しだけフリーソフトもあるよ。コメントを残すには、 facebook を使ってください。

カスタム Zend_Form_Element の作成

最終更新日 2009-05-27 17:28:54 (1年以上前の記事です)

Zend_Form を使ってよく Wysiwyg の出力コードを生成するようなカスタムエレメントを生成したいことがよくある。
昔のバージョンでは Zend_View クラスの addHelperPath() をしただけだった記憶があったんだけど、今は少し違うっぽい。
なので一通り調べて実装しなおしてみた時のメモ。

Zend Frameowrk のバージョンは 1.8.1。
ディレクトリ構成は以下の通り。

+--- application ---+--- controllers
|                   +--- modles
|                   +--- forms --- elements
|                   +--- layouts
|                   +--- views ---+--- helpers
|                                 +--- scripts
|
+--- incude --- Zend
|
+--- public_html

Form Element の作成

application/forms/elements の下に Wysiwyg.php というファイル名で以下のファイルを作成する。

<?php
require_once 'Zend/Form/Element/Xhtml.php';

class Zend_Form_Element_Wysiwyg extends Zend_Form_Element_Xhtml
{
    public $helper = 'formWysiwyg';
}
?>

ここでは、単純に使用する Helper クラスの名前を指定するだけのシンプルなものにしておく。

Helper の作成

次に application/views/helpers の下に FormWysiwyg.php というファイル名で以下のファイルを作成する。

<?php
require_once 'Zend/View/Helper/FormElement.php';

class Zend_View_Helper_FormWysiwyg extends Zend_View_Helper_FormElement
{
    public function formWysiwyg($name, $value = null, $attribs = null)
    {
		$xhtml = "ここに Wysiwyg を出力 JavaScript などを書く。値は$valueでわたされる。";
		return $xhtml;
	}
}
?&ht;

View Renderer の構築

上記で Helper クラスを作成しので、 View Renderer がこのパスに気がつくように、 bootstrap などに以下のようなコードを追加してやる。

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->initView();
$viewRenderer->view->addHelperPath('application/views/helpers', 'Zend_View_Helper');

addHelperPath の第一引数がパスで、台に引数はクラス名のプリフェックスを指定する。
例えば作成した Helper クラスの名前が、 Enjoi_View_Helper_FormWysiwyg であれば、 Enjoi_View_Helper を指定する必要がある。

Zend_Form サブクラスの設定

最後に実際に作成したカスタムフォームエレメントを使用する Zend_Form のサブクラスを実装する。
実装すると言ってもここでは、作成したエレメントクラスが自動的に認識されるように PluginLoader の設定をするだけ。

$loader = new Zend_Loader_PluginLoader();
$loader->addPrefixPath('Zend_Form_Element', 'application/forms/elements/')
	->addPrefixPath('Zend_Form_Element', 'Zend/Form/Element/');
$this->setPluginLoader($loader, Zend_Form::ELEMENT);

これで、 Zend_Form は Zend_Form_Element を検索しに application/forms/elements/ と Zend/Form/Element/ を確認する。
また、 addPrefixPath の第一引数は、は先ほどの addHelperPath 同様、プレフィックスを指定している。

ここまでできたら、後は以下のようにエレメントが作成できるようになってるはず。

$this->addElement('wysiwyg', 'content_main', array(
	'label' => 'Main Content',
	'description' => 'hoge hoge',
	'validators' => $validators,
	'filters' => $filters,
	'required' => true,
));
最終更新日 2009-05-27 17:28:54

コメント このエントリーをはてなブックマークに追加

フリーソフトウエア
EnjoiFLV
EnjoiPacket
EnjoiCrypto
ランキング
rank2, rank3, rank7, rank10, rank11
todo メモ
facebook 対応
ページ処理
RSS feed
検索機能
認証いる?
更新日表示
実はカテゴリ機能
多言語
実はユーザ機能
ソースその内公開
動作環境メモ
php-5.1.6 with PDO
SQLite-3.3
IE6
FireFox-1.5
RSS
非認証

検索
Google