2016-01-28 3 views
0

Я использую Laravel 5 с Угловым.Как сделать Laravel 5 перенаправлением на Угловые маршруты без хеша (#)?

По умолчанию Угловой добавить /#/ в URL.

Мне не нравится /#/, поэтому я удалил его, используя $locationProvider.html5Mode(true); из Angular.

Теперь всякий раз, когда я пытаюсь посетить Угловой URL, Laravel отказывается перенаправить меня и вместо этого он вызывает ошибку NotFoundHttpException говоря:

К сожалению, страница, которую вы ищете не может быть найдена.

NotFoundHttpException в RouteCollection.php линии 161:

И это вполне логично, потому что маршрут не определен в файле маршрутной Laravel в.

Как это решить ?!

Подробнее:

  • Когда я посещаю http://whatever.app/#/dashboard/home все работает отлично (Laravel знает, что это Угловая маршрут, а затем Угловая избавиться от #, так что URL становятся http://whatever.app/dashboard/home без ошибок).
  • Когда я навещаю http://whatever.app/dashboard/home Laravel отображают ошибку NotFoundHttpException.

ответ

4

Редактирование render функции в файле app/Exceptions/Handler.php:

public function render($request, Exception $e) 
{ 
    if ($e instanceof ModelNotFoundException) { 
     $e = new NotFoundHttpException($e->getMessage(), $e); 
    } 

    // handle Angular routes when accessed directly from the browser without the need of the '#' 
    if ($e instanceof NotFoundHttpException) { 

     $url = parse_url($request->url()); 

     $angular_url = $url['scheme'] . '://' . $url['host'] . '/#' . $url['path']; 

     return response()->redirectTo($angular_url); 
    } 

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

Теперь, когда вы пытаетесь посетить http://whatever.app/dashboard/home Laravel обнаружить, что маршруты не существует, и преобразует его в http://whatever.app/#/dashboard/home которая затем удаляется с помощью anguar быть http://whatever.app/dashboard/home, но без ошибок на этот раз :)

0

Когда вы посещаете ниже URL-адрес, Laravel отображает ошибку NotFoundHttpException.

http://whatever.app/dashboard/home 

Средства Laravel не имеют такой маршрут в routes.php

Вероятно, когда меткости http://whatever.app/#/dashboard/home ваш угловой редирект другой URL, чтобы Laravel, что работает отлично (Смотрите угловую templateUrl контроллера и значение URL-адрес для этого маршрут, проверьте это и управляйте отсюда до вашего маршрута laravel, если хотите).

Но когда вы набрали url http://whatever.app/dashboard/home, он напрямую переходит на маршрут laravel и дает ошибку.

Итак, теперь вы хотите удалить # из url. Это некоторые решения ссылку

https://scotch.io/quick-tips/pretty-urls-in-angularjs-removing-the-hashtag

Removing the fragment identifier from AngularJS urls (# symbol)

AngularJS routing without the hash '#'

0

использование

missingMethod(){ return $this->getIndex(); }

в контроллере. Это проверяет наличие вашего маршрута, и если это не какой-то маршрут laravel - индекс возврата.

1

Ответ Махмуда Залта является правильным. Но не учитывайте строку запроса.

Для ссылки на запрос на URL-адрес, вам нужно будет изменить URL-адрес для URI и получить от него запрос.

// handle Angular routes when accessed directly from the browser without the need of the '#' 
if ($e instanceof NotFoundHttpException) { 

    $url = parse_url($request->getUri()); 

    $angular_url = $url['scheme'] . '://' . $url['host'] . '/#' . $url['path'] . (isset($url['query']) ? "?".$url['query'] : "") ;; 

    return response()->redirectTo($angular_url); 
} 
Смежные вопросы