【问题标题】:Angular and Laravel角度和 Laravel
【发布时间】:2013-05-11 14:28:42
【问题描述】:

如何在 XAMPP 上设置 Laravel 和 Angular.js 文件夹结构。我了解创建 RESTFULL Laravel API。

我一直在开发一个应用程序,但是当我在浏览器中输入类似“联系人/约翰”这样的地址时,我得到了一个 Laravel 视图。

当我转到“/”然后单击一些联系人(如 John)时,我得到正确的表格和浏览器地址栏,显示“contacts/john”,我刷新页面并再次获得 Laravel 视图。

【问题讨论】:

  • 有点不清楚,但这似乎是 Laravel 的问题,因为那里没有 Angular.js 的概念。这也是非常模糊的。你试过什么?
  • 我构建了一个简单的应用程序,用于查看、保存、更新和删除联系人(姓名、电话号码、电子邮件...),在后端使用 Laravel 3,在前端使用 Angular.js .当我从 root( / ) 进入页面时它是有效的,但是,如果我在地址栏中输入 url:"/contacts/some_user",我会得到 Laravel 视图而不是 Angular。如何将这两者结合起来,我想 Angular 路由流量并使用 Laravel 查询数据库。
  • 你使用哪种路由? HTML5 还是 Hashbang?
  • 您的网络服务器知道吗?
  • 使用 Hashbangs 一切正常。对于 HTML5 模式,我必须重写指向我的应用程序入口点的每个链接(例如 index.html)。谢谢。

标签: angularjs laravel


【解决方案1】:

我了解 Angular 通过 AJAX 从服务器请求路由,然后通过 HTML5 历史记录/pushstate 方法将浏览器的 URL 栏设置为新位置?

如果是这样,当您通过页面重新加载请求 URL 时,它会被 Laravel 路由。然后,Laravel 只提供您通过路由(有时是纯 JSON)配置的视图。这是您想要的,但仅适用于 Angular 的 AJAX 调用。

我建议您在路由中添加一个isAJAX 过滤器。在您的filter.php 中声明此过滤器:

Route::filter('isAJAX', function()
{
    if (!Request::AJAX()) return Redirect::to('/')->with(array('route' => Request::path()));
});

然后将只希望通过 AJAX 访问的所有路由放入一个组中。在你的routes.php:

Route::group(array('before' => 'isAJAX'), function()
{
    Route::get('contacts/{name}', ContactController@index); // Or however you declared your route

    ... // More routes
});

这样,只有 Angular 的 AJAX 调用从数据库返回结果。每个手册页重新加载都会路由回“/”,并将变量 route 设置为请求的路由。然后你必须选择这条路由并用它启动 Angular 的路由器。

【讨论】:

  • 优秀的解决方案。你能告诉我如何在 Laravel 5.1 中做同样的事情吗?
  • 抱歉,我还没开始使用 Laravel 5.*。也许这里的其他人可能知道。
  • 当然..不用担心。我看到 laravel 5 中没有过滤器,但我认为同样可以通过中间件实现。我需要弄清楚如何做到这一点。 :)
【解决方案2】:

基本上这是我在使用 Angular 作为我的 API 使用者时的路由配置

// HOME PAGE ===================================  
// we don't need to use Laravel Blade 
// we will return a PHP file that will hold all of our Angular content
// We'll put all of our angular file on the public folder  
Route::get('/', function() {   
    View::make('index'); // will return app/views/index.php 
});

// API ROUTES ==================================  
Route::group(array('prefix' => 'api'), function() 
    Route::resource('comments', 'CommentController', 
        array('only' => array('index', 'store', 'destroy')));

});

// CATCH ALL ROUTE =============================  
// all routes that are not home or api will be redirected to the frontend 
// this allows angular to route them 
App::missing(function($exception) { 
    return View::make('index'); 
});

由于我们会将所有的 Angular 代码放在 laravel 的公共文件夹中,因此我们还需要更改 laravel 获取视图的方式。

// app/config/view.php
...

    // make laravel look in public/views for view files
    'paths' => array(__DIR__.'/../../public/views'),

...

【讨论】:

  • 这并没有回答 OP 的问题我不认为尽管 OP 在没有任何代码示例的情况下对这个问题非常含糊。但是从问题来看,我猜 OP 可能像您的回答所说的那样设置了路由,这不会阻止直接访问 laravel 路由。我认为@sisou 的答案是正确的,它实际上阻止了 laravel 的路由通过非 AJax 浏览器访问。
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 2015-08-31
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多