Я реализовал структуру 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
}
Похоже, некоторые встроенные ошибки не переведены, например yii\rest\Action:103
бросает throw new NotFoundHttpException("Object not found: $id")
его не переведено. У вас есть разные способы решения этой проблемы:
Для получения дополнительной информации о i18n см документацию.
Других решений пока нет …