Laravel 5.2到5.3 - 将routes.php转换为web和api路由文件?

时间:2017-08-12 20:14:28

标签: laravel laravel-5 laravel-5.3

我正在将我的吉他课程网站从5.2升级到5.3。我以前的开发人员有一份全职工作,所以现在我是网站所有者和开发人员...我是一个比开发人员更好的吉他手......

我的网站有一个后端添加吉他课程内容。除其他外,routes.php文件包含以下行:

function RegisterResourceRoute($route, $name) {
    Route::get($route,              'Api\\'.$name.'Controller@getAll');
    Route::get($route.'/{id}',      'Api\\'.$name.'Controller@get');
    Route::post($route,             'Api\\'.$name.'Controller@post');
    Route::put($route.'/{id}',      'Api\\'.$name.'Controller@put');
    Route::delete($route.'/{id}',   'Api\\'.$name.'Controller@delete');
}

// Api
Route::group(['middleware' => ['api', 'auth', 'admin']], function () {
    Route::group(array('prefix' => 'api'), function() {
        RegisterResourceRoute('file', 'File');
        RegisterResourceRoute('photo', 'Photo');
        RegisterResourceRoute('category', 'Category');
        RegisterResourceRoute('tag', 'Tag');
        RegisterResourceRoute('lesson', 'Lesson');
        RegisterResourceRoute('exercise', 'Exercise');
        RegisterResourceRoute('user', 'User');
    });
    Route::post('/api/email', 'Api\\EmailController@send');

});

然后我在视图中使用的角度相关的js中看到,这是练习资源:

// Exercise
        .when('/exercise', {
            templateUrl: 'views/dashboard/exercise/view-all.html',
            controller: 'ExerciseViewAllController'
        })
        .when('/exercise/create/:lessonId?', {
            templateUrl: 'views/dashboard/exercise/create.html',
            controller: 'ExerciseCreateController'
        })
        .when('/exercise/view/:id', {
            templateUrl: 'views/dashboard/exercise/view.html',
            controller: 'ExerciseViewController'
        })
        .when('/exercise/edit/:id', {
            templateUrl: 'views/dashboard/exercise/edit.html',
            controller: 'ExerciseEditController'
        })
        .when('/exercise/edit/:id/details', {
            templateUrl: 'views/dashboard/exercise/edit-details.html',
            controller: 'ExerciseDetailsController'
        })
        .when('/exercise/edit/:id/photos', {
            templateUrl: 'views/dashboard/exercise/edit-photos.html',
            controller: 'ExercisePhotosController'
        })
        .when('/exercise/delete/:id', {
            templateUrl: 'views/dashboard/exercise/delete.html',
            controller: 'ExerciseDeleteController'
        })

例如,ViewAllController看起来像这样:

angular.module('dashboard')
    .controller('ExerciseViewAllController', ['$scope', '$http', function ($scope, $http) {
        $scope.exercises = [];

        $scope.refresh = function () {
            $scope.exercises = [];
            load();
        };

        var load = function () {
            $scope.busy = true;
            $http.get('/api/exercise').then(function (response) {
                $scope.busy = false;
                $scope.exercises = response.data;
            }, function (response) {
                $scope.busy = false;
            });
        };

        load();
    }]);

我试图找出5.3如何处理这种路由。例如,在我的后端仪表板中,当我尝试查看练习列表时,api / exercise会出现404错误。

所以我在管理路线下创建了web.php:

Route::resource('api/exercise', 'Api\ExerciseController');

在api.php中

Route::group(['prefix' => 'api'], function () { Route::resource('exercise', 'Api\ExerciseController'); });

它现在有效,但是我必须将之前运动控制器中的getAll()函数更改为index(),否则由于laravel正在寻找默认索引方法而出现错误。

我宁愿让它使用默认路由名称,而且我也不知道我添加到web.php和api.php的内容是否真的是正确的方法。我觉得事情似乎有效,但我担心我看不到全局...

有人可以解释一下如何让这些路线以真正的laravel 5.3方式工作吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

不记得确切但我通过此链接从https://laravel.com/docs/5.3/upgrade升级到5.2 不要被内容所淹没。只搜索你收到错误的位。例如路线部分。 希望有所帮助