#json #xml #angular #yii2
#json #xml #угловатый #yii2
Вопрос:
Я пытался подключить образец Angular2 «Tour of Heroes» в качестве интерфейсной части и фреймворк Yii2 в качестве серверного контроллера в yii2
<?php
namespace appcontrollers;
use yiirestActiveController;
class HeroesController extends ActiveController
{
public $modelClass = 'appmodelsHeroes';
public function behaviors()
{
return
yiihelpersArrayHelper::merge(parent::behaviors(), [
'corsFilter' => [
'class' => yiifiltersCors::className(),
],
]);
}
}
Результат (http://server.local/heroes ):
<response>
<item>
<id>11</id>
<name>Mr. Nice</name>
<title>князь</title>
</item>
<item>
<id>12</id>
<name>Narco</name>
<title>граф</title>
</item>
<item>
<id>13</id>
<name>Bombasto</name>
<title>барон</title>
</item>
curl H ‘Content-Type’: ‘приложение / json’ ‘http://server.local/heroes ‘ работает совершенно правильно, и я получаю JSON
Но я не могу получить это в Angular2. http.get с параметрами Content-Type’: ‘application/json
export class HeroService {
private headers = new Headers({'Content-Type': 'application/json'});
private options = new RequestOptions({ headers: this.headers});
private heroesUrl ='http://server.local/heroes';// 'app/heroes'; // URL to web api
constructor(private http: Http) { }
getHeroes(): Promise<Hero[]> {
return this.http.get(this.heroesUrl, this.options
)
.toPromise()
.then(response => response.json().data as Hero[])
.catch(this.handleError);
}
Но я получаю пустого Героя[]
Комментарии:
1. какая-либо ошибка отображается в консоли вашего браузера? не могли бы вы также проверить, правильно ли отправлен запрос с вкладки «Сеть» инструмента разработки?
2. в консоли Chrome нет ошибок
Ответ №1:
Пожалуйста, прочитайте это форматирование ответа Yii или используйте это в своем контроллере
public function behaviors()
{
$behaviors = parent::behaviors();
// add CORS filter
$behaviors['corsFilter'] = [
'class' => yiifiltersCors::className(),
'cors' => [
'Origin' => ['*'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
],
];
$behaviors['contentNegotiator'] = [
'class' => yiifiltersContentNegotiator::className(),
'formats' => [
'application/json' => yiiwebResponse::FORMAT_JSON,
],
];
return $behaviors;
}