Symfony 4 - переопределить maxSizeMessage в валидаторе - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь переопределить атрибут maxSizeMessage из файла в проекте Symfony 4.2, однако это сообщение по умолчанию, возвращаемое платформой ("Файл слишком большой ( {{size}} {{суффикс}}). Допустимый максимальный размер: {{limit}} {{суффикс}} ").

Это моя конфигурация валидатора для этого FormType:

# config\validator\validator.yaml
App\Application\Form\Command\PropertyPicture\PropertyAddPictureCommand:
    properties:
        image: 
            - Image:
                maxSize: 10M
                maxSizeMessage: "Image size over 10M"
                mimeTypes: [image/jpeg, image/png, image/gif, image/bmp]
                mimeTypesMessage: "Image extension not valid"
                uploadErrorMessage: "An error has been encounted during the process"

[ПРАВКА для комментария Михаила Томчука (2019/04/08)]

Это объект "FormType" в этом проекте (это архитектура DDD с POMM):

class PropertyAddPictureCommand
{
    /**
     * @var string
     */
    public $link;

    /**
     * @var string
     */
    public $filename;

    /**
     * @var Property
     */
    public $property;

    /**
     * @var string
     */
    public $pathname;

    /**
     * @var string
     */
    public $directory;

    /**
     * @var UploadedFile
     */
    public $image;
}

[КОНЕЦ РЕДАКТИРОВАНИЯ для комментария Михаила Томчука (2019/04/08)]

[РЕДАКТИРОВАТЬ для комментария Михаила Томчука (2019/04/09)]

Это использование объекта FormType (перед объектом получают значения, переданные в массиве $ options) в проекте:

class CommandType extends AbstractType 
{
    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'name' => 'command_type',
        ]);
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        foreach (get_object_vars($options['data']) as $key => $value) {
            $builder->add($key);
        }
    }
}

И вот как я вызываю объект формы в контроллере:

$uploadedFile = $request->files->get('image');
$propertyId = $property->getIdValue();
$directory = 'group'.DIRECTORY_SEPARATOR.$this->getUser()->getGroupId().DIRECTORY_SEPARATOR.'property'.DIRECTORY_SEPARATOR.$propertyId;

$filename = $propertyId.'-'.uniqid().'.'.$uploadedFile->getClientOriginalExtension();

$command = new PropertyAddPictureCommand();
$command->link = $this->getParameter('amazon_s3.bucket_url').'images/'.$directory.DIRECTORY_SEPARATOR.$filename;
$command->filename = $filename;
$command->property = $property;
$command->pathname = $uploadedFile->getPathname();
$command->directory = $directory;

$form = $this->createForm(CommandType::class, $command, ['data_class' => PropertyAddPictureCommand::class]);
$form->submit($request->request->all() + ['image' => $uploadedFile], false);

if (!$form->isValid()) {
    throw new NotValidFormException($form);
}

[END EDIT для комментария Михаила Томчука (2019/04/09)]

Я ожидал, что появится сообщение «Размер изображения превышает 10M», если размер изображения превышает 10M.

1 Ответ

0 голосов
/ 09 апреля 2019

Я думаю, что это проблема пути к свойству.

Ваша форма имеет имя - command_type, что означает, что перед каждым входным именем стоит предшествующее, поэтому вместо добавления image к запросу,попробуйте добавить command_type[image].

Я думаю, вы также можете просто сопоставить изображение с объектом команды:

$command->image = $uploadedFile;

В этом случае вам не нужно добавлять свойство imageк запросу.

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