Могу ли я предварительно заполнить поле нового объекта в Silverstripe 4 через URL? - PullRequest
0 голосов
/ 22 февраля 2019

В проекте Silverstripe, над которым я сейчас работаю, есть объект с полем с именем Code:

class ObjectName extends DataObject
{
  private static $db = [
    'Title' => 'Varchar',
    'Code' => 'Varchar',
    'Description' => 'HTMLText',
  ];

Следующий URL откроет экран создания нового объекта (в локальном устройстве разработки)в CMS: http://localhost.app/admin/object-management/ObjectName/EditForm/field/ObjectName/item/new

Мы хотели бы иметь возможность добавить что-то к этому URL, чтобы предварительно заполнить поле Code нового объекта.

например, http://localhost.app/admin/object-management/ObjectName/EditForm/field/ObjectName/item/new?Code=CodeGoesHere

Возможно ли это в существующих рамках?Или это потребует пользовательской модификации CMS?Если это требует пользовательской модификации, какой подход я должен использовать?

1 Ответ

0 голосов
/ 19 марта 2019

Вы можете предварительно установить значение FormField, добавив следующий код в ваш класс ObjectName:

public function populateDefaults() {
    parent::populateDefaults();
    $code = Controller::curr()->getRequest()->getVar("Code");
    $this->Code = $code;
}

Это извлекает параметр Code из URL и предварительно устанавливает значение нового ObjectName с этим значением дополя леса.Скаффолдер по умолчанию использует значения вызывающего объекта DataObject для заполнения полей формы, поэтому ваш GET-параметр будет показан пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...