Динамический formConfig в том же контроллере в October CMS

Я пытаюсь создать агентство по аренде автомобилей, и в бэкэнде я хочу иметь возможность устанавливать ставки. Однако есть два разных (но связанных) способа сделать это: либо по отдельной дате, либо сразу, выбрав диапазон дат и перебрав отдельные даты в цикле.

В контроллере для этого определены два действия, calendar() и bulk() соответственно. Я также выбираю yaml-файл полей формы для загрузки, задав общедоступное свойство $formConfig. Мой контроллер выглядит примерно так:

class AvailableCars extends Controller
{
    public $formConfig = 'config_form.yaml';

    public function bulk($recordId = null, $context = null)
    {
        $this->pageTitle = "Bulk update rates";
        $model = $this->formFindModelObject($recordId);
        $this->initForm($model);
    }

    public function calendar($recordId = null, $context = null)
    {
        $this->pageTitle = "Update rates for single date on calendar";
        $model = $this->formFindModelObject($recordId);
        $this->initForm($model);
    }

    public function onSave($recordId = null, $context = null)
    {
        $this->formFindModelObject($recordId)->save();
        Flash::success("Rates saved successfully");
    }
}

Проблема в том, что это работает для одного действия, но если я поставлю, например:

$this->formConfig = 'alternate_fields.yaml';

в любом из методов bulk() или calendar() он не переопределяет поведение и загружает другой файл конфигурации формы yaml; и он даже выдает ошибку, если он ранее не был определен как свойство класса. Поэтому я могу предположить, что этот yaml-файл загружается до того, как будет вызван любой из этих методов.

Итак, мой вопрос: есть ли способ загрузить динамический formConfig yaml файл на основе точки входа? Или это вообще хорошая практика в Laravel / October, или каждый контроллер должен отвечать только за одну вещь и иметь только один способ создать / прочитать / обновить / уничтожить модель?


person Mike    schedule 12.10.2019    source источник


Ответы (1)


Вы можете установить файл конфигурации вручную в соответствии с вашими потребностями. но нам также необходимо следовать некоторым правилам и добавлять для него необходимые методы с соответствующими соглашениями об именах. и да, все будет хорошо, если мы будем делать это правильно :)

Вы можете использовать этот код для update existing records.

public function updatebulk($recordId = null, $context = null)
{
    $this->pageTitle = "Bulk update rates";
    $this->asExtension('FormController')->setConfig('bulk_config.yaml');
    $this->asExtension('FormController')->update($recordId, $context);
}

public function updatebulk_onSave($recordId = null, $context = null) {
    $this->asExtension('FormController')->setConfig('bulk_config.yaml');
    $this->asExtension('FormController')->update_onSave($recordId, $context);
    // or custom logic (if you add custom logic please remove above lines)
}

Теперь вы можете перейти к http://localhost/backend/author/plugin/controller_name/updatebulk/1, он будет отображать форму на основе нового bulk_config.yaml файла конфигурации.

и когда вы его сохраните, он вызовет updatebulk_onSave для обновления записи. мы должны следовать правилу и позволить FormController обрабатывать весь контроль, чтобы он работал правильно.

Если вам нужно сохранить запись по-другому, вам нужно добавить custom logic в updatebulk_onSave метод, который зависит от вас.

@Примечание

Если вам также понадобится creation functionality, вам потребуются дополнительные методы. Например,

public function createbulk($context = null)
{
    $this->pageTitle = "Bulk create rates";
    $this->asExtension('FormController')->setConfig('bulk_config.yaml');
    $this->asExtension('FormController')->create($context);
}

public function createbulk_onSave($context = null) {
    $this->asExtension('FormController')->setConfig('bulk_config.yaml');
    $this->asExtension('FormController')->create_onSave($context);
}

если есть сомнения, прокомментируйте.

person Hardik Satasiya    schedule 13.10.2019