十月 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);
}
如有疑问请评论。
我正在尝试创建一家汽车租赁公司,我希望能够在后端设置费率。然而,有两种不同(但相关)的方法可以做到这一点,可以通过单个日期,也可以通过选择日期范围并循环遍历单个日期来批量进行。
在控制器中,我定义了两个操作来执行此操作,分别是 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
inupdatebulk_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);
}
如有疑问请评论。