Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从CakePHP列表数组中返回一个值以在表单中使用?_Php_Arrays_Forms_Cakephp - Fatal编程技术网

如何从CakePHP列表数组中返回一个值以在表单中使用?

如何从CakePHP列表数组中返回一个值以在表单中使用?,php,arrays,forms,cakephp,Php,Arrays,Forms,Cakephp,我一直在使用CakePHP开发一个应用程序,我有一些基本权限,旨在限制用户的能力,帮助防止错误 我有一个表格,在这个表格中,拥有特定权限或更高权限的人可以创建一个新的员工。表单中的一个字段允许他们将学校与员工关联。如果他们有所需的最低访问权限,我希望选择自动填充为学校的创建者与他们有关联,然后如果他们是管理员,他们可以选择从选择 在控制器中,我调用填充学校数组的此行: $this->set('schools', $this->Staff->School->find('li

我一直在使用CakePHP开发一个应用程序,我有一些基本权限,旨在限制用户的能力,帮助防止错误

我有一个表格,在这个表格中,拥有特定权限或更高权限的人可以创建一个新的员工。表单中的一个字段允许他们将学校与员工关联。如果他们有所需的最低访问权限,我希望选择自动填充为学校的创建者与他们有关联,然后如果他们是管理员,他们可以选择从选择

在控制器中,我调用填充学校数组的此行:

$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相当陌生,您的回答确实帮助我了解了背景情况。:)