@EVOSandru6

Почему в Yii может не выполняется post Запрос?

Заместо того, чтобы входить в тело post после нажатия на кнопку submit, вылезает такое сообщение с ошибкой 500 на текущий action в консоли firebug - а . Ajax кнопку я не использую, только ajax валидацию.

Ошибка в консоли:
POST drive/sadmin/configUser/create 500 (Internal Server Error)

Форма:
<div class="form">

<?php $form=$this->beginWidget('CActiveForm',
[
	'id'=>'config-user-form',
    'enableAjaxValidation' => true,
    'enableClientValidation'=>true,
    'method'=>'post',
    'clientOptions'=>
    [
        'validateOnSubmit'=>true,
    ],
    'htmlOptions' =>
    [
        'enctype' => 'multipart/form-data'
    ],
]);
 ?>
	<p class="note">Поля со <span class="required">*</span> обязательны.</p>

	<?php echo $form->errorSummary($model); ?>
    <ul class="nav nav-tabs nav-catalog">
        <li class="active"><a data-toggle="tab" href="#panel1">RU</a></li>
        <li><a data-toggle="tab" href="#panel2">kz</a></li>
        <li><a data-toggle="tab" href="#panel3">en</a></li>
    </ul>
    <div class="tab-content">
        <div id="panel1" class="tab-pane fade in active">
            <table class="table">
                <tr>
                    <td>
                        <?php echo $form->labelEx($model,'name'); ?>
                    </td>
                    <td>
                        <?php echo $form->textField($model,'name',['size'=>60,'maxlength'=>255, 'placeholder'=>'Отображать непрочитанные сообщения']); ?>
                        <?php echo $form->error($model,'name'); ?>
                    </td>
                </tr>
                <tr>
                    <td>
                        <?php echo $form->labelEx($model,'description'); ?>
                    </td>
                    <td>
                        <?php echo $form->textArea($model,'description',array('rows'=>6, 'cols'=>50, 'placeholder'=>'Описание')); ?>
                        <?php echo $form->error($model,'description'); ?>
                    </td>
                </tr>
            </table>
        </div>
        <div id="panel2" class="tab-pane fade">
            <table class="table">
                <tr>
                    <td>
                        <?php echo $form->labelEx($model,'name_kz'); ?>
                    </td>
                    <td>
                        <?php echo $form->textField($model,'name_kz',['size'=>60,'maxlength'=>255,'placeholder'=>'kz название' ]); ?>
                        <?php echo $form->error($model,'name_kz'); ?>
                    </td>
                </tr>
                <tr>
                    <td>
                        <?php echo $form->labelEx($model,'description_kz'); ?>
                    </td>
                    <td>
                        <?php echo $form->textArea($model,'description_kz',array('rows'=>6, 'cols'=>50, 'placeholder'=>'kz описание')); ?>
                        <?php echo $form->error($model,'description_kz'); ?>
                    </td>
                </tr>
            </table>
        </div>
        <div id="panel3" class="tab-pane fade">
            <table class="table">
                <tr>
                    <td>
                        <?php echo $form->labelEx($model,'name_en'); ?>
                    </td>
                    <td>
                        <?php echo $form->textField($model,'name_en',['size'=>60,'maxlength'=>255,'placeholder'=>'en название']); ?>
                        <?php echo $form->error($model,'name_en'); ?>
                    </td>
                </tr>
                <tr>
                    <td>
                        <?php echo $form->labelEx($model,'description_en'); ?>
                    </td>
                    <td>
                        <?php echo $form->textArea($model,'description_en',array('rows'=>6, 'cols'=>50, 'placeholder'=>'en описание')); ?>
                        <?php echo $form->error($model,'description_en'); ?>
                    </td>
                </tr>
            </table>
        </div>
    </div>
    <table class="table crudTable">
        <tr>
            <td>
                <?php echo $form->labelEx($model,'order_sort'); ?>
            </td>
            <td>
                <?php echo $form->numberField($model,'order_sort'); ?>
                <?php echo $form->error($model,'order_sort'); ?>
            </td>
        </tr>
        <tr>
            <td>
                <?php echo $form->labelEx($model,'status'); ?>
            </td>
            <td>
                <?php echo $form->dropDownList($model,'status',['1'=>'Активен', '2'=>'Неактивен' ]);  // CHtml::listData ?>
                <?php echo $form->error($model,'status'); ?>
            </td>
        </tr>
        <tr>
            <td>
                <?php echo $form->labelEx($model,'exist'); ?>
            </td>
            <td>
                <?php echo $form->checkBox($model,'exist'); ?>
                <?php echo $form->error($model,'exist'); ?>
            </td>
        </tr>
    </table>
	<div class="row buttons">
		<?php echo CHtml::submitButton($model->isNewRecord ? 'Создать' : 'Сохранить', ['class'=>'btn btn-primary']); ?>
	</div>
