Объедините AngularJS и Laravel Routing

Я использую AngularJS и Laravel для своего проекта веб-приложения. Мой маршрут выглядит так:

AngularJS:

angular.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider) {
$urlRouterProvider.otherwise('/');

$stateProvider
.state('home', {
url: '/',
templateUrl: '/admin/dashboard'
});
}]);

Laravel:

Route::group(array('prefix'=>'admin', function(){
Route::get('/', ['as'=>'admin.main',function(){
return view('main');
}]);

Route::get('/dashboard', ['as'=>'admin.dashboard',function(){
return view('dashboard');
}]);
});

Я столкнулся с проблемой, что мне нужно было бы объявить путь маршрута в 2 месте. Один в Angular, а другой в Laravel. Поэтому каждый раз, когда я добавляю новый маршрут или изменяю маршрут, мне нужно будет работать на 2 месте. Это станет чем-то утомительным и трудным для поддержки, когда приложение будет расти.

В любом случае нужно ли указывать URL-адрес маршрута только в одном месте, но оно будет эффективным для обоих?

2

Решение

Я предполагаю, что вы создаете одностраничное приложение. Это означает, что на стороне сервера (Laravel) вам нужно использовать один и тот же шаблон для всех запросов GET, например,

Route::group(['prefix' => 'admin'], function() {
Route::get('(.*)', function() {
return view('dashboard');
});
});

На стороне клиента (AngularJS) вы выполняете маршрутизацию, как описано в вопросе.


Кстати, вы используете неправильный синтаксис в маршрутизации Laravel, это неверно:

Route::get('/', ['as'=>'admin.main',function(){
}]);

и вот как это должно быть:

Route::get('/', ['as'=>'admin.main'],function(){
//                                 ^
});
0

Другие решения

В Laravel 5.4 я был не возможность определить маршрут с помощью регулярных выражений, как в:

Route::get('/account/(.*)', function() { return view('index'); });

Вместо этого мне пришлось использовать параметр и использовать регулярное выражение, чтобы убедиться, что он захватил все пути:

Route::get('/account/{path?}', function() {
return view('index');
})->with('path', '.*');
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector