2012-03-04 3 views
1

Если я не выбираю файл, проверка времени не работает и не отображается сообщение «недопустимый файл».Проверка файла не работает в cake php

это действие URL:

http://localhost/carsdirectory/cars/create_ad

create_ad.ctp (вид)

<?php echo $this->Form->create('Car', array('type' => 'file', 'action' => 'create_ad')); ?> 

     <?php echo $this->Form->file('CarImage.image_path')?> 

<?php echo $this->Form->end(array('label' => 'Submit', 'name' => 'Submit', 'div' => array('class' => 'ls-submit')));?> 

car_image.php (модель)

<?php 
class CarImage extends AppModel 
{ 
var $name = 'CarImage'; 

var $belongsTo = 'Car'; 

var $validate = array(

'image_path' => array(

'rule' => array('extension', array('jpeg', 'jpg', 'png', 'gif')), 

'allowEmpty' => false, 

'required' => true, 

'message' => 'invaid file' 
     ), 

    'car_id' => array(
      'rule' => "numeric", 
      'allowEmpty' => false, 
      'message' => 'Car details could not be saved' 
    ) 


     ); 
} 
?> 

car_images (таблица)

поле -> 1) идентификатор 2) image_path 3) car_id

+1

Во-первых, я думаю, что отношения неверны, попробуйте 'Car hasMany CarImage' и' CarImage принадлежит To Car'. Отправьте свой метод 'create_ad()'. –

+0

ok Господин Пауло, я пробую с этим –

+0

Г-н Пауло, я не могу разобраться, мог бы объяснить больше. –

ответ

3

Как заметил я и предположил, что, кажется, прямо по вашей схеме является то, что у вас есть эти ассоциации:

Модель автомобиля:

public $hasMany = array(
    'CarImage' => array(
     'className' => 'CarImage', 
     'foreignKey' => 'car_id', 
     'dependent' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ), 
); 

CarImage модель:

public $belongsTo = array(
    'Car' => array(
     'className' => 'Car', 
     'foreignKey' => 'car_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

поле для формы, так как вы можете иметь много файлов, загруженных (просто сделать новую строку с приращением числа):

echo $this->Form->file('CarImage.0.image_path'); 

Для проверки и загрузки файлов, проще и более последовательно делает это в модели CarImage (я не уверен, что если вы нужны car_id в переменной $ валидации, если не работает, попробуйте удалить car_id от $ Validate) :

public $validate = array(
    'image_path' => array(
     'uploadFile' => array(
      'rule' => array('uploadFile'), 
      'message' => 'Invalid file', 
     ), 
    ), 
); 

public function uploadFile($params) { 
    if ($params['image_path']['error'] == 0) { 
     $file = pathinfo($params['image_path']['name']); 

     if (in_array($file['extension'], array('jpeg', 'jpg', 'png', 'gif'))) { 
      $tmp_file = new File($params['image_path']['tmp_name']); 
      if ($tmp_file->copy('folder_inside_webroot' . DS . $file['basename'])) { 
       return true; 
      } 
     } 
    } 

    return false; 
} 

И ваш контроллер должен saveAll вместо save:

if ($this->Car->saveAll($this->data)) { 
    // success 
} else { 
    // failure 
} 

Я надеюсь, что это помогает.

+0

спасибо Mr Paulo, я попробую с этим –

+0

Mr Paulo, я хочу вам сказать, я использую car_controller.php (controller) здесь у меня есть функция create_ad, поэтому я могу используйте те в этой функции, если ($ this-> Car-> saveAll ($ this-> data)) { // success } else { // сбой } –

+0

Если это вопрос, да, используйте в cars_controller где вызывается действие формы. –

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