因此,我们有各种搜索页面,每个页面都有不同的搜索条件,所以我决定编写一个组件,它将从控制器获取传递给它的参数,收集必要的数据并返回然后我可以将其设置为在我的视图文件中使用的数组来填充下拉框以过滤条件。cakePHP自定义数组构建一个选择框
我已经设法让所有的东西写出来,我必须使用cakePHP帮助器来构建一个动态选择框。我深信,我做错了什么,如果有一个更简单的方法来做到这一点,仍然保持一定程度的动态请帮助,您可以:
// COMPONENT METHOD:
public function filterQueries($parameters) {
// Get defaults from the user:
$criteria = $parameters["custom"];
$defaults = $parameters["defaults"];
// Validate the defaults the user may want and assign them to the return array:
if($defaults != "false") {
foreach($defaults as $key => $value) {
if(array_key_exists($value, $this->defaults)) {
$this->returnArray["defaults"][$value] = $this->defaults[$value];
}
}
}
// Get all data for the custom requested form fields:
if($criteria != false) {
foreach($criteria as $model => $arguments) {
$fields = $arguments["fields"];
$conditions = $arguments["conditions"];
$recursive = $arguments["recursive"];
if(!in_array($model,$this->uses)) {
$useModel = ClassRegistry::init($model);
} else {
$useModel = $this->$$model;
}
$array = $useModel->find("all",array("conditions" => $conditions, "fields" => $fields, "recursive" => $recursive));
$this->returnArray["custom"][$model] = $array;
}
}
return $this->returnArray;
}
上述功能将得到其分解或者自定义数组搜索或默认值(以上未包括在内,但它的所有作品,它返回正是因为我本来期望它的阵列。
// The code within my action to get the content from above:
// Load the Filters component to search data:
$search = $this->Components->load("Filter");
// Tell search what you want:
$searchBoxes = array(
"defaults" => array("statuses", "survey_type"),
"custom" => array(
"User" => array(
"fields" => array("User.id","User.first_name", "User.last_name"),
"conditions" => array("User.user_group_id" => "4f847c63-1840-446e-88be-3e4d29566cf0"),
"recursive" => -1
)
)
);
$filterResults = $search->filterQueries($searchBoxes);
$this->set("filters",$filterResults);
所以,现在我得到我的观点文件中这种多关联数组(都还是细)但我想现在基于上面创建的数组构建示例下拉列表中的用户,但结果与我预期的完全不同:
echo $this->Form->input('user_id',
array(
"type" => "select",
"options" => $filters["custom"]["User"]
)
);
HTML输出被打破,并显示如下:
<option value="last_name">Doe</option>
<option value="first_name">Jihn</option>
<optgroup label="User"> </optgroup>
<optgroup label="1"> </optgroup>
<option value="last_name">Marilyn</option>
<option value="first_name">Monroe</option>
我承认,我没有很多的蛋糕的经验,但不明白怎么刚才得到的结果:
<option value='USERID'>NAME</option> // Yes I know the names and surnames must be concatinated still
关于如何做到这一点,做正确的方式提醒任何帮助或指导,将大大理解:)
VARDUMP ON $过滤器[“定制”] [“用户”]
array
0 =>
array
'User' =>
array
'id' => string '4f84840e-cda8-4704-8fdf-210729566cf0' (length=36)
'first_name' => string 'Name' (length=4)
'last_name' => string 'Surname' (length=11)
1 =>
array
'User' =>
array
'id' => string '4f8488cb-53e0-4f72-af73-3de229566cf0' (length=36)
'first_name' => string 'Name' (length=6)
'last_name' => string 'Surname' (length=6)
什么事情'的var_dump($过滤器[“custom”] [“User”])'看起来像? – Jack 2012-04-25 09:21:00
阵列 0 =>数组 '用户'=>数组 'ID'=>字符串 '4f84840e-cda8-4704-8fdf-210729566cf0'(长度= 36) '如first_name'=>字符串 'NAME'(长度= 4) '姓氏'=>字符串 'SURNAME'(长度= 11) 1 =>数组 '用户'=>数组 'ID'=>字符串“4f8488cb-53e0-4f72-af73-3de229566cf0 '(长度= 36) 'first_name'=>字符串'NAME'(长度= 6) 'last_name'=>字符串'SURNAME'(长度= 6).....它返回所有其他用户 – mauzilla 2012-04-25 09:24:29
哦,你可以编辑你的问题吗?很难阅读没有格式的评论。 – Jack 2012-04-25 09:25:08