【问题标题】:Creating a new project with laravel and angularjs使用 laravel 和 angularjs 创建一个新项目
【发布时间】:2015-12-21 18:11:28
【问题描述】:

我正在使用 angularjs 创建一个新项目,我的前端工作几乎完成了。

我计划让 laravel php 与我的数据进行交互,并将其仅用于获取数据、邮件等基本操作。

这是我的问题。

  1. 我计划使用一个子域 db.mydomain.com,其中加载了 laravel,并且 api 在 angularjs 中引用了 $http 调用。这是一个好习惯吗?

  2. 如果是,我如何使用 laravel 启用 cors 请求。

  3. 如何确认 $http 请求仅来自我的网站。我假设我们也可以通过邮递员来实现,并且使用邮递员,用户可以复制粘贴数据。如何确认 laravel 主路由仅适用于我的网站应用程序的基本 url。

希望我是清楚的。

编辑 1 按照说明完成后,我能够拨打 cors 电话。但是如果我使用模型从数据库中收集数据,它会再次抛出 cors 错误。

<?php 

 namespace App\Http\Controllers;
 use App\Task;

 class TechnologiesController extends Controller {


public function index()
{
  $technologies = Task::getAll("technologies"); // not working if dont have header in task.php
//$technologies = array("subjects"=>array()); // working. This is without interacting with database.
  $encodedArray = json_encode($technologies);
  echo $encodedArray;
}

}

task.php

use Illuminate\Database\Eloquent\Model;
use DB;

header("Access-Control-Allow-Origin: *"); //using this line solves the cors problem.But i want it to center accesssed

class Task extends Model {

    public static function getAll($tableName){

        return DB::table($tableName)->get();

    }

}

注意:我曾经使用 laravel 4 并失去了联系。现在我无法理解模型文件到底应该写在哪里。

【问题讨论】:

  • 这是我用于 CORS 的包。我认为它运作良好github.com/barryvdh/laravel-cors
  • @jfadich 我已经更新了代码。能否请您告知为什么我的 cors 在与 db 连接时没有集中化。
  • 尝试用return $encodedArray 替换echo $encodedArray Laravel 使用请求包装器,这意味着您不应该从控制器回显数据,而是始终返回它。通过返回它,laravel 可以使用中间件添加标题。回声将绕过它。
  • 它适用于 return。
  • @jfadich 请帮我解决这个问题。我是stackoverflow.com/questions/34487807/…

标签: angularjs laravel


【解决方案1】:

你可以通过子域去,这很好。

正如@jfadich 指出的那样,选择https://packagist.org/packages/barryvdh/laravel-cors

另一种选择:将 /api 之类的内容添加到您的 URL。

我使用 mydomain.com/api 是因为我喜欢这种方法,而且我不需要做任何 CORS 事情。在这种情况下,根据您的网络服务器,您必须引导不同的请求。这里 nginx 的部分示例是:

location /api/ {
    try_files $uri $uri/ /index.php?$query_string;
}

location / {
    try_files $uri $uri/ /index.html;
}

index.php 是你的 Laravel 索引文件,index.html 是你的 Angular 索引文件。

为此配置 Laravel,将所有路由包装在 Route::group(['prefix' =&gt; 'api'], function(){ ... });

对于 Auth,我也使用 JWT,在令牌无效之前刷新令牌仍然有问题,但这是另一回事。

【讨论】:

  • 我会将此作为建议。并在未来实施。我有一个 apache 服务器没有时间。我需要尽快完成设置。
【解决方案2】:
  1. 是的,这是一个很好的做法。我个人喜欢子域 api.domain.com,但这取决于你。
  2. 我在 laravel 中使用 this package 来处理 CORS,它对我有用。 [编辑:就像@hogan 提到的那样,如果您使用像 /api 这样的子目录,则不需要设置 CORS。]
  3. 您需要实施某种身份验证。我使用JWT。使用HTTP_HOST 之类的东西很难验证来源,因为它是由客户端设置的,很容易被欺骗。

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多