2015-08-25 6 views
15

Я пытаюсь выяснить, что страница 404 не найдена, если маршрут не найден. Я следовал за многими учебниками, но это не сработало. меня 404.blade.php в \laravel\resources\views\errorsПоказать 404 страницы, если маршрут не найден в Laravel 5.1

Также в handler.php

public function render($request, Exception $e) 
{ 
    if ($e instanceof TokenMismatchException) { 
     // redirect to form an example of how i handle mine 
     return redirect($request->fullUrl())->with(
      'csrf_error', 
      "Opps! Seems you couldn't submit form for a longtime. Please try again" 
     ); 
    } 

    /*if ($e instanceof CustomException) { 
     return response()->view('errors.404', [], 500); 
    }*/ 

    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) 
     return response(view('error.404'), 404); 

    return parent::render($request, $e); 
} 

Если я ввожу неправильный URL в браузере, он возвращает пустую страницу. У меня есть

'debug' => env('APP_DEBUG', true), 

в app.php.

Может ли кто-нибудь помочь мне, как показать страницу 404, если маршрут не найден? Спасибо.

+0

что вы получаете в настоящее время? –

+0

использование прерывания (404); затем создайте страницу в папке с ошибками 404.blade.php – mdamia

+0

@ Dagon.blank страница – vision

ответ

6

@ проблема tester.Your уже решена, попробуйте команду ниже композитор:

php artisan view:clear 

Затем попробуйте еще раз с неизвестной URL. Потому что раньше я тоже сталкивался с такой же ошибкой.

2

enter image description here> Метод прерывания немедленно вызывает исключение, которое будет отображаться обработчиком исключений. При желании вы можете указать текст ответа:

abort(403, 'Unauthorized action.'); 

Ваш app_debug установлен в true? если это так, Laravel выдает ошибку с обратным трассировкой для целей отладки, если вы измените значение на false, Laravel покажет страницу 404 по умолчанию в папке с ошибками. При этом вы можете использовать прерывание в любое время. на уровне контроллера или на уровне маршрута, это полностью зависит от вас.

т.е.

Route::get('/page/not/found',function($closure){ 
    // second parameter is optional. 
    abort(404,'Page not found'); 
    abort(403); 
}); 
+0

@ mdamia.where Мне нужно использовать прерывание (403)? – vision

+0

это действительно зависит от вас, где и когда вы хотите использовать прерывание. см. обновленный ответ. – mdamia

+0

, я включил true, но он отображает пустую страницу. – vision

0

В апача вы могли бы быть в состоянии поместить этот код в файл .htaccess в главной директории и убедитесь, что изменения AllowOverride директиву всем в HTTPd файле confg

ErrorDocument 404 the\path\to\404.blade.php 
+0

. Я использую локальный сервер xamp в окнах 7 – vision

+0

, см. Эту ссылку http://stackoverflow.com/questions/24472349/htaccess-doesnt-work-on-xampp-windows-7 –

+0

@ Mohammed Elhag. проблема решена, как было предложено patricus и mdamia. Проблема связана с проектом laravel. Я создал новый проект и пробовал его отлично. – vision

1

Вам не нужно проверять тип ошибки и вручную отображать вид 404. Laravel уже знает, как сделать представление с кодом ошибки HTTP, который был выброшен (404 = resources/views/errors/404.blade.php). Избавьтесь от дополнительной проверки, и она должна работать нормально.

public function render($request, Exception $e) 
{ 
    if ($e instanceof TokenMismatchException) { 
     // redirect to form an example of how i handle mine 
     return redirect($request->fullUrl())->with(
      'csrf_error', 
      "Opps! Seems you couldn't submit form for a longtime. Please try again" 
     ); 
    } 

    return parent::render($request, $e); 
} 
+0

Я пробовал ваш код, но он не работал после этого, я создал новый проект laravel в соответствии с предложенным mdamia.then использовал ваш код, он отлично работает – vision

14

Я получил 500 ошибок вместо 404 ошибок. Я решил проблему следующим образом:

В файле app/Exceptions/Handler.php есть render.

Заменить функцию с помощью этой функции:

public function render($request, Exception $e) 
{ 
    if ($this->isHttpException($e)) { 
     switch ($e->getStatusCode()) { 

      // not authorized 
      case '403': 
       return \Response::view('errors.403',array(),403); 
       break; 

      // not found 
      case '404': 
       return \Response::view('errors.404',array(),404); 
       break; 

      // internal error 
      case '500': 
       return \Response::view('errors.500',array(),500); 
       break; 

      default: 
       return $this->renderHttpException($e); 
       break; 
     } 
    } else { 
     return parent::render($request, $e); 
    } 
} 

Вы можете использовать представление, что вы сохраните в Views/ошибках/404.blade.php, и так далее.

1

Я использую следующее в приложении/Исключения/Handler.php (Laravel 5.2):

/** 
* Render an exception into an HTTP response. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Exception $e 
* @return \Illuminate\Http\Response 
*/ 
public function render($request, Exception $e) 
{ 
    if ($e instanceof \ReflectionException OR $e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) //Si la ruta no existe, mostar view 404. 
     return response(view('errors.404'), 404); 
    return parent::render($request, $e); 
} 

И это выглядит следующим образом: img

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