[Zend Framework] Zend_Form: Zend_Form_Element をHTML5要素に対応させる
Zend_Form_Element で使える input タグで type=”date” を使いたくて悩んだ記録です。
Zend Framework Version: 1.12.3
ZF2では普通に使えるようなのですが、ZF1ではHTML5タグが作れなかったので悩みました。
さんざん悩んだあげく、Zend_Form_Element_Text を複製して作ったという…。
他にうまい方法がありましたら、ぜひ教えて下さい。
Form_Element
下記をもとに作成します。
- /usr/local/zend/share/ZendFramework/library/Zend/Form/Element/Text.php
コメントは省略。
<?php
/** Zend_Form_Element_Xhtml */
require_once 'Zend/Form/Element/Xhtml.php';
class My_Date extends Zend_Form_Element_Xhtml
{
/**
* Default form view helper to use for rendering
* @var string
*/
public $helper = 'formDate';
}
View_Helper
ビューヘルパーを呼んでいるので、下記を元に作成します。
- /usr/local/zend/share/ZendFramework/library/Zend/View/Helper/FormText.php
コメントは省略。
<?php
require_once 'Zend/View/Helper/FormElement.php';
class Zend_View_Helper_FormDate extends Zend_View_Helper_FormElement
{
public function formDate($name, $value = null, $attribs = null)
{
$info = $this->_getInfo($name, $value, $attribs);
extract($info); // name, value, attribs, options, listsep, disable
// build the element
$disabled = '';
if ($disable) {
// disabled
$disabled = ' disabled="disabled"';
}
$xhtml = '<input type="date"'
. ' name="' . $this->view->escape($name) . '"'
. ' id="' . $this->view->escape($id) . '"'
. ' value="' . $this->view->escape($value) . '"'
. $disabled
. $this->_htmlAttribs($attribs)
. $this->getClosingBracket();
return $xhtml;
}
}
使い方
Zend_Form_Element_Text から変更した箇所は、date で呼べるように名前を変えたことと、type=”date” の部分だけです。
こんな感じで呼び出して使えました。
<?php
require_once 'My/Date.php';
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
// action body
$form = new Zend_Form();
$form->setMethod('post')->setAction('/index');
$text = new Zend_Form_Element_Text('text');
$text
->setLabel('Text');
$date = new My_Date('date');
$date
->setValue('2013-08-01')
->setLabel('Date');
Glitch というライブラリを使うと、キレイに解決するようです。