0

我正在尝试使用一些选项填充 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   )); ?>

我收到错误未定义变量:标题

我也在模型中尝试过

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?

4

1 回答 1

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 模型那样没有任何意义……所以,考虑一下,如果模型中有一个合乎逻辑的位置,您可以放置​​该函数,然后继续。

否则,如果它只是一次在一个地方的一种形式,为什么不将它硬编码到视图或控制器中呢?

对于较大的列表,我的建议是在我展示的模型中执行此操作(但我坚持将其放在合乎逻辑的模型中)。好吧,我宁愿有一个表格并引用这些值,但这不是强制性的(尽管考虑一下,实际上并没有那么多工作,是吗?对于更大的列表,我的意思是)。

于 2013-05-30T14:34:53.823 回答