从后端表单 [octobercms] 获取输入值
Get input values from backend form [octobercms]
除了 $result = Input::get('term');
之外,此代码中的一切工作正常,请有人帮助我获取字段 term
的输入值。当我这样做时 $result = 8;
一切正常。
Form in plugin backend
在我的插件中 "Lesson" 模型
<?php
namespace Cng\Tennis\Models;
use Model;
use Flash;
use Db;
use Input;
use request;
use Cng\Tennis\Models\Term as termModel;
class Lesson extends Model
{
public function getSdateOptions () {
$result = Input::get('term');
$term = termModel::select('id','start_date')->where('id', $result )->first();
if ($this->term_id == $result ) {
return [$term->id => $term->start_date];
}
else{
return ['Select a date' => 'Select a date' ];
}
}
public function getFdateOptions () {
return ['Select a date' => 'Select a date' ];
}
在 yaml 中
term:
label: Term
nameFrom: name
descriptionFrom: description
span: auto
containerAttributes: { }
type: dropdown
emptyOption: Select
tab: 'Event Details'
dependsOn:
- location
sdate:
label: 'Start Date'
mode: date
span: left1
cssClass: ''
required: 1
dependsOn:
- term
type: dropdown
tab: 'Event Details'
disabled: 1
尝试将 select('id','start_date')
替换为 all()
或 find($result)
,如果您只想获取开始日期,请执行 pluck->('start_date')
。似乎你不能在 eloquent 模型上使用 select,这在我的测试中是有意义的。
这是我 运行 select 没有数据库调用时得到的结果:
$names = Products::select('id','name')->where('id', 1);
return $names;
然而,当我通过正常的集合查询方法访问模型时,我得到了这个:
$names = Products::all()->where('id', 1);
return $names;
最后,您可以使用 $names = Products::find('1')->pluck('name')->first();
将 1
替换为 $result
,将 'name'
替换为 'start_date'
。
首先,您的问题是由于 term
字段没有在 HTML 中命名。如果您在浏览器中查看生成的表单输入,或者在触发 dependsOn
触发器时发送的 AJAX 请求中,您会注意到 term
的实际字段名称字段以表单小部件的别名为前缀(可能是 Form
,因此在这种情况下,实际字段名称是 Form[term]
)。
但是,您甚至根本不必使用 Input
,您可以直接在函数中引用模型 属性 term
字段:
$options = [0 => 'Select a start date'];
$term = TermModel::find($this->term);
if ($term) {
$options = [$term->id => $term->start_date];
}
return $options;
有关如何正确使用 dependsOn
属性 的更多信息,请参阅 https://octobercms.com/docs/backend/forms#field-dependencies。请注意,在您的情况下,您可能会将其与 trigger
属性 结合使用,以隐藏 start_date
字段,直到您在 term
字段中选择了有效选项。
除了 $result = Input::get('term');
之外,此代码中的一切工作正常,请有人帮助我获取字段 term
的输入值。当我这样做时 $result = 8;
一切正常。
Form in plugin backend
在我的插件中 "Lesson" 模型
<?php
namespace Cng\Tennis\Models;
use Model;
use Flash;
use Db;
use Input;
use request;
use Cng\Tennis\Models\Term as termModel;
class Lesson extends Model
{
public function getSdateOptions () {
$result = Input::get('term');
$term = termModel::select('id','start_date')->where('id', $result )->first();
if ($this->term_id == $result ) {
return [$term->id => $term->start_date];
}
else{
return ['Select a date' => 'Select a date' ];
}
}
public function getFdateOptions () {
return ['Select a date' => 'Select a date' ];
}
在 yaml 中
term:
label: Term
nameFrom: name
descriptionFrom: description
span: auto
containerAttributes: { }
type: dropdown
emptyOption: Select
tab: 'Event Details'
dependsOn:
- location
sdate:
label: 'Start Date'
mode: date
span: left1
cssClass: ''
required: 1
dependsOn:
- term
type: dropdown
tab: 'Event Details'
disabled: 1
尝试将 select('id','start_date')
替换为 all()
或 find($result)
,如果您只想获取开始日期,请执行 pluck->('start_date')
。似乎你不能在 eloquent 模型上使用 select,这在我的测试中是有意义的。
这是我 运行 select 没有数据库调用时得到的结果:
$names = Products::select('id','name')->where('id', 1);
return $names;
然而,当我通过正常的集合查询方法访问模型时,我得到了这个:
$names = Products::all()->where('id', 1);
return $names;
最后,您可以使用 $names = Products::find('1')->pluck('name')->first();
将 1
替换为 $result
,将 'name'
替换为 'start_date'
。
首先,您的问题是由于 term
字段没有在 HTML 中命名。如果您在浏览器中查看生成的表单输入,或者在触发 dependsOn
触发器时发送的 AJAX 请求中,您会注意到 term
的实际字段名称字段以表单小部件的别名为前缀(可能是 Form
,因此在这种情况下,实际字段名称是 Form[term]
)。
但是,您甚至根本不必使用 Input
,您可以直接在函数中引用模型 属性 term
字段:
$options = [0 => 'Select a start date'];
$term = TermModel::find($this->term);
if ($term) {
$options = [$term->id => $term->start_date];
}
return $options;
有关如何正确使用 dependsOn
属性 的更多信息,请参阅 https://octobercms.com/docs/backend/forms#field-dependencies。请注意,在您的情况下,您可能会将其与 trigger
属性 结合使用,以隐藏 start_date
字段,直到您在 term
字段中选择了有效选项。