Yii2 RESTful: не работают языки согласования контента

Я реализовал структуру API Rest с моделями в Yii2. Все отлично работает для действий (индексирование, создание, обновление и т. Д.) И методов (GET, POST, PUT и т. Д.), Но у меня проблема с ContentNegotiator учебный класс.
В частности, если я передаю в качестве параметра GET язык, на который должен быть переведен ответ, это игнорируется.
В соответствии с документацией для установки языка ответа нам нужно установить разрешенные языки ContentNegotiator (посмотри на мой behaviors()) и сделайте запрос вот так:

HTTP: // локальный / API / v1 / пользователей _lang = он-IT

Но ответ по-прежнему на английском языке. Зачем??? Ничего против англичан =)

Это мое ActiveController дочерний класс, который простирается от yii\rest\Controller,

use yii\rest\ActiveController;
use yii\filters\VerbFilter;

class AActiveController extends ActiveController
{
public function behaviors()
{
$behaviors = parent::behaviors();

$behaviors['verbFilter'] = [
'class' => VerbFilter::className(),
'actions' => $this->verbs(),
];
$behaviors['contentNegotiator']['languages'] = [
'en-EN',
'it-IT',
'de-DE',
'ru-RU',
];

return $behaviors;
}
...

Нотабене: Я отлаживаю через yii\filters\ContentNegotiator Класс платформы и на этом этапе язык приложения установлен правильно, но ответ всегда на английском языке.

метод обработки переговоров ()

public function negotiate()
{
$request = $this->request ?: Yii::$app->getRequest();
$response = $this->response ?: Yii::$app->getResponse();
if (!empty($this->formats)) {
$this->negotiateContentType($request, $response);
}
if (!empty($this->languages)) {
Yii::$app->language = $this->negotiateLanguage($request);
}
debug(Yii::$app->language); // result OK!: it-IT
}

0

Решение

Похоже, некоторые встроенные ошибки не переведены, например yii\rest\Action:103 бросает throw new NotFoundHttpException("Object not found: $id") его не переведено. У вас есть разные способы решения этой проблемы:

  1. Хороший способ. Расширьте это действие и сгенерируйте правильное исключение с помощью translate.
  2. Плохой способ. Отредактируйте сам файл фреймворка.
  3. Лучший способ. Создайте патч для фреймворка и отправьте его сопровождающим.

Для получения дополнительной информации о i18n см документацию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]