尝试创建表单集合警告:为foreach()提供的参数无效

时间:2015-01-31 18:21:56

标签: forms symfony collections

我正在使用fos用户注册表单制作表单集合。我重写了我的注册表单并添加了配置文件集合,它将数据保存在数据库中,但每当我加载页面时,它都会显示此错误超过10次。

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\symfony-bootstrap\vendor\symfony\symfony\src\Symfony\Component\Validator\Mapping\Loader\AnnotationLoader.php on line 65

如果我填写表格并发送,它确实存在,但视图是一个混乱显示此错误10次,我没有看到任何人有这个错误。

这是我的registerformtype。

namespace sava\UserBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class RegistroType extends AbstractType
{
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('perfil','sava_userbundle_tblperfil');
    }

            public function getParent()
    {
        return 'fos_user_registration';
    }

    public function getName()
    {
        return 'sava_user_registration';
    }
}

这就是我的网页看起来http://prntscr.com/5zess0

验证码

<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Validator\Mapping\Loader;

use Doctrine\Common\Annotations\Reader;
use Symfony\Component\Validator\Exception\MappingException;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\GroupSequence;
use Symfony\Component\Validator\Constraints\GroupSequenceProvider;
use Symfony\Component\Validator\Constraint;

class AnnotationLoader implements LoaderInterface
{
    protected $reader;

    public function __construct(Reader $reader)
    {
        $this->reader = $reader;
    }

    /**
     * {@inheritdoc}
     */
    public function loadClassMetadata(ClassMetadata $metadata)
    {
        $reflClass = $metadata->getReflectionClass();
        $className = $reflClass->name;
        $loaded = false;

        foreach ($this->reader->getClassAnnotations($reflClass) as $constraint) {
            if ($constraint instanceof GroupSequence) {
                $metadata->setGroupSequence($constraint->groups);
            } elseif ($constraint instanceof GroupSequenceProvider) {
                $metadata->setGroupSequenceProvider(true);
            } elseif ($constraint instanceof Constraint) {
                $metadata->addConstraint($constraint);
            }

            $loaded = true;
        }

        foreach ($reflClass->getProperties() as $property) {
            if ($property->getDeclaringClass()->name == $className) {
                foreach ($this->reader->getPropertyAnnotations($property) as $constraint) {
                    if ($constraint instanceof Constraint) {
                        $metadata->addPropertyConstraint($property->name, $constraint);
                    }

                    $loaded = true;
                }
            }
        }

        foreach ($reflClass->getMethods() as $method) {
            if ($method->getDeclaringClass()->name ==  $className) {
                foreach ($this->reader->getMethodAnnotations($method) as $constraint) {
                    if ($constraint instanceof Constraint) {
                        if (preg_match('/^(get|is)(.+)$/i', $method->name, $matches)) {
                            $metadata->addGetterConstraint(lcfirst($matches[2]), $constraint);
                        } else {
                            throw new MappingException(sprintf('The constraint on "%s::%s" cannot be added. Constraints can only be added on methods beginning with "get" or "is".', $className, $method->name));
                        }
                    }

                    $loaded = true;
                }
            }
        }

        return $loaded;
    }
}

2 个答案:

答案 0 :(得分:0)

如果第65行== foreach($ this-&gt; reader-&gt; getMethodAnnotations($ method)为$ constraint)...

chceck $ this-&gt; reader-&gt; getMethodAnnotations($ method)

例如

print_r('===><pre>');
print_r($this->reader->getMethodAnnotations($method));
print_r('</pre>');

我认为,$ this-&gt; reader-&gt; getMethodAnnotations($ method)不是数组

答案 1 :(得分:-1)

在symfony 5中 运行作曲家需要教义/注释,它将解决此问题