Как я прокомментировал и предположил, по вашей схеме кажется правильным то, что у вас есть следующие ассоциации:
Модель автомобиля:
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 в переменной $ validate, если не работает, попробуйте удалить 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
}
Надеюсь, это поможет.