我正在尝试在 Symfony2 中上传多个文件。我正在尝试访问以下请求对象,但无法获取参数属性。如何将文件一一上传。
我得到的错误:
致命错误:无法访问第 66 行 /var/www/File/src/Webmuch/FileBundle/Entity/File.php 中受保护的属性 Symfony\Component\HttpFoundation\FileBag::$parameters
请求对象:
Symfony\Component\HttpFoundation\FileBag Object
(
[parameters:protected] => Array
(
[file] => Array
(
[0] => Symfony\Component\HttpFoundation\File\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => FLB1.jpg
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/jpeg
[size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 13584
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[pathName:SplFileInfo:private] => /tmp/phpzdaQgW
[fileName:SplFileInfo:private] => phpzdaQgW
)
[1] => Symfony\Component\HttpFoundation\File\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => FLB2.gif
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/gif
[size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 5193
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[pathName:SplFileInfo:private] => /tmp/phpNUXho7
[fileName:SplFileInfo:private] => phpNUXho7
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
请帮我弄清楚这个对象的访问。另外如果有人有更好的方法在 Symfony2 中上传文件。
我想向大多数字段添加样式表类属性,但不是全部。
公共函数 buildForm(FormBuilder $builder, array $options)
{
$builder
->add('name_short', null, ['attr' => ['class' => 'rtl']] )
->添加('name_long')
->添加('个人资料教育')
->添加('个人资料工作')
->添加('个人资料政治')
->添加('推特')
->添加('脸书')
->添加('网站')
;
}
['attr' => ['class' => 'rtl']]有没有比向每个字段添加属性更简单的方法?寻找类似循环字段并在将字段添加到构建器后设置属性的内容。
感谢您的指点。
我想对自定义的验证进行单元测试FormTypeInterface。
我有一个自定义表单类型设置如下:
class HiddenFieldType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text', [
'constraints' => [
new NotBlank([
'message' => 'hiddenfield-invalid'
])
]
]);
}
public function getName()
{
return 'hiddenfield';
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过实例化表单对象来测试约束是否成立。从Symfony 文档中,我想出了这个:
public function testValidation()
{
$formData = [
'name' => null // blank value
];
$hiddenFieldType = new HiddenFieldType();
$form = $this->factory->create($hiddenFieldType);
// submit the data to the form directly
$form->submit($formData);
var_dump($form->isValid()); die;
}
// factory is set …Run Code Online (Sandbox Code Playgroud) 我有一个带有 ChoiceType 字段的 Symfony3 表单。它使用带有 AJAX 数据源的 Select2。这一点工作正常。然而,当表单被提交时,Symfony 验证开始并抱怨:
This value is not valid
Run Code Online (Sandbox Code Playgroud)
我想这是因为通过 AJAX 选择的选择不存在于表单类型的“选择”键中。
我对 Symfony 比较陌生。有人可以指出我正确的方向以禁用现场验证吗?
我有一个集合类型:
->add('tipi', CollectionType::class, array(
'entry_type' => TipiType::class,
'allow_add' => true,
'prototype' => true,
'mapped' => false,
'entry_options' => array(
'required' => true,
'label' => false,
)
))
Run Code Online (Sandbox Code Playgroud)
扩展此表单类型:
->add('tipi', EntityType::class, array(
'label' => 'Tipo',
'class' => 'AppBundle:Tipi',
'attr' => array('class' => 'form-control'),
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('t')
->innerJoin('t.requests', 'r')
;
},
));
Run Code Online (Sandbox Code Playgroud)
在第一种表单类型中,我有一个从控制器发送的选项,如下所示:
$idRequest = $request->get('id');
$form = $this->createForm(RequestsType::class, $requests, array(
'id_request' => $idRequest
));
Run Code Online (Sandbox Code Playgroud)
在第一个中我可以使用它,但在子 FormType 中则不能。我会在集合类型中传递这个变量。我怎样才能做到这一点?
$form = $this->createForm(new YourForm($options), $class);
Run Code Online (Sandbox Code Playgroud) 鉴于以下表单类型,我如何在提交之前呈现我的第二个字段?我试过了,$form->remove但我总是会收到这个错误:
Warning: Illegal offset type in isset or empty
Run Code Online (Sandbox Code Playgroud)
不太确定如何解决这个问题。
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('survey', EntityType::class, [
'class' => SurveyManager::class,
'attr' => [
'class' => 'field-change',
],
])
->add('submit', SubmitType::class, [
])
->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$modifier = $data['survey'];
$form->add('headquarter', EntityType::class, [
'class' => HeadQuarterManager::class,
'query_builder' => function (HeadQuarterManagerRepository $er) use ($modifier) {
return $er->getHeadquarter($modifier);
}, …Run Code Online (Sandbox Code Playgroud) 我在我的控制器中创建了一个表单,如下所示:
$data = array ();
$formBuilder = $this->createFormBuilder ( $data );
$formBuilder->add( 'Field1', NumberType::class, array(
'constraints' => array(
new NotBlank(),
),
) )
->add ( 'Field2', NumberType::class, array(
'constraints' => array(
new NotBlank(),
)
...);
$form = $formBuilder->getForm ();
Run Code Online (Sandbox Code Playgroud)
我试图将我的表单创建放在一个类型文件中。我是这样做的,但没有创建表单,我无法在视图中显示表单字段。我不明白为什么。
#in ControlController
$data = array ();
$formBuilder= $this->createFormBuilder(ControlType::class, $data);
$form = $formBuilder->getForm ();
#in ControlType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add( 'Field1', NumberType::class, array(
'constraints' => array(
new NotBlank(),
),
) )
->add ( 'Field2', NumberType::class, array(
'constraints' …Run Code Online (Sandbox Code Playgroud) 所以在我的 Symfony 应用程序中,我有一个名为Post.
我的帖子实体具有以下属性:
post_start,post_end等等。
实体:
/**
* @ORM\Entity
* @ORM\Table(name="post")
*/
class Post
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var DateType
* @ORM\Column(type="date")
*/
private $post_start;
/**
* @var DateType
* @ORM\Column(type="date")
* @Assert\GreaterThanOrEqual(propertyPath="post_start")
*/
private $post_end;
.....
}
Run Code Online (Sandbox Code Playgroud)
形式:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'post_start',
DateType::class,
[
'widget' => 'single_text',
'format' => 'dd.MM.yyyy',
'required' => true,
'attr' => [
'class' …Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的实体UniqueEntity验证:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping\ManyToOne;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity("email", message="Email already in use")
*
*
*/
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
*/
private $email;
Run Code Online (Sandbox Code Playgroud)
表单(故意删除所有其他表单字段)
namespace App\Form;
use App\Entity\Company;
use App\Entity\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use …Run Code Online (Sandbox Code Playgroud) 我正在尝试在文件上传表单(表单扩展的验证)上使用 Symfony 验证器,但收到此错误消息:
messageTemplate: "这个值应该是字符串类型。" 来自 Symfony\Component\Validator\ConstraintViolation
上传在没有验证器的情况下运行良好,我无法弄清楚此消息的来源。
这是我的 FormType,以文档为例进行了基本验证:
{
$builder
->add('file', FileType::class, [
'label' => 'Choisir un fichier',
'mapped' => false,
'multiple' => true,
'constraints' => [
new File([
'maxSize' => '1024k',
'mimeTypes' => [
'application/pdf',
'application/x-pdf',
],
'mimeTypesMessage' => 'Please upload a valid PDF document',
])
],
])
;
}
Run Code Online (Sandbox Code Playgroud)
如果我删除maxSize,mimeTypes和/或mimeTypesMessage参数,我仍然有同样的问题。
我不能在实体上使用注释(映射选项设置为false)。
symfony ×10
symfony-forms ×10
php ×7
validation ×3
doctrine-orm ×1
file-upload ×1
forms ×1
select2 ×1
symfony4 ×1
unit-testing ×1