そこでZend_Validate_Callback を利用する事により、解決する事を発見。
下記のようにformファイル内で実装する。
class Default_Form_Foo extends Zend_Form
{
public function init()
{
$this->addElementPrefixPath('Default_Plugin_Validate_' , '/foo/Validate' , 'validate');
$this->addElementPrefixPath('Default_Plugin_Filter_' , '/foo/Filter' , 'filter');
$element = new Zend_Form_Element_Radio('mode');
$element
->setRequired(true)
->setMultiOptions(array(
'foo1' => 'bar1',
'foo2' => 'bar2',
))
->setFilters(array(
'StringTrim',
))
->setValidators(array(
array (
'breakChainOnFailure' => true,
'validator' => 'Callback',
'options' => array(array($this, 'targetNotEmpty'))
),
))
->setDecorators(array(
array('ViewHelper', array()),
array('Description', array('tag'=>'div')),
array('Errors', array('class'=>'Errors')),
));
$this->addElement($element);
}
public function targetNotEmpty($value, $context)
{
$newsMode = $this->getMaster()->getNewsMode('key');
$valid = new Zend_Validate_NotEmpty();
if ($value == $newsMode['summary']) {
if (!$valid->isValid($context['summary'])) {
$this->getElement('summary')->addError('未入力です。');
}
}
elseif ($value == $newsMode['link_url']) {
if (!$valid->isValid($context['link_url'])) {
$this->getElement('link_url')->addError('未入力です。');
}
}
return true;
}
}
0 件のコメント:
コメントを投稿