<?php $this->endWidget(); ?>
</div><!-- form -->


В качестве action - ов использую внешние действия:
https://github.com/ElisDN/crud-actions
www.elisdn.ru/blog/24/vinosim-deistviia-kontroller...

Я попадаю в метод run класса DCreateAction . Проверил с помощью die();
if(isset($_POST[$modelName])) не попадаю. $modelName выводит класс модели правильно (ConfigUser).
Вот базовый контроллер, от которого наследуюсь, в нем подключаю внешние действия:
Yii::import('crud.components.*');

class DController extends Controller
{
    public function filters()
    {
        return
        [
            'accessControl',
            'postOnly + delete',
        ];
    }
    public function accessRules()
    {
        return array
        (
            array('allow',
                'actions'=>array('create', 'update', 'delete', 'view', 'admin', 'index','toggle', 'test'),
                'roles'=>array('4'),
            ),
            array('deny',
                'users'=>array('*'),
            ),
        );
    }
    public function actions()
    {
        return
        [
            // в админке используем по умолчанию actionAdmin вместо actionIndex
            // и задаём отдельное представление для оптимизации Ajax обновления грида
            'index'=>
            [
                'class'=>'DAdminAction',
                'view'=>'admin',
                'ajaxView'=>'_grid'
            ],
            'update'=>'DUpdateAction',
            'toggle'=>
            [
                'class'=>'DDoggleAction',
                'attributes' => array('public', 'popular')
            ],
            'delete'=>'DDeleteAction',
            'create'=>'DCreateAction',
            // Разрешаем получение данных по JSON при наличии $_GED['json']
            'view'=>
            [
                'class'=>'DViewAction',
                'json'=>true
            ]
        ];
    }
}


Вот сам контроллер в админке, действие которого create глючит:

class ConfigUserController extends DController
{
	public $layout='/layouts/column2';
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='config-user-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}


Вот модель:
<?php
class ConfigUser extends ActiveRecord
{
	public function tableName()
	{
		return 'f_config_user';
	}
	public function rules()
	{
		return array
        (
            [['name'], 'required'],
			array('status, sys_date, sys_date_update, sys_user, exist', 'numerical', 'integerOnly'=>true),
			array('name, name_kz, name_en', 'length', 'max'=>255),
			array('description, description_en, description_kz', 'safe'),
			array('id, name, name_kz, name_en, description, description_en, description_kz, status, sys_date, sys_date_update, sys_user, exist', 'safe', 'on'=>'search'),
		);
	}
    public function behaviors()
    {
        return
        [
            'log'=>
            [
                'class'=>'ext.behaviors.LogBehavior',
            ],
        ];
    }
	public function relations()
	{
		return array
        (
			'lUser22Configs' => array(self::HAS_MANY, 'LUser22Config', 'id_2'),
		);
	}

	public function attributeLabels()
	{
		return array
        (
			'id' => 'Код',
			'name' => 'Название',
			'name_kz' => 'Название Kz',
			'name_en' => 'Название En',
			'description' => 'Описание',
			'description_en' => 'Описание En',
			'description_kz' => 'Описание Kz',
			'status' => 'Статус',
			'sys_date' => 'Sys Date',
			'sys_date_update' => 'Sys Date Update',
			'sys_user' => 'Sys User',
			'order_sort' => 'Порядок',
			'exist' => 'Показывать?',
		);
	}

	public function search()
	{
		$criteria=new CDbCriteria;
		$criteria->compare('id',$this->id);
		$criteria->compare('name',$this->name,true);
		$criteria->compare('name_kz',$this->name_kz,true);
		$criteria->compare('name_en',$this->name_en,true);
		$criteria->compare('description',$this->description,true);
		$criteria->compare('description_en',$this->description_en,true);
		$criteria->compare('description_kz',$this->description_kz,true);
		$criteria->compare('status',$this->status);
		$criteria->compare('sys_date',$this->sys_date);
		$criteria->compare('sys_date_update',$this->sys_date_update);
		$criteria->compare('sys_user',$this->sys_user);
		$criteria->compare('exist',$this->exist);

        $criteria->condition = 'exist != 2';

        return new CActiveDataProvider($this,
        [
            'criteria'=>$criteria,
            'pagination'=>array('pageSize'=>100),
        ]);
	}
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
}


Помогите пожалуйста!
  • Вопрос задан
  • 754 просмотра
Решения вопроса 2
@matperez
1. включите режим отладки, если он еще не включен www.yiiframework.com/doc/guide/1.1/ru/basics.entry
2. посмотрите в браузере что отвечает сервер (не просто код ответа, а полный ответ). в firebug не помню как, а в chrome dev tool можно в разделе Network кликнуть по запросу и увидеть во вкладке Response ответ сервера.
Ответ написан
Комментировать
@EVOSandru6 Автор вопроса
Вот в чем проблема крылась:

protected function performAjaxValidation($model)

public function performAjaxValidation($model)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы