Laravel 4和AngularJS -使用路由清理url


Laravel 4 and AngularJS - clean URL's with routing

我是AngularJS的新手,很难让它与Laravel顺利合作。我正试图为一个网站创建一个后端应用程序,并希望以'/admin'为前缀的路由都由AngularJS管理,而不需要在URL中添加哈希值。

Laravel的后端

<

路线/strong>

Route::group(['prefix' => 'admin'], function()
{
    Route::get('/', function() {
        return View::make('backend/dashboard');
    });
});

View - dashboard.blade.php

<!doctype html>
<html ng-app="glenn">
<head>
    <title>Laravel and Angular Together</title>
    <meta charset="utf-8">
    <base href="/admin">
    <script src="vendor/angular.js"></script>
    <script src="vendor/angular-route.js"></script>
    <script src="js/app.js"></script>
</head>
<body>
    <h1>Dashboard</h1>
    <div class="container">
        <ng-view></ng-view>
    </div>
</body>
</html>

AngularJS前端

app.js

var glenn = angular.module('glenn', ['ngRoute']);
glenn.config(function($routeProvider, $locationProvider) {
    $routeProvider
        .when('/test', {
            templateUrl: 'test.html',
            controller: 'TestController'
        })
        .otherwise({
            redirectTo: '/'
        });
    $locationProvider.html5Mode(true);
});
glenn.controller('TestController', function($scope) {
});

问题:当我将浏览器的url指向admin/test时,我会收到Laravel的NotFoundHttpException,因为Laravel试图接管我希望Angular负责的路由…我怎样才能解决这个问题?由于

因为angular会为admin处理所有的路由(你不会在Laravel中指定任何进一步的路由),所以你可以不使用前缀。

试题:

Route::get('admin{angular}', function () {
    return View::make('backend/dashboard');
})->where('angular', '.*');

代替:

Route::group(['prefix' => 'admin'], function()
{
    Route::get('/', function() {
        return View::make('backend/dashboard');
    });
});

这应该捕获所有以admin开头的路由,我相信这是您想要的。

与此相关的是:

如果你正在创建一个Angular + Laravel的web应用,你希望所有路由都由AngularJS处理,你可以在Laravel中指定一个'catch-all'路由来避免NotFoundHttpException错误:

App::missing(function($exception)
{
    return View::make('backend/dashboard'); // this should match your index route
});