[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Маленькие хитрости по YII
lodas
Здравствуйте. Читал доки, но не совсем созрел ответ на эти вопросы:

1) Допустим у меня есть действия авторизация и регистрация. В rules авторизации я хочу проверить только два поля на required в свою очередь при регистрации больше и т.д. Вообщем я понял к каждому действию нужен свой подход. Можно ли для определенного action задавать свой rules и как?

2) Иногда в таблицах есть внешний ключ, можно ли перед сохранением в таблицу передать его в качестве параметра?
Что то типо такого:
$model->save(true, array('id_pol'=>$id));//где id_pol внешний ключ в этой таблице


3) Не совсем понятно как сделать ajax валидацию? Написал в view:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true,
));
?>

В контроллере:
// Для аякс валидации 
$this->performAjaxValidation($model);

Но почему то не срабатывает, может нужно переопределить метод или что то добавить еще?
AlmazDelDiablo
1. Посмотрите в валидаторах поля on и except, они позволяют подключить или исключить валидацию при определенном сценарии. Чтобы указать нужный сценарий, после создания модели, указываете имя сценария.

В модели:
public function rules() {
return array(
array('name', 'unique', 'on' => 'registration'), // сработает, только если $this->scenario == 'registration'.
array('name', 'exist', 'on' => 'login') // сработает, только если $this->scenario == 'login'.
);
}

В контроллере:
$user = new User();
$user->scenario = 'registration';


_____________
Блог | VK | GitHub | Twitch
lodas

AlmazDelDiablo, так.. первый вопрос уже решен- спасибо))
bestxp
Ну если быть точным то лучше так

new Users("login")
эстетичнее что ли
lodas
bestxp, спасибо а по второму и третьему вопросу кто нить знает?
T1grOK
Цитата (lodas @ 17.08.2013 - 10:32)
2) Иногда в таблицах есть внешний ключ, можно ли перед сохранением в таблицу передать его в качестве параметра?
Что то типо такого:
$model->save(true, array('id_pol'=>$id));//где id_pol внешний ключ в этой таблице

А почему типо? Метод save как раз принимает вторым параметром атрибуты.
Можно также сделать просто

$model->id_pol = $id;
$model->save(true);

Или

$model->attributes = array('id_pol'=>$id);
$model->save(true);


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Цитата (lodas @ 17.08.2013 - 10:32)
3) Не совсем понятно как сделать ajax валидацию? Написал в view:

Покажи экшн и метод performAjaxValidation.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
lodas
T1grOK,
2) так как я хотел:
$model->save(true, array('id_pol'=>$id));

К сожалению не работает, может я параметры не правильно передаю, или как их правильно в save передать?
3)
//функция аякс валидации
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}

В самом view:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true,
// 'enableClientValidation'=>true,
'clientOptions' => array(
'validateOnSubmit' => true, //или false - валидировать по нажатию на сабмит
'validateOnChange' => true, // валидировать при изменении поля
),
));
?>

В actionCreate:
// Для аякс валидации 
$this->performAjaxValidation($model);

lodas
Узнал что в эту веточку совсем не заходит, выводит AJAX FUUL!!:
if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
{
$msg=работал AJAX!!";
echo CActiveForm::validate($model);
Yii::app()->end();
}
else $msg="AJAX FUUL!!";

может дело в кнопке?
<?php echo CHtml::submitButton($model->isNewRecord ? 'Создать нового юзверя' : 'Save',array('name'=>'creat_user')); ?>

Вообще как расшифровать что в этой кнопке прописано?
а то я создавал через CRUD
bestxp
Итак напишу свой вариант я, на примере своего блога,
Итак у меня сейчас есть 2 формы связанные с пользователем, авторизация и регистрация, но исходя из дальнейшего развития сайта, у меня появидось модели наследованные от cformmodel в которых собственно и описана валидация, и чеоез них идут все процессы


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

А сценарии у меня для админ и не админ действий или админки где нужные различного рода валидации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.