Доброго дня.
Имеем:
- VPS сервер Debian 7.8
- Apache 2.2 (Black-end) + Nginx 1.2 (Front статика)
- Yii2 (Base application template)
- PostgreSQL 9+
Конфигурация:
.htaccess директории:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On
RewriteBase /
RewriteRule ^(.*) web/index.php/$1 [QSA,L,NC]
#Блокирует доступ к бэкапам и различным файлам
<FilesMatch "(\.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
#Усиливаем защиту кук
<IfModule php5_module>
php_value session.cookie_httponly true
</IfModule>
#Блокирует просмотр директорий
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
#Блокирует доступ к скрытым директориям
<IfModule mod_rewrite.c>
RewriteCond %{SCRIPT_FILENAME} -d
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)." - [F]
</IfModule>
.htaccess папки web:
AddDefaultCharset utf-8
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Настройки
urlManager:
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => 'code',
],
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'index' => 'site/index',
'' => 'site/index',
'auth' => 'site/auth',
'login' => 'site/login',
'registration' => 'site/registration',
'OAuthCallback' => 'site/OAuthCallback',
'profile' => 'profile/index',
],
],
Содержимое контроллера
CodeController:
<?php
namespace app\controllers;
use yii\rest\ActiveController;
class CodeController extends ActiveController
{
public $modelClass = 'app\models\Models';
public function fields()
{
return [
'id',
'mformat' => 'format',
'name' => function ($model) {
return $model->format . ' ' . $model->id;
},
];
}
}
Две таблицы:
Codeid INT
id_user INT
id_model INT
code VARCHAR(12) -- 12 символьный хэш
Modelsid INT
name INT
map INT
...
Что необходимо:
Настроить REST, который будет отдавать данные в виде XML из двух таблиц, связанных
через relation
(hasOne). по ссылке вроде:
sitename.io/code?hash=Jgme3GnpQeL
Т.е. по хэшу мы получаем ID модели из таблицы code
А по этому ID вытаскиваем все данные из таблицы models
В чём проблема:
В первый раз пытаюсь настроить REST, делаю всё строго по
официальной документации.
Но как обычно ничего не работает с первого раза.
Ссылка вида
/code - возвращает все данные
Ссылка вида
/code/1 - возвращает 404
Ссылка вида
/code?fields=id - возвращает все ID
Ссылка вида
/code?fields=id,mformat - возвращает только ID, псевдоним mformat для поля format не работает
Ссылка вида
/code?fields=id,format - возвращает ID и format
Ссылка вида
/code?fields=id,format,name - возвращает ID, format и name(имя точно такое-же как и в базе, без форматирования, которое указанно в контроллере)
Пытался решить проблему сам, упорно гуглил, но так и не смог понять, почему не работают псевдонимы.
extraFields так-же игнорируются. Помогите пожалуйста!
P.S. Конфигурация URLmanager-а не оптимальна, согласен. Если будут советы по его улучшению, то я с радостью их выслушаю.