Как получить доступ к значениям поля Locale через :: get (), используя Silverstripe Fluent - PullRequest
0 голосов
/ 17 октября 2019

Мы работаем над проектом, использующим Silverstripe с модулем Fluent для включения нескольких переводов.

Вот пример объекта данных с включенным Fluent. Сначала мы создаем объект данных и явно устанавливаем поля CMS:

namespace Yard;

use SilverStripe\ORM\DataObject;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;

class Milkshake extends DataObject {
  private static $table_name = 'Milkshake';

  private static $db = [
    'Title' => 'Varchar(255)'
  ]

  public function getCMSFields() {
    $fields = new FieldList(
        new TextField('Title', 'Milkshake Title', null, 255)
    );
    $this->extend('updateCMSFields', $fields);
    return $fields;
  }
}

Затем мы устанавливаем Title как переводимый в файле YML:

Yard\Milkshake:
  extensions:
    - 'TractorCow\Fluent\Extension\FluentExtension'
  translate:
    - 'Title'

Это дает нам объект спереводимое поле Title, которое может иметь разные значения в разных локалях. Создается следующая таблица базы данных:

Milkshake_Localised

ID | RecordID | Locale | Title

Пока все хорошо, кроме использования:

$milkshake = Milkshake::get()->first() не возвращаетлокализованные данные и данные из таблицы Milkshake.

Я думаю, что можно использовать:

$locale= FluentState::singleton()->getLocale();
$milkshake = Milkshake_Localised::get()->filter(['Locale' => $locale])->first();

Но это выглядит неуклюже и не имеет откатов, если данные локали не 'не существует для этого поля (в этот момент оно должно возвращаться к локали по умолчанию или при отсутствии исходного поля Milkshake).

Какой правильный способ доступа к данным локали в Fluent, так что естьзапасной вариант, если требуется?

1 Ответ

0 голосов
/ 24 октября 2019

Я получил желаемое поведение, заключив команду get в " withState "

use TractorCow\Fluent\State\FluentState; 

$milkshake = FluentState::singleton()->withState(function (FluentState $state) {
 return Milkshake::get()->first(); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...