Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Angular 7中调用Yii2的RESTAPI_Angular_Yii2_Cors_Angular7_Yii2 Api - Fatal编程技术网

如何在Angular 7中调用Yii2的RESTAPI

如何在Angular 7中调用Yii2的RESTAPI,angular,yii2,cors,angular7,yii2-api,Angular,Yii2,Cors,Angular7,Yii2 Api,我有一个Angular服务,它进行API调用。这是我的subscribe.service.ts文件 import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http' @Injectable({ providedIn: 'root' }) export class SubscribeService { reado

我有一个Angular服务,它进行API调用。这是我的
subscribe.service.ts
文件

    import { Injectable } from '@angular/core';
    import { HttpClient } from '@angular/common/http'

    @Injectable({
      providedIn: 'root'
    })
    export class SubscribeService {
      readonly postURL = "http://localhost/sampleproject/frontend/web/api/subscribe";
      constructor(private http:HttpClient) { }

      subscribeSubmit(subscriber){
       return this.http.post(this.postURL, subscriber);
      }
    }
            <?php
        namespace frontend\controllers;
        use Yii;
        use yii\web\Controller;

        class ApiController extends Controller {
            public $enableCsrfValidation = false;
            public static function allowedDomains() {
            return [
                 '*',                       
            ];
        }

            public function behaviors() {
            return array_merge(parent::behaviors(), [
                'corsFilter'  => [
                    'class' => \yii\filters\Cors::className(),
                    'cors'  => [
                        'Origin'                           => static::allowedDomains(),
                        'Access-Control-Request-Method'    => ['POST'],
                        'Access-Control-Allow-Credentials' => true,
                        'Access-Control-Max-Age'           => 3600,       
                    ],
                ],

            ]);
        }

             public function beforeAction($action) {
                if (\Yii::$app->getUser()->isGuest &&
                    \Yii::$app->getRequest()->url !== \yii\helpers\Url::to(\Yii::$app->getUser()->loginUrl) && Yii::$app->controller->action->id != 'subscribeforangular') {
                    \Yii::$app->getResponse()->redirect(Yii::$app->request->BaseUrl . '/../../login');
                }
                else {
                    return parent::beforeAction($action);
                }
            }

            public function actionSubscribe(){
                print_r($_POST);
            }

        }
被称为API的postrl在yii2中。下面是我的
ApiController.php
文件

    import { Injectable } from '@angular/core';
    import { HttpClient } from '@angular/common/http'

    @Injectable({
      providedIn: 'root'
    })
    export class SubscribeService {
      readonly postURL = "http://localhost/sampleproject/frontend/web/api/subscribe";
      constructor(private http:HttpClient) { }

      subscribeSubmit(subscriber){
       return this.http.post(this.postURL, subscriber);
      }
    }
            <?php
        namespace frontend\controllers;
        use Yii;
        use yii\web\Controller;

        class ApiController extends Controller {
            public $enableCsrfValidation = false;
            public static function allowedDomains() {
            return [
                 '*',                       
            ];
        }

            public function behaviors() {
            return array_merge(parent::behaviors(), [
                'corsFilter'  => [
                    'class' => \yii\filters\Cors::className(),
                    'cors'  => [
                        'Origin'                           => static::allowedDomains(),
                        'Access-Control-Request-Method'    => ['POST'],
                        'Access-Control-Allow-Credentials' => true,
                        'Access-Control-Max-Age'           => 3600,       
                    ],
                ],

            ]);
        }

             public function beforeAction($action) {
                if (\Yii::$app->getUser()->isGuest &&
                    \Yii::$app->getRequest()->url !== \yii\helpers\Url::to(\Yii::$app->getUser()->loginUrl) && Yii::$app->controller->action->id != 'subscribeforangular') {
                    \Yii::$app->getResponse()->redirect(Yii::$app->request->BaseUrl . '/../../login');
                }
                else {
                    return parent::beforeAction($action);
                }
            }

            public function actionSubscribe(){
                print_r($_POST);
            }

        }
当我在控制台中签入“网络”时,下面的几行并没有被添加,这表示CORS并没有使用我在controller中编写的内容实现。 根据我的研发,必须在“”中添加以下行

我已经在谷歌上搜索了解决方案并实现了它们,但在所有情况下我仍然会得到相同的错误


请帮忙!!我已经试了两天了。我找不到合适的解决方案,因此发布在这里。

我没有任何使用angular的经验,但是使用javascript,您需要随请求一起提供标题,并且您应该正确配置服务器端请参见和