Я пытаюсь реализовать dropzone.js в своем приложении CakePHP. Пока все прошло хорошо. За исключением случаев, когда я получаю сообщение об ошибке, отображается вся страница ошибок HTML, а не отображается. Который превращается в кучу HTML-кода, не совсем читаемый и потому что окно с ошибкой становится настолько большим, что я не могу нажать кнопку «удалить». Смотрите рисунок ниже:Ошибка CakePHP Dropzone.js Ajax
Как только я получаю сообщение об ошибке:
Когда я парить коробку, после получения ошибки:
Я знаю, что причина в том, что dropzone.js признает ошибку из-за 500 заголовка страницы Ajax (я бросаю исключение, если что-то пойдет не так). И CakePHP отображает полный макет для 500 страниц ошибок. Поэтому мне не удается просто просмотреть ошибку в одной строке. И мне действительно нужен заголовок 500, потому что еще dropzone.js думает, что все пошло хорошо ....
Итак, мой вопрос: возможно ли НЕ отображать 500-макет ошибок при получении ошибки 500 в рамках определенного метода контроллера ? Я не хочу полностью отключать рендеринг макетов 500. Только для страниц AJAX.
public function admin_add($slug = null) {
if(!$slug || !$client = $this->Video->Client->find('first', array('conditions' => array('slug' => $slug)))) {
throw new NotFoundException(__('Invalid client'));
}
if ($this->request->is('post')) {
// If request contains files, continue
if (!empty($_FILES)) {
// Get slug from URL
$slug = substr($this->referer(), strrpos($this->referer(), '/')+1);
// Create new folder for the movies if it doesn't exist already
if (!file_exists(WWW_ROOT.'/files/'.$slug)) {
mkdir(WWW_ROOT.'/files/'.$slug, 0777, true);
}
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = '/files/'.$slug.'/';
$targetFile = $targetPath. $_FILES['file']['name'];
// Create variable filename without the extension
$fileWithoutExt = preg_replace("/\\.[^.\\s]{3,4}$/", "", $_FILES['file']['name']);
// Add file to Video array
$video['Video'] = array('video' => $targetFile, 'screenshot' => '/files/'.$slug.'/screenshots/'.$fileWithoutExt.'.jpg', 'client_id' => $client['Client']['id']);
// unset($video);
// Try moving the file to their final directory
if(!move_uploaded_file($tempFile, WWW_ROOT.$targetFile)) {
throw new NotFoundException(__('Move image to "'.WWW_ROOT.$targetPath.'" failed'));
}
// Create new folder for the screenshots if it doesn't exist already
if (!file_exists(WWW_ROOT.'/files/'.$slug.'/screenshots/')) {
mkdir(WWW_ROOT.'/files/'.$slug.'/screenshots/', 0777, true);
}
// Try saving video to Video table in the database
if(!$this->Video->save($video)){
throw new NotFoundException(__('Failed connecting client with "'.$targetFile.'" in the database'));
}
}
$this->Session->setFlash(__('Videos successfully uploaded'), 'default', array(), 'success');
$this->redirect($this->referer());
}
$title_for_layout = $client['Client']['name'];
$this->set(compact('title_for_layout', 'client'));
}
короткий ответ: ДА, это возможно. если вы предоставите больше исходного кода, мы можем предоставить более конкретные рекомендации. – Vadim
Хорошо, я отправлю метод CakePHP для добавления загрузок dropzone.js в базу данных (эта функция также создает исключения и, следовательно, 500 ошибок) завтра, как только я нахожусь в офисе. –
Voila, см. Выше. –