@demidborodin
FrontEnd Developer

Валидация Get запросов Angular + Laravel?

Существует небольшое приложение на Angular + Laravel.

Есть config приложения Angular

crmApp.config(['$routeProvider', '$locationProvider',
    function ($routeProvider, $locationProvider) {
        $locationProvider.html5Mode(true);

        $routeProvider
            .when('/', {
                controller: 'CrmIndexController',
                templateUrl: 'templates/crmIndex.html'
            })
            .when('/workpeople', {
                controller: 'CrmWorkPeopleIndexController',
                templateUrl: 'templates/workpeopleIndex.tpl.html'
            })
            .when('/workpeople/show/id/:workerId', {
                controller: 'CrmWorkPeopleShowController',
                templateUrl: './templates/workpeople-show.tpl.html'
            })
            .when('/workpeople/edit', {
                controller: 'CrmWorkPeopleEditController',
                templateUrl: './templates/workpeopleEdit.html'
            })
            .when('/workpeople/delete', {
                controller: 'CrmWorkPeopleDeleteController',
                templateUrl: './templates/workpeopleDelete.html'
            })
            .when('/map', {
                controller: 'CrmMapController',
                templateUrl: './templates/mapIndex.html'
            }).otherwise({
                redirectTo: '/'
            });

    }]);


Как видно, в одном из роутов принимается $routeParams

Далее мы передаем его в один из контроллеров, где он используется для составления строки запроса к "API" моего приложения.

crmApp.controller('CrmWorkPeopleShowController', ['$scope', '$http', '$routeParams', function ($scope, $http, $routeParams) {

    $scope.watispage = 'Сотрудник';

    $scope.workerId = "api/workpeople/id/" + $routeParams.workerId;

    $http.get($scope.workerId).then(
        function (result) {
            $scope.workpeople = result.data;
        }
    )
}]);


Собственно ID в базе данных имеет тип INT и только INT.

То есть при запросе типа:
/workpeople/show/id/2132132 - роут должен срабатывать и отправлять запрос к нашему ID.

А при запросе (например):
/workpeople/show/id/dsad123 - должен исполнятся роут с редиректом на главную страницу приложения и что самое главное не выполнять сам GET запрос к нашему IP.

Как вы считаете, как лучше реализовать данную функцию?
  • Вопрос задан
  • 2505 просмотров
Решения вопроса 1
Попробуйте добавить резолв в роут:
resolve: {
    validation: function ($q, $routeParams) {
        var deferred = $q.defer(),
            id = parseInt($routeParams.id, 10);

        if (!isNaN(id)) {
            deferred.resolve();
        } else {
            deferred.reject('VALIDATION FAILED');
            $location.path('/login');
        }

        return deferred.promise;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Terminaft
@Terminaft
1) Валидация нужна на стороне Angular и Laravel одновременно
2) На стороне Angular можно просто не рассматривать путь 'workpeople/show/id/dsad123' как объявленный в конфиге
.when('/workpeople/show/id/{workerId:\d+}', {
                ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы