首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用$form-> when () Zend Framework 3时,为第773行中的foreach()在\zendframework\zend-form\src\Form.php中提供的无效参数

当使用$form-> when () Zend Framework 3时,为第773行中的foreach()在\zendframework\zend-form\src\Form.php中提供的无效参数
EN

Stack Overflow用户
提问于 2017-06-01 08:00:47
回答 1查看 319关注 0票数 0

我是新手ZF3

我已经完成了搜索表单并使用zend 3实现了自动完成建议,但是我得到了一个错误消息warning : in Invalid argument supplied for foreach() in \zendframework\zend-form\src\Form.php on line 773

然后,我确实删除了$form->prepare();,并且消息错误不会出现,但是一旦单击并验证了该按钮,则错误消息返回

我的addkelas.phtml

代码语言:javascript
复制
<?php
$form->setAttribute('action',$this->url('kelasbimbingan',['action'=>'addkelas']));
$form->prepare();
echo $this->form()->openTag($form);
?>
<p>Type students names:</p>
<div id="prefetch">
<?= $this->formElement($form->get('nama')); ?>
</div>
<br>
<div>
<?php
    echo $this->formSubmit($form->get('submit'))."<br>";
    echo $this->form()->closeTag();
?>
</div>
<?php
echo "<script language='javascript'> var country_list =".$data.";</script>";
$this->headScript()
    ->appendFile('/js/typeahead.bundle.js', 'text/javascript')
    ->appendFile('/js/bloodhound.js', 'text/javascript')
    ->appendFile('/js/autocompletejavascript.js', 'text/javascript');
?>

我的addkelasAction()

代码语言:javascript
复制
public function addkelasAction()
    {
        $form = new CarimahasiswaForm();

        $data = \Zend\Json\Json::encode($this->getMahasiswaData());

        if ($this->getRequest()->isPost()) {
            //get data, fill in the form with POST data
            // Fill in the form with POST data
            $dataMahasiswa = $this->params()->fromPost();
            $form->setData($dataMahasiswa);
            //validate form
            // print_r($data);
            if($form->isValid()){
                $dataMahasiswa = $form->getData();
                print_r($dataMahasiswa);
            }
        }

        return new ViewModel(['form'=>$form,'data'=>$data]);
    }

还有我的表格

代码语言:javascript
复制
<?php

namespace Skripsiku\Form;

use Zend\Form\Form;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilter;
use Zend\Form\Element;


class CarimahasiswaForm extends Form
{
    public function __construct()
    {
        parent::__construct('tambah-kelas');

        $this->getElements();

        $this->add([
            'name'=>'submit',
            'type'=>'submit',
            'attributes'=>[
                'value'=>'Cari Mahasiswa',
                'id'=>'SaveButton',
                'class'=>'btn btn-info btn-md',
            ],
        ]);
    }

    public function getElements()
    {
        $this->add([
            'name'=>'nama',
            'type'=>'text',
            'attributes'=>[
                'placeholder'=>'Ketik Nama Mahasiswa',
                'class'=>'typeahead',
            ],
            'options'=>[
                'label'=>'Cari Mahasiswa :',
            ]
        ]);

    }

    private function addInputFilter() 
    {
        // Create main input filter
        $inputFilter = new InputFilter();        
        $this->setInputFilter($inputFilter);

        $inputFilter->add([
                'name' => 'nama',
                'required' => true,
                'filters'  => [
                    ['name' => 'StringTrim'],                    
                    ['name' => 'StripTags'],                    
                ], 
                'validators' => [
                    [
                        'name'    => 'StringLength',
                        'options' => [
                            'encoding' => 'UTF-8',
                            'min'      => 5,
                            'max'      => 255,
                        ],
                    ],
                ],
            ]);     
    }   
}

?>

请建议..。对不起我的英语不好..。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-02 07:59:54

Zend扩展了声明一个getElements函数的字段集

代码语言:javascript
复制
public function getElements()
{
    return $this->elements;
}

抛出异常/错误的行试图循环遍历从以下位置检索的值:

代码语言:javascript
复制
 $elements = $fieldset->getElements();

您可能认为$fieldset != $this在给定的上下文中,但是zend 处理类似于字段集的窗体。

代码语言:javascript
复制
$this->attachInputFilterDefaults($this->filter, $this);

解决方案:不要覆盖getElements函数,要么将当前函数重命名,要么将该代码添加到构造函数中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44301813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档