John Doe
John Doe

Reputation: 649

CakePHP multiple select "selected" is not working

I have a multiple select input in my edit form:-

<?php echo $this->Form->input('Article.tags', array('type' => 'select', 'multiple' => true, 'options' => $tags, 'selected' => array($selected))); ?>

When echo-ed, the $selected variable will look like this:-

"MySQL", "PHP"

However, the input does not automatically select the option that matches the tag.

However, when I manually put in the selected option, it will automatically select that two option; e.g.

<?php echo $this->Form->input('Article.tags', array('type' => 'select', 'multiple' => true, 'options' => $tags, 'selected' => array("MySQL", "PHP"))); ?>

Is there anyway to fix this? Thanks.

Upvotes: 12

Views: 17552

Answers (5)

Sumon Sarker
Sumon Sarker

Reputation: 2795

In CakePHP 3.x version, You can set value to preselect from the lists

echo $this->Form->select(
    'Article.tags',
    ['PHP','MySQL','jQuery','AJAX'],
    [
        'multiple' => true,
        'value' => ['MySQL','AJAX']
    ]
);

HTML elements with values MySQL and AJAX will be rendered as preselected

Upvotes: 2

mindsupport
mindsupport

Reputation: 488

No need to do selected attribute

For e.g:

in controller:

$this->request->data = $this->Article->read(null, $id);

$this->set(array(
        'centers' => $this->Center->find('list'),
        'shopCategories' => $this->ShopCategory->find('list'),
        'brands' => $this->Brand->find('list')
    ));

in view:

echo $this->Form->input('Center', array('multiple' => 'multiple')); 

that's all!

Upvotes: 1

user2659555
user2659555

Reputation: 69

Use default keyword:

<?php echo $this->Form->input('Article.tags',array('options'=>$tags,'type'=>'select','label'=>'TDSP','class'=>'distributeSelect','multiple'=> 'true','default' => $selected));?>

Upvotes: 5

John Doe
John Doe

Reputation: 649

Ahh, I got this fixed.

I was looking at the wrong direction. I assumed that the selected values should be in string form with quotes and comma separated. (e.g. "MySQL", "PHP", "jQuery").

Instead, it should be in array format without any quote and comma. e.g.

Array
(
    [0] => MySQL
    [1] => PHP
    [2] => jQuery
)

Once I've got the array sorted out I pass it into view; e.g. $this->set('selected', $myArray);

Then on the form, I would just have to echo it out like this:-

<?php echo $this->Form->input('Article.tags', array('type' => 'select', 'multiple' => true, 'options' => $tags, 'selected' => $selected)); ?>

Upvotes: 16

FrontEnd Expert
FrontEnd Expert

Reputation: 5803

cake php is totaly based on naming convention and array formating..

try to do like this:-

<?php echo $this->Form->input('Article.tags',array('options'=>$tags,'type'=>'select','label'=>'TDSP','class'=>'distributeSelect','multiple'=> 'true','selected' => $selected));?>

Upvotes: 0

Related Questions