2013-10-03 5 views
0

У меня есть форма, где пользователи могут загружать изображения, и я печатаю его на страницу как так:проверки CakePHP не обнаруживает поля формы

<?php echo $this->Form->label('file', 'Image file', array('class' => 'col-lg-1 control-label')); ?> 

Тогда в модели я настройке проверки как так:

public $validate = array(
    'file' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'You must select an image to upload' 
     ), 
     'extension' => array(
      'rule' => array('extension', array('png')), 
      'message' => 'Images must be in PNG format' 
     ), 
     'size' => array(
      'rule' => array('fileSize', '<', '1MB'), 
      'message' => 'Images must be no larger than 1MB' 
     ), 
     'goodUpload' => array(
      'rule' => 'uploadError', 
      'message' => 'Something went wrong with the upload, please try again' 
     ) 
    ) 
); 

Однако, как представляется, не торт будет связать поля формы с правилом проверки, что если выбрать изображение для загрузки я всегда получаю «Вы должны выбрать изображение для загрузки» в качестве формы ошибка. Я убедился, что форма имеет enctype="multipart/form-data".

Это происходит потому, что file не является полем базы данных? Как я могу сделать торт для проверки на file?

Edit: Вот вся моя форма, в соответствии с просьбой: http://pastebin.com/SbSbtDP9

+0

Можете ли вы опубликовать код для всей вашей формы? – Andrew

+0

Конечно, пришлось загрузить его в Паштебин, хотя он довольно длинный. –

+0

Вы посмотрели раздел проверки правильности загрузки на этой странице: http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html – Andrew

ответ

1

Вы можете проверить поля, которые не находятся в базе данных, если у вас есть правильное имя поля в правильной модели.

Из того, что я могу видеть в своем коде, кажется, ваш вывод метки вместо фактического ввода, для загрузки изображений Я хотел бы попробовать

echo $this->Form->create('Model', array('type'=>'file')); 
echo $this->Form->input('file', array('type'=>'file')); 
echo $this->Form->submit('Upload Image'): 
echo $this->Form->end(); 

Для проверки я бы попробовать что-то подобное с остальными ваши параметры проверки (размер и т. д.). CakePHP обычно выдает сообщение об ошибке notEmpty при загрузке файлов. Так что просто проверка типа расширения обычно достаточно хороша.

public $validate = array(
    'file' => array(
    'rule' => array(
    'extension', array('jpeg', 'jpg') 
    'message' => 'You must supply a file.' 
    ) 
    ) 
); 

Большинство времени в CakePHP для изображения Выгрузка прибегаю к плагину, такие как https://github.com/josegonzalez/cakephp-upload он делает проверку и загружать обработку все в одном.

+0

У него есть '$ this -> Form-> form (...) 'в его коде. Разве вам не нужно делать что-то особенное для полей, которых нет в базе данных? – Andrew

+1

Нет, но его Form-> create нуждается в 'type' => 'файле' в массиве параметров. –

+0

Хорошо, просто посмотрел на пастабин, так как я не могу добавить комментарий к исходному вопросу, я прокомментирую здесь! Darn low rep :( Что делать, если вы изменили $ this-> Form-> file(), на $ this-> Form-> input ('file', array ('type' => 'file'));? Это подтверждается? –

0

Удалось выяснить. Оказывается, проверка валидации notEmpty на файловом поле никогда не работает, она всегда думает, что там ничего нет, и поэтому всегда выдает это сообщение проверки.

Работал вокруг этого, написав мой собственный метод проверки.

Смежные вопросы