javascript — магистральные маршруты не работают с Laravel

Я не знаю точно, где ошибка / с / находятся.

Я делаю одностраничное приложение, это контекст:

  1. У меня есть контроллер ресурсов в Laravel, который смотрит этот маршрут «domain.dev/v1/»
  2. Laravel обслуживает первую страницу / представление «/public/views/layouts/application.blade.php»
  3. Представления усов хранятся в «public / views /» и загружаются синхронно, когда они вызываются магистральным маршрутизатором (я изменил файл «app / config / view.php», чтобы обслуживать представления из bakcbone)
  4. В магистральной сети маршрутизатор контролирует каждое изменение URI, даже pushstate и соответствующие виды усов. Кажется, все работает нормально, но если вы набираете прямой URI для пользователя или списка … вы видите только JSON, возвращаемый сервером, а не соответствующее Backbone View, другими словами, я не знаю, который не выполняет правильная работа, Laravel Router или Магистральный Маршрутизатор. Или это конфигурация Laravel?

Это мой код до сих пор:

// app/routes.php

Route::group(['prefix' => 'v1'],function (){

Route::resource('users','V1\UsersController');

Route::get('/', function()
{
return View::make('layouts.application')->nest('content', 'app');
});
});// app/controllers/V1/UsersController.php

namespace V1;

//import classes that are not in this new namespace
use BaseController;
use User;
use View;
use Input;
use Request;

class UsersController extends \BaseController {

public function index()
{
return $users = User::all(['id','email','name']) ;
}

public function show($id)
{
$user = User::find($id,['id','email','name']);

if(is_null($user)){
return array(
'id' => 0,
'email' => 'fake email'
);
}
return $user;
}

// public/js/namespaces.js

(function(){

window.App = {
Models : {},
Collections : {},
Views : {},
Router : {}
};

window.Templator = function (mustacheView){
return $.ajax({
url: '/views/'+mustacheView,
async : false,
type: 'GET',
}).responseText;
};

window.Vent = _.extend({},Backbone.Events);

})();

// public/js/backbone/router.js

App.Router = Backbone.Router.extend({
routes : {
'' : 'home',
'users' : 'showAll',
'users/:id' : 'showUser',
'login' : 'showLoginForm'
},
home: function (){
Vent.trigger('home:index');
},
showAll : function (){
Vent.trigger('users:showAll');
},
showUser: function (id){
Vent.trigger('users:show',id);
},
showLoginForm : function (){
Vent.trigger('login:form');
}
});// public/js/app.js
$(function() {

$(document).on("click", "a", function(e){
var href = $(this).attr("href");

if (href != '#')  {
e.preventDefault();
Backbone.history.navigate(href,{trigger:true});
}
});

new App.Views.AllUsers;
new App.Views.Index;
new App.Views.Login;
new App.Router;

Backbone.history.start({
pushState: true,
silent: true,
root: '/v1'
});
});

Поэтому, если я наберу этот URI «domain.dev/v1/users» на панели навигации, отобразится список пользователей в формате JSON, а представление, связанное с магистралью, не отобразится.
Какие-либо предложения?

0

Решение

Посмотрите на мой ответ, который я только что дал в похожем вопросе об Angular: Угловой и ларавелла

В тексте просто мысленно заменить Angular с Backbone,

Как пройти маршрут от Laravel до Магистрали:

Базовый вид, который возвращается из Laravel для '/' маршрут должен иметь что-то вроде этого где-то в своем <head> до backbone.js Включено:

<script>
var myRoute = "{{ $route }}";
</script>

Этот шаблон лезвия создает переменную Javascript. Затем, после того как вы объявили свои маршруты в Backbone, добавьте это:

Backbone.history.start(); // You should already have this line, so just add the next one
App.nav.navigate(myRoute);

Это должно сделать свое дело.

0

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

Других решений пока нет …