十月 CMS 中同一控制器中的动态 formConfig

Dynamic formConfig in same controller in October CMS

我正在尝试创建一家汽车租赁公司,我希望能够在后端设置费率。然而,有两种不同(但相关)的方法可以做到这一点,可以通过单个日期,也可以通过选择日期范围并循环遍历单个日期来批量进行。

在控制器中,我定义了两个操作来执行此操作,分别是 calendar()bulk()。我还通过设置 $formConfig public 属性 选择要加载的表单字段 yaml 文件。我的控制器看起来像这样:

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 文件;如果它之前没有定义为 class 属性,它甚至会出错。所以我可以假设这个 yaml 文件是在 调用这些方法之前加载的。

所以我的问题是,有什么方法可以根据入口点加载动态 formConfig yaml 文件吗?或者,这在 Laravel / 10 月甚至是好的做法,还是每个控制器只负责做一件事,并且只有一种方法可以 create/read/update/destroy 一个模型?

您可以根据需要手动设置配置文件。但我们还需要遵循一些规则并添加具有适当命名约定的所需方法。 是的,如果我们做得好,每件事都是很好的做法:)

You can use this code for 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 处理所有控制以使其正常工作。

If you need to save record differently then you need to add custom logic in updatebulk_onSave method its up to you.

@注

If you also need creation functionality you need additional methods. For ex.

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);
}

如有疑问请评论。