如何从CakePHP列表数组中返回一个值以在表单中使用?
我一直在使用CakePHP开发一个应用程序,我有一些基本权限,旨在限制用户的能力,帮助防止错误 我有一个表格,在这个表格中,拥有特定权限或更高权限的人可以创建一个新的员工。表单中的一个字段允许他们将学校与员工关联。如果他们有所需的最低访问权限,我希望选择自动填充为学校的创建者与他们有关联,然后如果他们是管理员,他们可以选择从选择 在控制器中,我调用填充学校数组的此行:如何从CakePHP列表数组中返回一个值以在表单中使用?,php,arrays,forms,cakephp,Php,Arrays,Forms,Cakephp,我一直在使用CakePHP开发一个应用程序,我有一些基本权限,旨在限制用户的能力,帮助防止错误 我有一个表格,在这个表格中,拥有特定权限或更高权限的人可以创建一个新的员工。表单中的一个字段允许他们将学校与员工关联。如果他们有所需的最低访问权限,我希望选择自动填充为学校的创建者与他们有关联,然后如果他们是管理员,他们可以选择从选择 在控制器中,我调用填充学校数组的此行: $this->set('schools', $this->Staff->School->find('li
$this->set('schools', $this->Staff->School->find('list', array('conditions' => array('School.active' => !null), 'order' => array('name' => 'ASC'))));
数组如下所示:
array(4) {
[2]=> string(15) "School A"
[3]=> string(15) "School B"
[1]=> string(17) "School C"
[6]=> string(21) "School D"
}
if (AuthComponent::user('admin') == 1) {
echo $this->Form->input('school_id', array('label' => 'School *', 'options' => array($schools), 'required' => 'required'));
} else {
echo $this->Form->input('school_id', array('label' => 'School *', 'value' => $schools[AuthComponent::user('school_id')], 'disabled' => 'disabled'));
}
<select name="data[User][school_id]" id="UserSchoolId">
<optgroup label="0">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</optgroup>
</select>
<select name="data[User][school_id]" value="School C" id="UserSchoolId">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</select>
AuthComponent
以以下方式存储学校id:AuthComponent::user('school_id')
,为此,该值设置为1
在“添加”视图中,显示选择的条件如下所示:
array(4) {
[2]=> string(15) "School A"
[3]=> string(15) "School B"
[1]=> string(17) "School C"
[6]=> string(21) "School D"
}
if (AuthComponent::user('admin') == 1) {
echo $this->Form->input('school_id', array('label' => 'School *', 'options' => array($schools), 'required' => 'required'));
} else {
echo $this->Form->input('school_id', array('label' => 'School *', 'value' => $schools[AuthComponent::user('school_id')], 'disabled' => 'disabled'));
}
<select name="data[User][school_id]" id="UserSchoolId">
<optgroup label="0">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</optgroup>
</select>
<select name="data[User][school_id]" value="School C" id="UserSchoolId">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</select>
由于某些原因,“禁用”视图默认显示列表中的第一所学校。我使用了var_dump($schools[AuthComponent::user('school_id'))];
它返回String(8)=>“school C”
,所以我不明白为什么选择不能正确显示
是否有人有任何建议或替代方案来实现相同的结果?问题代码中有一些奇怪之处: 条件
!null
仅为true
,这与使用:
'conditions' => array('School.active' => true)
如果要检查NOTNULL,则要使用的条件是:
'conditions' => array('School.active NOT' => null)
或
选择权
$schools
已经是一个数组-这将创建一个嵌套数组,该数组将被解释为带有名为“0”的optGroup的select。例如:
array(4) {
[2]=> string(15) "School A"
[3]=> string(15) "School B"
[1]=> string(17) "School C"
[6]=> string(21) "School D"
}
if (AuthComponent::user('admin') == 1) {
echo $this->Form->input('school_id', array('label' => 'School *', 'options' => array($schools), 'required' => 'required'));
} else {
echo $this->Form->input('school_id', array('label' => 'School *', 'value' => $schools[AuthComponent::user('school_id')], 'disabled' => 'disabled'));
}
<select name="data[User][school_id]" id="UserSchoolId">
<optgroup label="0">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</optgroup>
</select>
<select name="data[User][school_id]" value="School C" id="UserSchoolId">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</select>
结果是这样的标记:
array(4) {
[2]=> string(15) "School A"
[3]=> string(15) "School B"
[1]=> string(17) "School C"
[6]=> string(21) "School D"
}
if (AuthComponent::user('admin') == 1) {
echo $this->Form->input('school_id', array('label' => 'School *', 'options' => array($schools), 'required' => 'required'));
} else {
echo $this->Form->input('school_id', array('label' => 'School *', 'value' => $schools[AuthComponent::user('school_id')], 'disabled' => 'disabled'));
}
<select name="data[User][school_id]" id="UserSchoolId">
<optgroup label="0">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</optgroup>
</select>
<select name="data[User][school_id]" value="School C" id="UserSchoolId">
<option value="2">School A</option>
<option value="3">School B</option>
<option value="1">School C</option>
<option value="6">School D</option>
</select>
显然,不要依赖表单来实现任何类型的安全性-禁用的输入不会阻止用户编辑html、启用html和更改值。或者使用(防止表单篡改),强制确保school_id(以及任何其他相关字段)在保存/更改记录或同时保存/更改记录之前,请在控制器操作中匹配授权用户的数据。非常感谢@AD7six,我对CakePHP相当陌生,您的回答确实帮助我了解了背景情况。:)