我正在尝试使用一些选项填充dropdpwn。我正在尝试为我的输入表单下载名称标题和国家/地区列表。
例如:
标题我需要'先生','太太','小姐'
我试过方法:
模型
// Built a list of search options (unless you have this list somewhere else)
public function __construct($id = false, $table = null, $ds = null) {
$this->titles = array(
0 => __('Mr', true),
1 => __('Mrs', true),
2 => __('Miss', true));
parent::__construct($id, $table, $ds);
}
控制器
public function add() {
if ($this->request->is('post')) {
$this->Member->create();
if ($this->Member->save($this->request->data)) {
$this->Session->setFlash(__('The member has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The member could not be saved. Please, try again.'));
}
}
}
查看
<?php echo $this->Form->input('title',array('class' => 'span10', 'options' => $titles )); ?>
我收到错误Undefined variable:titles
我也试过模型
public $validate = array(
'member_no' => array(
'notempty' => array(
'rule' => array('notempty'),
//'message' => 'Your custom message here',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
'title' => array(
'titlesValid' => array(
'rule' => array('multiple', array(
'in' => array('Mr', 'Mrs', 'Miss'),
'min' => 1
)),
我缺少的是什么,对于更长的列表(例如国家/地区)最好的解决方案,它只是在表单上,所以我认为我不需要标题和国家/地区表和链接ID?
答案 0 :(得分:3)
我觉得很奇怪你必须在下拉列表的模型构造中创建一个变量。特别是如果你只打算使用一次。
但首先要做的事情。您收到该错误是因为您尚未将变量设置为视图。在你的控制器中,需要有这样的东西:
public function add() {
$this->set('titles', $your_titles_array);
if ($this->request->is('post')) {
//etc
现在,请从那里获取下拉阵列。有两个可能更好的地方。我不会挑剔地说你需要将这些值作为数据库中的表格。如果你说这只是一个地方而你想要硬编码,那就这样吧。
一种选择是将其放在一个模型中,例如
class YourModel extends AppModel {
//all your other definitions
public function getTitles() {
return array(
0 => __('Mr', true),
1 => __('Mrs', true),
2 => __('Miss', true));
}
}
在控制器中执行
public function add() {
$this->set('titles', $this->YourModel->getTitles());
if ($this->request->is('post')) {
//etc
但是,我认为您没有合适的模型来添加该功能。您打算在哪里添加它?用户模型可能吗?例如,它不能像Post模型那样没有任何意义......所以,给它一个想法,如果模型中有逻辑位置你可以放置该函数,那么继续。
否则,如果只是一次只在一个地方使用一个表单,为什么不将它硬编码到视图或控制器?
对于较大的列表,我的建议是在我所展示的模型中进行(但我坚持认为,把它放在模型中,这是合乎逻辑的)。好吧,我宁愿有一个表并引用这些值,但它不是强制性的(虽然给它一个想法,实际上没那么多工作,是吗?对于更大的列表,我的意思)。