как вызвать базу данных из форм Zend Framework в php - PullRequest
0 голосов
/ 31 января 2012

У меня есть следующий скрипт php, теперь я хочу поместить его скрипт в формы zend. Вот мой код: -

$parents = array();
$childs = array();
foreach ($this->Tagkey as $aResultDataValue) {
        $parents [$aResultDataValue['parent']] = $aResultDataValue['parent'];
        $childs [$aResultDataValue['parent']][] = $aResultDataValue['child'];
}

foreach ($parents as $parent) {
     echo '<div>';
     $parent_value = "'$parent'";
     echo '<div><input type="checkbox" name="parents[]" value="'.$parent.'" id="'.$parent.'" class="parentCheck"/>
     <label for="parents_'.$parent.'">'.$parent.'</label></div>';
         foreach ($childs[$parent] as $child) {
           $child_value = "'$child'";
               echo '<div style="margin-left:15px;"><input type="checkbox" name="childs[]" value="'.$child.'" id="childs_'.$child.'" class="child_'.$parent.'" onclick="checkParent('.$parent_value.','.$child_value.');"/>
              <label for="childs_'.$child.'">'.$child.'</label></div>';
     }
     echo '</div>';
} 

Теперь я собираюсь использовать этот скрипт чистого php в форме zend, чтоя пытаюсь здесь: -

класс Admin_Form_Users расширяет Zend_Form {

public function init()
{   

   $parents = array();
      $childs = array();

      foreach ($this->Tagkey as $result) {
        $parents [$result['parent']] = $result['parent'];
        $childs [$result['parent']][] = $result['child'];
        }

       foreach ($parents as $parent) {

       $subForm = new Zend_SubForm();
       $subForm->addElement($parent);

       foreach ($children as $child) {
           $subForm->addElement($child);
       }

       $form->addSubForm($subForm);
    }      


        $parent = new Zend_Form_SubForm();
        $parent->addElements(array(
            new Zend_Form_Element_MultiCheckbox('subscriptions', array(
                'label'        =>
                    'Which parent would you like to subscribe to?',
                'multiOptions' => $parents,
                'required'     => true,
                'filters'      => array('StringTrim'),
                'validators'   => array(
                    array('InArray',
                          false,
                          array(array_keys($parents)))
                )
            )),
        ));

        $child = new Zend_Form_SubForm();
        $child->addElements(array(
            new Zend_Form_Element_MultiCheckbox('subscriptions', array(
                'label'        =>
                    'Which child would you like to subscribe to?',
                'multiOptions' => $childs,
                'required'     => true,
                'filters'      => array('StringTrim'),
                'validators'   => array(
                    array('InArray',
                          false,
                          array(array_keys($childs)))
                )
            )),
        ));


         $this->addSubForms(array(

        '$child' => $child,
        'parent' => $parent
    ));

Я получил ошибку

Warning: Invalid argument supplied for foreach() in /var/www/dashboard_campaign/application/modules/admin/forms/Users.php on line 19

означает здесь: - foreach ($this->Tagkey as $aResultDataValue) {

Tagkey исходит из модели базы данных

что я могу сделать, я newbie в рамках Zend Framework, что я делаю неправильно, помогите мне

Ответы [ 2 ]

1 голос
/ 31 января 2012

$TagKey не является членом Zend_Form, и я не вижу, куда он добавляется.

Вы можете либо передать модель, из которой поступил TagKey, в конструктор формы, либо в методе init() формы вам нужно создать экземпляр модели и получить переменную TagKey.

Вот как вы можете получить его из контроллера в объект формы.

public function editAction()
{
    $tags = new Campaign_Model_DbTable_Tag();
    $aResultData = $tags->getTagkey();
    $this->view->Tagkey = $aResultData;

    $form = new Admin_Form_Users($aResultData);

    if ($this->getRequest()->isPost()) {
        if ($form->isValid($this->getRequest()->getPost())) {
            // valid
        } else { 
            // errors 
        }
    }
}

Затем добавьте конструктор в вашу форму.

// Admin_Form_Model
public function __construct($tagKey)
{   
    $this->tagKey = $tagKey;

    parent::__construct(); // you must call this last as it calls init()
}
0 голосов
/ 31 января 2012

ваша проблема простая ошибка:

вы установили переменную $childs = array();
затем назвал это как $ детей :

foreach ($children as $child) {
           $subForm->addElement($child);
       }

это может быть не единственная ошибка в этом скрипте, но это ошибка, с которой связано сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...