Динамический formConfig в том же контроллере в октябре CMS - PullRequest
0 голосов
/ 12 октября 2019

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

В контроллере для этого определены два действия: 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 или каждый контроллер должен нести ответственность только за одну вещь и иметь только один способ создания / чтения / обновления / уничтожения модели?

1 Ответ

1 голос
/ 13 октября 2019

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

Вы можете использовать этот код для 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);
}

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

...