Yii Framework — Использование CCheckBoxColumn для удаления нескольких

Сейчас я просто пытаюсь обернуть голову вокруг фреймворка yii, и я создал функцию для удаления нескольких записей базы данных одновременно. В представлении у меня есть сетка со ссылкой на каждый элемент и флажок рядом с ним

<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'htmlOptions'=>array(
'class'=>''
),
'columns'=>array(
...
array(
'class'=>'CLinkColumn',
'header'=>'Handle',
'labelExpression'=>'$data->handle',
'urlExpression'=>'Yii::app()->createUrl(".../item/view", array("id"=>$data->id))',
),
array(
'class'=>'CCheckBoxColumn',
'header'=>'Select',
'selectableRows'=>'2',
),
),

Затем далее вниз по странице я хочу кнопку (удалить выбранное), которая отправляет массив всех элементов в функцию удаления. Мои мысли были что-то вроде этого:

<a href="<?php echo Yii::app()->createUrl('.../item/bulkDelete','array("id" => $data->id)')?>"class="btn">Delete Selected</a>

Но я не понимаю, как получить ссылку для каждого проверенного элемента вместо:

"id" => $data->id

как я использовал для вызова передать элемент в функцию просмотра ранее. Если кто-то может помочь, это будет с благодарностью.

Редактировать:

Посмотреть:

$form = $this->beginWidget('CActiveForm', array(
'id' => 'itemForm',
'action' => array('.../item/bulkDelete'),
));

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'htmlOptions'=>array(
'class'=>''
),
array(
'class'=>'CLinkColumn',
'header'=>'Handle',
'labelExpression'=>'$data->handle',
'urlExpression'=>'Yii::app()->createUrl(".../item/view", array("id"=>$data->id))',
),
array(
'class'=>'CCheckBoxColumn',
'header'=>'Select',
'selectableRows'=>'2',
),
... //More Columns
), //End of Grid
...
echo CHtml::SubmitButton('Delete Multiple');
$this->endWidget();

контроллер:

public function actionBulkDelete()
{

if(isset($_POST['id'])&& !empty($_POST['id']))
{
Yii::app()->user->setFlash('success', 'Delete Items');
$this->redirect(array('.../item/index'));
}
else
{
Yii::app()->user->setFlash('success', 'No Items Selected');
$this->redirect(array('.../item/index'));
}


}

1

Решение

Оберните вид сетки внутри формы и внесите следующие изменения в свой columns массив:

$form = $this->beginWidget('CActiveForm', array(
'id' => 'some-grid-form',
'action' => array('myController/myAction'),
));

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'selectableRows' => 2,
'columns'=>array(
array(
'id' => 'id',
'class' => 'CCheckBoxColumn',
),
//... rest of your columns
),
array(
'class'=>'CButtonColumn',
),
),
));

echo CHtml::SubmitButton('Multiple Delete');
$this->endWidget(); // end form

И в вашем контроллере myAction:

public function actionmyAction()
{
if(isset($_POST['id']) && !empty($_POST['id'])) { //you'll get all the ids in an array
//print_r($_POST['id']);
//your delete function here, also add a few validation here to authenticate deletion
$ids = $_POST['id'];
$criteria = new CDbCriteria;
$criteria->addInCondition('id',$ids);
MyModel::model()->deleteAll($criteria);
//.... render with success flash message etc.
}
}
1

Другие решения

Других решений пока нет …