Странное поведение delete cgridview

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
pimshtein
Сообщения: 12
Зарегистрирован: 2013.10.16, 23:12

Странное поведение delete cgridview

Сообщение pimshtein »

Есть cgridview с таким кодом:
array(
'header' => 'Изменить',
'class' => 'bootstrap.widgets.TbButtonColumn',
'htmlOptions' => array('style' => 'text-align: center'),
'template' => '{view}{update}{delete}',
),
Это колонка с кнопками стандартными.
Ссылки здесь Yii генерирует по умолчанию, типа http://backoffice_php/index.php/currency/delete/782
Но!
При этом он навешивает на кнопку delete (для примера) такой вод код:

jQuery(document).on('click','#currencyTable a.delete',function() {
if(!confirm('Вы уверены, что хотите удалить данный элемент?')) return false;
var th = this,
afterDelete = function(){};
jQuery('#currencyTable').yiiGridView('update', {
type: 'POST',
url: jQuery(this).attr('href'),
success: function(data) {
jQuery('#currencyTable').yiiGridView('update');
afterDelete(th, true, data);
},
error: function(XHR) {
return afterDelete(th, false, XHR);
}
});
return false;
});

Выходит, что одновременно в url добавляется id в качестве get параметра и одновременно (!) генерируется код как POST запрос.
Тем более что в контроллере yii по умолчанию стоит фильтр на delete - передача только через POST.
К сожалению, я не силен в java script.
Вопрос: вот такое поведение - когда генерируется ссылка с GET параметром, но одновременно должен передаваться POST запрос, при этом стоит фильтр на запрет GET запроса на действие delete - это нормально?

*Небольшая правка:
только что смотрел пример из demo (blog), так вот, там есть такой код:
if(Yii::app()->request->isPostRequest)
{
// we only allow deletion via POST request
$this->loadModel()->delete();
.......

и далее в функции loadModel():
.......
if(isset($_GET['id']))
{
.......

То есть как так может быть? Вначале проверка на POST запрос, и если да, то берем данные из GET....
Что за бред, может кто-нибудь объяснить?
Последний раз редактировалось pimshtein 2013.12.19, 16:51, всего редактировалось 1 раз.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Странное поведение delete cgridview

Сообщение yiijeka »

Ну вы когда в actionUpgrade($id) отправляете пост данные с формы, вы же тоже отправляете на GET, POST данные. Так что нормально.
pimshtein
Сообщения: 12
Зарегистрирован: 2013.10.16, 23:12

Re: Странное поведение delete cgridview

Сообщение pimshtein »

yiijeka, можно подробнее? может быть пример приведете?
"отправляете пост данные с формы, вы же тоже отправляете на GET, POST данные"
pimshtein
Сообщения: 12
Зарегистрирован: 2013.10.16, 23:12

Re: Странное поведение delete cgridview

Сообщение pimshtein »

Дошло, спасибо. Только одно непонятно: зачем делать post запрос по умолчанию, если в этот Post никакие данные не передаются?
Нельзя ли привести пример, где по нажатию На delete в cgridview передавались бы post параметры?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Странное поведение delete cgridview

Сообщение yiijeka »

Какие вам POST нужно отправить? Это нужно вешать на кнопку функцию с ajax запросом, а перед тем создать объект data c помощью http://jquery-docs.ru/ajax/serialize/ и поместить его в data POST AJAX запроса.
AlTiger
Сообщения: 199
Зарегистрирован: 2012.01.15, 18:37

Re: Странное поведение delete cgridview

Сообщение AlTiger »

domain.com/controller/delete/782 -> это правило хорошего тона, чтобы очевидно было что удалять.
POST -> защита от csrf (http://ru.wikipedia.org/wiki/%D0%9F%D0% ... 0%BE%D0%B2)
Ответить