Как вы правильно заметили, virtualFields используются для создания дополнительных атрибутов для моделей, использующих SQL.Для генерации полей с использованием кода вы должны попробовать метод afterFind
:
function afterFind($results) {
foreach ($results as $key => $val) {
if (isset($val['User']['first_name']) && isset($val['User']['last_name'])) {
$results[$key]['User']['full_name'] = $this->formatName($val['User']['first_name'], $val['User']['last_name']);
}
}
return $results;
}
function formatName($firstName, $lastName) {
$firstName = trim($firstName);
$lastName = trim($lastName);
return $lastName . ', ' . $firstName;
}
Подробнее об этом вы можете прочитать в книге здесь .Я предполагаю, что вам придется проверить это немного дальше, и, возможно, включить второй параметр afterFind
метода $primary
.
РЕДАКТИРОВАТЬ: Я только что понялдругой способ сделать это - включить такие функции непосредственно в вашу модель:
function getFullName($user = null) {
if ($user) {
$this->set($user);
}
return $this->data['User']['first_name'] . ' ' . $this->data['User']['last_name'];
}
И вот ваш получатель!