Ошибка в мануале в CForm->submitted

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
neverwinter
Сообщения: 146
Зарегистрирован: 2014.03.20, 08:45

Ошибка в мануале в CForm->submitted

Сообщение neverwinter »

Если используется конструктор форм, то для $form->submitted (...) (класса CForm) нужно указать Имя Модели, а не имя кнопки как написано в мануале. Потому что если указать в описании формы dropdownlist AJAX, то параметр кнопки не шлётся, но есть массив с именем Модели.

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

class TestController extends Controller
{
    public function actionIndex()
    {
        $model = new MyModel;
        $form = new CForm('application.views.tests.MyForm',$model);
        if(Yii::app()->request->isAjaxRequest)
        {
            if ($form->submitted('MyModel'))
            {
                ...
            };
        }
    }
}
 
Пример конфига ('application.views.tests.MyForm') для Конструктора Формы

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

<?php
return array(
    'elements'=>array(
        'selectedMethod'=>array(
            'type'=>'dropdownlist',
            'items'=>array('method1','method2','method3'),
            'ajax'=>array('type' => 'POST',
                'url'=>Yii::app()->createUrl('test/index'),
                'update' => '#ddlUpdate'
            ),
            'prompt'=>'Выберите справочник'
        ),
    ),
    'buttons'=>array(
        'update'=>array(
            'type'=>'submit',
            'label'=>'обновить',
        ),
    ),
);
 
В этой теме "Передача CForm через ajax" viewtopic.php?f=3&t=17408 более
подробно описано.

В мануале указано так http://www.yiiframework.com/doc/api/1.1 ... ted-detail
$buttonName string the name of the submit button
А надо указать что-то типа "the name of the model".
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Ошибка в мануале в CForm->submitted

Сообщение lancedevnull »

в мануале не про аякс
neverwinter
Сообщения: 146
Зарегистрирован: 2014.03.20, 08:45

Re: Ошибка в мануале в CForm->submitted

Сообщение neverwinter »

lancedevnull писал(а):в мануале не про аякс
Но этот метод можно использовать для AJAX.
neverwinter
Сообщения: 146
Зарегистрирован: 2014.03.20, 08:45

Re: Ошибка в мануале в CForm->submitted

Сообщение neverwinter »

lancedevnull писал(а):в мануале не про аякс
Eсли форму сгенерировала CForm (Конструктор Форм), то она должна уметь обработать эти присланные POST-данные и не важно кем были они отправлены. Формат POST-данных не меняется от того кто пришлёт данные с формы.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Ошибка в мануале в CForm->submitted

Сообщение Ekstazi »

Не аргумент. Это jquery не умеет слать имя кнопки при аякс отправке формы. Причем здесь yii ? Пишите им. У меня даже где-то фикс валялся для такого поведения jq, могу поискать если надо.
neverwinter
Сообщения: 146
Зарегистрирован: 2014.03.20, 08:45

Re: Ошибка в мануале в CForm->submitted

Сообщение neverwinter »

слать имя кнопки
Что очень странно и бессмысленно. Т.к. для обработки нужны лишь данные. И ИМХО наличие данных нужно проверять.

Какой практическая польза от имени кнопки ?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Ошибка в мануале в CForm->submitted

Сообщение Ekstazi »

Вот у вас есть форма в блоге с двумя кнопка, одна предпросмотр вот и думайте. Одна форма, два разных сценария обработки в зависимости от кнопки. А jquery её не шлет.
neverwinter
Сообщения: 146
Зарегистрирован: 2014.03.20, 08:45

Re: Ошибка в мануале в CForm->submitted

Сообщение neverwinter »

Ekstazi писал(а):Вот у вас есть форма в блоге с двумя кнопка, одна предпросмотр вот и думайте. Одна форма, два разных сценария обработки в зависимости от кнопки. А jquery её не шлет.
Т.е. в Yii сделали странный свой с ничем другим не совместимый метод отправки данных с формы. Для этого придумали добавлять к POST данным имя кнопки. И это сломало совместимость с другими javascript-библиотеками (JQuery). А могли бы просто во время отправки формы изменять скрытое поле (hiddenField) в форме и записывать в это поле имя кнопки (или формы form_id).

А чтобы это поле не сломало валидацию в Действии, то перед валидацией делать

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

unset ($_POST['form_id'])
.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Ошибка в мануале в CForm->submitted

Сообщение Ekstazi »

Я уже объяснил вам проблему 2 раза. Здесь вы на ситуацию никак не повлияете. Пишите баг в команду jquery. Остальные библиотеки типа fullajax прекрасно работают с этим методом в yii. Гугл вам в помощь
Ответить