使用laravel和angularjs创建一个新项目

时间:2015-12-21 18:11:28

标签: angularjs laravel

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

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

以下是我的问题。

  1. 我打算带一个子域名db.mydomain.com,其中加载了laravel,api被引用到angularjs中的$ http调用。这是一个好习惯吗?

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

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

  4. 希望我很清楚。

    修改1 按照指示行事,我能够打电话给科尔。但是,如果我使用模型从数据库收集数据,它会再次抛出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并且失去了联系。现在我无法理解模型文件的确切位置。

2 个答案:

答案 0 :(得分:1)

你可以去子域,这很好。

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

另一种选择:在您的网址中添加/ api等内容。

我使用了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' => 'api'], function(){ ... });

对于Auth,我也使用JWT,在令牌无效之前仍然无法刷新令牌,但这是另一个故事。

答案 1 :(得分:0)

  1. 是的,这是一个很好的做法。我个人喜欢子域名api.domain.com,但这取决于你。
  2. 我在laravel中使用this package作为CORS,它对我有用。 [编辑:就像@hogan提到的,如果你使用像/ api这样的子目录,你将不需要设置CORS。]
  3. 您需要实施某种身份验证。我使用JWT。用SELECT SOH.SalesOrderNo , 'Territory Mismatch - Exception' AS [ReasonForError] FROM ASHEVMSAGE100.MAS_PHE.dbo.SO_SalesOrderHistoryHeader SOH, ASHEVMSQL.DailySales_BB.dbo.Exceptions EX WHERE (CASE WHEN CAST(SOH.SalespersonNo AS INT) = '0' THEN '50' ELSE CAST(SOH.SalespersonNo AS INT) END) <> CASE WHEN (...multiple cases...) THEN EX.DestinationTerritory 之类的东西验证来源是非常困难的,因为它是由客户端设置的并且易于欺骗。