Search code examples
yiiyii-components

Yii widget, does not work redirect after validation


I have widget and call it in the layout, why is not redirect to site/search?

<?php
class CSearch extends CWidget
{
    public $model;
    public function init()
    {
        $this->model = new SearchForm();
        if(Yii::app()->request->isAjaxRequest && Yii::app()->request->getPost('FormSearch'))
        {
            $this->model->attributes = Yii::app()->request->getParam('FormSearch');
            if($this->model->validate())
            {
                $this->owner->redirect(array('site/search', 'model' => $this->model->attributes));
            }
        }
    }
    public function run()
    {
        $this->render('search', array('model' => $this->model));
    }
}

form

<div class="header-search">
    <?php $form = $this->beginWidget('CActiveForm', array(
        'id' => 'search-form',
        'enableAjaxValidation' => true,
        'enableClientValidation' => true,
        'clientOptions' => array(
            'validateOnSubmit' => true,
            'validateOnChange' => false,
            'validateOnType' => false),
        'htmlOptions' => array('class' => 'form-search'),
    )); ?>
    <?php echo $form->error($model, 'search'); ?>
        <div class="input-append">
            <?php echo $form->textField($model, 'search', array('class' => 'span2', 'placeholder' => 'Поиск')); ?>
            <?php echo CHtml::htmlButton('<i class="icon-search"></i>', array('class' => 'btn', 'submit' => array('site/search')))?>
        </div>
    <?php $this->endWidget(); ?>
</div>

How is it done properly validated by means of a clique Yii? sorry for my english


Solution

  • Try instead:

    $this->owner->redirect(array('site/search', 'model' => $this->model->attributes));
    

    make:

    $route_params =  $this->model->attributes;
    array_unshift($route_params, 'site/search');
    $this->owner->redirect($route_params);
    

    It's must create URL /site/search?field1=va1&field2=val2...

    But I look at code: your variant must works too... Than you need correctly process $_GET params, such as:

    public function run()
    {
        if(!empty($_GET))
        {
            $model = new ModelAR(); // you ActiveRecord class
            $model->attributes = $_GET;
            $this->render('search', array('model' => $model));
        }
    }