Удаление статьи

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Удаление статьи

Сообщение darlov »

Доброе время суток.
Скажу сразу, что это мой первый фреймворк, поэтому изучение дается очень тяжело.
Создаю пошагово блог и пытаюсь разбираться в коде.
Зашел в тупик. Не понимаю как осуществляется удаление или одобрение комментариев? а именно как запускается метод в контроллере
Контроллер

Код: Выделить всё

public function actionApprove()
public function actionDelete()
{
    if(Yii::app()->request->isPostRequest)
    {
        // we only allow deletion via POST request
        $this->loadModel()->delete();
 
        if(!isset($_GET['ajax']))
            $this->redirect(array('index'));
    }
    else
        throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}
 
А в методе loadModel()

Код: Выделить всё

public function loadModel()
{
    if($this->_model===null)
    {
        if(isset($_GET['id']))
        {
            if(Yii::app()->user->isGuest)
                $condition='status='.Post::STATUS_PUBLISHED
                    .' OR status='.Post::STATUS_ARCHIVED;
            else
                $condition='';
            $this->_model=Post::model()->findByPk($_GET['id'], $condition);
        }
        if($this->_model===null)
            throw new CHttpException(404,'Запрашиваемая страница не существует.');
    }
    return $this->_model;
} 
Какой запрос мне нужно осуществить, чтоб одновременно он был как POST и GET?
И для чего созданы такие заморочки?
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: Удаление статьи

Сообщение chang »

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

if(!isset($_GET['ajax']))
$this->redirect(array('index'));
эта шняга тупо "идентифицирует" аякс-запрос
в частности CGridView при нажатии на кнопку "удалить" формирует URL-адресс типа такого

index.php?r=контролер/действие&ajax=1&id=айдишник_поста

т.е. если запрос идет через аякс, по после него "удаляемая запись" из HTML-кода будет удалена JavaScript-том
а потому нет необходимости делать редирект

ну а если удаление делается не через аякс - то нужно обновить страницу чтоб с нее "исчезла" удаляемая запись ... вот и все

гу а чтоб вызвать тот метод , следуя тому же фэншую
нужно аяксом послать пост-запрос на url index.php?r=контролер/действие&ajax=1&id=айдишник_поста
вот и все

сделать это легко и быстро можно этим http://api.jquery.com/jQuery.post/
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Удаление статьи

Сообщение darlov »

Спасибо большое.
Как я понимаю, для удаления статьи без Ajax, необходимо создать кнопку, прописать mthod ="Post", а в действии прописать url с get параметрами- action ="index.php?r=контролер/действие&ajax=1&id=айдишник_поста", если не так поправьте пожалуйста?
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Удаление статьи

Сообщение darlov »

Еще один вопрос, как осуществить такой запрос с помощью созданной кнопки в 'CButtonColumn' виджета CGridView?
С помощью такой кнопки, отправляется только методом GET.

Код: Выделить всё

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,'columns'=>array(
          
            array('name'=>'content','type'=>'raw','value'=>'CHtml::encode($data->content)'),
            array('name'=>'create_time','type'=>'raw','value'=>'CHtml::encode($data->create_time)'),
            array('class'=>'CButtonColumn',
                  'template'=>'{app}',
                  'buttons'=>array(
                            'app'=>array(
                                'label'=>'Одобрить',
                                'url'=>'Yii::app()->createUrl("comment/approve", array("id"=>$data->id))',
                    
                ))
                )))); ?>
Ответить