Php 基于条件的Zend表单元素

Php 基于条件的Zend表单元素,php,zend-framework,Php,Zend Framework,我遇到了一个需要显示不同表单元素的问题 根据用户的不同情况,我知道在核心php中很容易做到,但我希望在zend环境中做到这一点 示例: 如果此人被禁用,我们将显示两个单选按钮 $disable = new Shaadi_Form_Element_radio('disablitiy'); $disableArr = array(""=>" Doesn't Matter","Y"=>" show disabled"); $disable = new Shaadi_Form_Elem

我遇到了一个需要显示不同表单元素的问题

  • 根据用户的不同情况,我知道在核心php中很容易做到,但我希望在zend环境中做到这一点
示例:

如果此人被禁用,我们将显示两个单选按钮

$disable = new Shaadi_Form_Element_radio('disablitiy');
$disableArr = array(""=>" Doesn't Matter","Y"=>" show disabled");
$disable = new Shaadi_Form_Element_radio('disablitiy');
$disableArr = array(""=>" Doesn't Matter","N"=>" do not show disabled");
如果他没有残疾

$disable = new Shaadi_Form_Element_radio('disablitiy');
$disableArr = array(""=>" Doesn't Matter","Y"=>" show disabled");
$disable = new Shaadi_Form_Element_radio('disablitiy');
$disableArr = array(""=>" Doesn't Matter","N"=>" do not show disabled");

我希望此代码以表单的形式完成如何优化此代码请帮助我

每当表单或任何对象依赖于表单外部的某些信息时,我通常在表单的构造函数中传递这些信息。然后,当我构建表单时,我将稍后在
init()
中检查它

例如:

class My_Form extends Zend_Form
{
    protected $hasDisability;

    public function __construct($hasDisability)
    {
        $this->hasDisability = (bool) $hasDisability;
        parent::__construct();
    }

    public function init()
    {
        // Add all your other elements
        // Blah, blah

        // Add the element that is dependent upon the $hasDisability value
        $disable = new Shaadi_Form_Element_radio('disablitiy');
        $disableArr = $this->hasDisability
            ? array(""=>" Doesn't Matter","Y"=>" show disabled")
            : array(""=>" Doesn't Matter","N"=>" do not show disabled");

        // Add the $disableArr into the radio element
        $disable->setMultiOptions($disableArr); 
    }
}
用法-可能在控制器中-类似于:

$form = new My_Form(true);  // for a disabled used
$form = new My_Form(false);  // for a non-disabled user

要在表单中实现元素,根据某些条件,需要通过控制器传递表单构造函数中的用户禁用选项。 您可以执行以下步骤在视图中显示单选按钮:

表格编号:

 class Application_Form_User extends Zend_Form {
        public function init() {
            $formAttribs = $this->getAttribs();
            $isDisable   = $formAttribs['disable'];

            if (!$disabled) {
               $disableArr = array(""=>" Doesn't Matter","Y"=>" show disabled");
            } else {
              $disableArr = array(""=>" Doesn't Matter","N"=>" do not show disabled");
            }

            $this->addElement('radio', 'disability', array(
                              'label' => 'Disability',
                              'required' => true,
                              'multiOptions' => $disableArr,                
            ));

        }
    }

In controller:

    public function addAction() {
        $disable = ($user->disable) ? true : false;
        $form = new Application_Form_User(array('disable' => $disable));
        $this->view->form = $form;
    }
在视图中,您可以获得如下“残疾”元素:

  <?php echo $this->form->getelement('disability'); ?>

在表单中,定义您的无线电元素:

$disable = new Shaadi_Form_Element_radio('disablitiy');
在控制器中,调用此元素并添加好的选项:

if ($disable)
    $disableArr = array(""=>" Doesn't Matter","Y"=>" show disabled");
else
    $disableArr = array(""=>" Doesn't Matter","N"=>" do not show disabled");

$form->getElement('disablitiy')->setMultiOptions($disableArr);