Доброе утро всем.
У меня проблема с отправкой формы, где у меня есть: моя цель - загрузить много файлов с моей формой, обработать загрузку в моей модели, но я не могу даже добраться до Model :: beforeSave(), потому что мой запрос продолжает черным -holed. Вот код.
Посмотреть:
echo $this->Form->create('Gallery', array('type' => 'file'));
echo $this->Form->hidden('id');
echo $this->Form->input('title', array(
'required' => true,
'label' => false,
'class' => 'form-control'
));
echo $this->Form->input('description', array(
'required' => true,
'label' => false,
'type' => 'textarea',
'class' => 'ckeditor'
));
echo $this->Form->input('photos.', array(
'required' => false,
'label' => false,
'type' => 'file',
'class' => 'form-control',
'multiple' => 'multiple'
));
echo $this->Form->end(array(
'label' => $button,
'class' => 'btn btn-default'
));
контроллер:
public function admin_update($id = null) {
if ($id != null && !$this->Gallery->exists($id)) {
throw new NotFoundException('Elemento non valido');
}
if ($this->request->is(array('post', 'put'))) {
if ($this->Gallery->save($this->request->data)) {
$this->Session->setFlash('Galleria salvata', 'default', array(), 'good');
return $this->redirect(array(
'admin' => true,
'action' => 'index'
));
}
$this->Session->setFlash('Non sono riuscito a memorizzare la galleria', 'default', array(), 'bad');
}
$this->request->data = $this->Gallery->findById($id);
}
Модель:
App::uses('AppModel', 'Model');
App::uses('String', 'Utility');
class Gallery extends AppModel {
public $useTable = 'gallery';
public $displayField = 'title';
public $validate = array(
'title' => array(
'notEmpty' => array(
'rule' => array('notEmpty')
)
),
'description' => array(
'notEmpty' => array(
'rule' => array('notEmpty')
)
)
);
public function afterSave($created, $options = array()) {
$dir = new Folder('img/galleries/' . $this->id, true, 0777);
foreach ($this->data[$this->alias]['photos'] as $Photo) {
move_uploaded_file($Photo['tmp_name'], 'img/galleries/' . $this->id . '/' . String::uuid()); // I'll add more controls later
}
}
public function beforeDelete($cascade = true) {
$dir = new Folder('img/galleries/' . $this->id);
return $dir->delete();
}
}
Поэтому каждый раз, когда я пытаюсь загрузить свою форму, мой запрос получает черную ошибку с этой ошибкой
The request has been black-holed
Error: The requested address '/ciardi/admin/galleries/update' was not found on this server.
Stack Trace
CORE/Cake/Controller/Component/SecurityComponent.php line 239 → SecurityComponent->blackHole(GalleriesController, string)
[internal function] → SecurityComponent->startup(GalleriesController)
CORE/Cake/Utility/ObjectCollection.php line 128 → call_user_func_array(array, array)
[internal function] → ObjectCollection->trigger(CakeEvent)
CORE/Cake/Event/CakeEventManager.php line 242 → call_user_func(array, CakeEvent)
CORE/Cake/Controller/Controller.php line 675 → CakeEventManager->dispatch(CakeEvent)
CORE/Cake/Routing/Dispatcher.php line 187 → Controller->startupProcess()
CORE/Cake/Routing/Dispatcher.php line 165 → Dispatcher->_invoke(GalleriesController, CakeRequest)
APP/webroot/index.php line 108 → Dispatcher->dispatch(CakeRequest, CakeResponse)
Та же проблема возникает, даже если я пытаюсь загрузить одно изображение с этим же кодом. Есть ли способ решить мою проблему без плагина? Пожалуйста, помогите мне :)
Решила мою проблему. Я просто добавил таблицу в мою базу данных с именем "изображения" и модель изображения. Метод Gallery :: afterSave() вызывает Image :: save() для каждого изображения, которое я пытаюсь загрузить, Image :: beforeSave() проверяет изображение с помощью is_uploaded_file() и перемещает его в правый каталог, а Image :: beforeDelete() помогает мне поддерживать файловую систему в чистоте. Это.