2016-11-15 3 views
3

Привет всем! В моем приложении Laravel у меня есть функция загрузки файла Excel. Я получил этот код из Интернета и скорректировал его в своем приложении. Проблема в том, что она не улавливает фатальное исключение ошибки, которое возникает, когда пользователь отправляет файл, но не выбрал файл. Я не понимаю, почему его не поймали. Я добавлю часть своего контроллера.Catch FatalErrorException PHP

public function upload() { 
     $file = array('thefile' => Input::file('thefile')); 
     $rules = array('excel' => 'excel'); 
     $validator = Validator::make($file, $rules); 
     if ($validator->fails()) { 
      return Redirect::to('UploadExcelFile')->withInput()->withErrors($validator); 
     } 
     else { 
      try{ 
      // FatalErrorException happens in this line! 
      if (Input::file('thefile')->isValid()) { 
       $destinationPath = 'uploads'; 
       $fileName = Input::file('thefile')->getClientOriginalName(); 
       Input::file('thefile')->move($destinationPath, $fileName); 
       Session::flash('success', 'Upload successfully'); 
       $fileNameJSON = exec("python /path/to/script/ExcelToJSON3.py $fileName"); // This returns a full path name of the JSON file that is made... 
       if ($fileNameJSON == null){ 
        return Redirect::to('/dashboard/input'); 
       } 
       else { 

       //  Getting the ID from the file that is uploaded 
       try { 
        $jsonDecode = json_decode(file_get_contents($fileNameJSON)); 
       } catch (ErrorException $e){ 
        return Redirect::to('/errorpage')->with(array('status'=> 'ErrorException')); 
       } 


A lot of code for handling the data entered.... 

       }catch (FatalErrorException $e){ 
         return Redirect::to('/errorpage')->with(array('status'=> 'FatalErrorException')); 

      }  
     } 
     return true; 
    } 

Ошибка, которая дается:

FatalErrorException в UploadExcelFileController.php строке 35: вызов функции члена IsValid() на не-объект

Итак, я не» t понять, почему этот код не обрабатывает исключение ошибки и как я могу это исправить!

+0

Вы импортируете 'Symfony \ Component \ Debug \ Exception \ FatalErrorException' в верхней части класса как' use Symfony \ Component \ Debug \ Exception \ FatalErrorException'? –

+0

Да! Я импортировал FatalErrorException со всем именем пути, без всего имени пути и, как предложил @ Энди. Но я все равно получаю ту же ошибку. –

ответ

2

Если вы не импортировали имена, FatalErrorException объявляется с использованием «использовать», вы должны рамки исключения, например:

catch (\Symfony\Component\Debug\Exception\FatalErrorException $e) { 

В противном случае вы используете все, что пространство имен вашего класс в и пытаясь поймать исключение, объявленное в этом пространстве имен. Похоже, что ваше ErrorException также настроено.

Я не уверен, что пространство имен, указанное выше, является тем, из которого происходит ваш класс. Я просто предполагаю, что это потому, что вы используете Laravel.

+0

Привет! Я импортировал пространство имен наверху как «использовать FatalErrorException», я попробовал ваше предложение, но я все еще получаю сообщение об ошибке. Как вы думаете, это может быть из-за заказа? –

+0

Какую версию PHP вы используете? Вызов метода для не-объекта на самом деле является фатальной ошибкой на уровне двигателя, и я подозреваю, что происходит то, что FatalErrorException улавливается функцией, которая обрабатывает эти ошибки. Только PHP7 будет генерировать фатальные исключения как исключения. – Andy

+0

PHP 5.5.9-1ubuntu4.19 (cli) –

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