Ответы пользователя по тегу Yii
  • Как в Yii нормально создавать отдельные модели для коллекций?

    zetamen
    @zetamen
    В поисках нового
    Нормально, для таких классов можно наследоваться от CModel
    Ответ написан
    Комментировать
  • Как написать правило для urlManager?

    zetamen
    @zetamen
    В поисках нового
    ЧПУ можно сделать так

    Добавить правило
    '<link:[\w\-]+>' => 'site/post',

    В контроллере SiteController добавить action
    public function actionPost()
    {
    	$link = Yii::app()->request->getParam('link');
    	if ($link == null)
    	{
    		throw new CHttpException(404, 'The requested page does not exist.');
    	}
    	$post = Post::model()->findByAttributes(array('link' => $link));
    	if ($post == null)
    	{
    		throw new CHttpException(404, 'The requested page does not exist.');
    	}
    	$this->render('post', array(
    		'model' => $post
    	));
    }
    Ответ написан
    Комментировать
  • Yii: rules и очень много сценариев, в которых чёрт ногу сломит?

    zetamen
    @zetamen
    В поисках нового
    Можно скомпоновать правила по сценариям, в вашем примере это выглядело бы так:
    public function rules()
    {
    	return array(
    		array('phone', 'length', 'max' => 12),
    		array('icq', 'length', 'max' => 9),
    		array('email', 'email'),
    		array('login', 'length', 'max' => 80),
    		array('email', 'length', 'max' => 200),
    		//registration
    		array('login, email, password, retypePassword', 'required', 'on'=>'registration'),
    		array('login, email', 'unique', 'on'=>'registration'),
    		array('login', 'match', 'pattern' => '~^[\da-zа-яёА-ЯЁ\.\-@_\+]+$~i', 'on'=>'registration'),
    		array('retypePassword', 'compare', 'compareAttribute' => 'password', 'on'=>'registration')
    		//updateByAdmin
    		array('login, email, password, retypePassword', 'required', 'on'=>'updateByAdmin'),
    		array('login, email', 'unique', 'on'=>'updateByAdmin'),
    		array('login', 'match', 'pattern' => '~^[\da-zа-яёА-ЯЁ\.\-@_\+]+$~i', 'on'=>'updateByAdmin'),
    		array('retypePassword', 'compare', 'compareAttribute' => 'password', 'on'=>'updateByAdmin')
    		//updateByModerator
    		array('email', 'required', 'on'=>'updateByAdmin'),
    		array('login', 'match', 'pattern' => '~^[\da-zа-яёА-ЯЁ\.\-@_\+]+$~i', 'on'=>'updateByAdmin'),
    		array('email', 'unique', 'on'=>'updateByAdmin'),
    		//changePassword
    		array('password, currentPassword, retypePassword', 'required', 'on'=>'changePassword'),
    		array('currentPassword', 'passwordValidator', 'on'=>'changePassword'),
    		array('retypePassword', 'compare', 'compareAttribute' => 'password', 'on'=>'changePassword')
    		//changeEmail
    		array('email, currentPassword', 'required', 'on'=>'changeEmail'),
    		array('email', 'unique', 'on'=>'changeEmail'),
    		array('currentPassword', 'passwordValidator', 'on'=>'changeEmail'),
    	);
    }


    В чем фишка всего этого? Кода, по сравнению с вашим примером, стало больше, но и его читаемость возросла.
    Ответ написан
    3 комментария
  • С какой версии начать изучение yii?

    zetamen
    @zetamen
    В поисках нового
    Лучше с 1.1.14.
    Стабильная, проверенная временем, имеющая уже множество расширений. Притом для вас это первый фрейморк, его будет проще изучать.
    Ответ написан
    Комментировать