- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
<?php
/*
Виджет для формы логина
*/
class UserLogin extends CWidget
{
public function run()
{
$model = new Login;
if(!Yii::app()->user->isGuest)
{
$this->render('loginOut', array('model'=>$model));
} else {
$this->render('loginForm', array('model'=>$model));
}
}
}
/**
* модель логина
*/
class Login extends CFormModel
{
public $login;
public $pass;
public $rememberMe;
private $_identity;
public function rules()
{
return array(
// username and password are required
array('login, pass', 'required', 'message'=>'поле {attribute} не может быть пустым'),
// rememberMe needs to be a boolean
array('rememberMe', 'boolean'),
// password needs to be authenticated
array('pass', 'authenticate'),
);
}
/**
* Declares attribute labels.
*/
public function attributeLabels()
{
return array(
'login'=>'Логин',
'pass'=>'Пароль',
'rememberMe'=>'Запомнить',
);
}
/**
* Authenticates the password.
* This is the 'authenticate' validator as declared in rules().
*/
public function authenticate($pass,$params)
{
$this->_identity=new UserIdentity($this->login,$this->pass);
if(!$this->_identity->authenticate())
$this->addError($pass, empty($params['message'])?'неправильный лоин или пароль':$params['message']);
}
/**
* Logs in the user using the given username and password in the model.
* @return boolean whether login is successful
*/
public function login()
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($this->login,$this->pass);
$this->_identity->authenticate();
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
return true;
} else {
return false;
}
}
}
Vasiliy 03.09.2011 12:44 # +2
sayidandrtfm 03.09.2011 17:26 # +1
За таоке(C-prefix) именование - "Повбивав би, блядь!"(с).
Nemoden 04.09.2011 04:49 # +3
Чем плохо C-prefix именование?
sayidandrtfm 04.09.2011 13:14 # 0
Разрыв шаблона после MFC не только у меня...
>префикс "C" для core-классов
CrFormModel, CoreFormModel... не, менее очевидно?
>Чем плохо C-prefix именование?
http://insidecpp.ru/art/23/
Nemoden 04.09.2011 13:36 # 0
А вот переменные сплошь и рядом называть sText, iAge и т.д. - вот это уже бред. Я сам, помнится, пользовался венгерской нотацией некоторое время, пока не понял, что это - .овно и мне не требовались какие-то статьи в интернете, чтобы это понять самостоятельно.
А то, что у вас там после MFC расстройства какие-то, что любая конвенция именования классов при помощи префиксов вас так сильно беспокоит, ну... могу посочувствовать, если хотите.
sayidandrtfm 04.09.2011 14:18 # +1
А при необходимости изменить архитектуру — "слов нет, одни эмоций"(с).
>В Yii используется "C"-префикс для классов
> Автор фреймверка "забронировал" префикс "C" для core-классов
Так для всех классов или только для core-классов? Или для всех core-классов?
>А то, что у вас там после MFC расстройства какие-то...
Обратите внимание: I — для интерфейсов, С — для классов это
общепринятая конвенция именования типов данных для многих ООП ЯП.
Из 10 программистов как минимум 9 предположат, что CFormModel - Calss From Model, но уж никак не Core.
У автора получился нахлёст конвенций.
[obviousness]
Т. е., для осваивающего архитектуру какого-то фреймворка программиста, время, при использовании
стандартных решений архитектором, будет значительно меньше.
[/obviousness]
Исходя из выше сказанного, имеем: оригинальность именования оправданная не прагматизмом, но непонятно чем.
Nemoden 04.09.2011 14:48 # −1
"C" забронирован в Yii для всех core-классов.
9 программистов из 10 (в этом случае: 9 нормальных, 1 - говнокодер) прочитают документацию к фреймверку, где написано, что и как именуется, что в каких директориях находится и прочие конвенции. Зайдите на форум коммьюнити фреймверка и попробуйте найти хоть 1 тему, где кто-то был бы не согласен с конвенцией и поймете, что не только я один считаю конвенцию вполне приемлемой.
[obvious]Чтобы прочитать 2 строчки текста, в которых говорится, что имена всех core-классов фреймверка начинаются с "C" нужно меньше 10 секунд, поэтому время на освоение не будет значительно меньше[/obvious]
Оригинальность? [sarcasm]Ну да "C" префикс для классов - жутко оригинально - как и додумались до такого?[/sarcasm]
sayidandrtfm 04.09.2011 16:07 # 0
Согласен, но: IDE современные, а восприятие с той же скоростью не работает, особенно на длительных интервалах в больших проектах.
>поэтому время на освоение не будет значительно меньше
А после продолжительного опыта с тем же MFC, тоже не будет?
Некоторая инертность восприятия присуща всем человекаобразным, а зная это, возможно, есть смысл предусмотреть такой момент.
Впрочем, дело личное...
Моё мнение таково: если и использовать C-префикс конвенцию, при именовании типов данных, то очевидно, делать это в контексте общепринятой конвенции, обратное - не прагматично.
В случае фреймворка Yii, 3 литеры (ore — Core) добавили бы только понятности.
>как и додумались до такого?
[wikipediaface] http://ru.wikipedia.org/wiki/Венгерская_нотация [/wikipediaface]
roman-kashitsyn 06.09.2011 18:07 # 0
Nemoden 06.09.2011 18:40 # 0
roman-kashitsyn 06.09.2011 18:46 # 0
объявил автор кода?
Nemoden 06.09.2011 18:54 # 0
Nemoden 04.09.2011 04:50 # +1
Nemoden 04.09.2011 04:52 # 0
UserLogin должен жить в отдельном файле так, что spl_autoload мог бы его найти, но это больше замечание, чем придирка. Опять же - это не говнокод.
Arris 04.09.2011 19:58 # −3
Nemoden 05.09.2011 02:25 # +2
Не понимаю, почему каждый считает своим долгом, не зная фреймверка, пытаться обосрать его только потому что кто-то не очень умный запростил его кусок на говнокоде.
Arris, почему бы вам свой функционал аутентификации пользователей не выложить, а я найду (почти уверен в этом) чем он хуже представленного тут в этом "говнокоде". Идет?
Arris 06.09.2011 17:32 # 0
Имхо, лишнее тут общая перегруженность кода наворотами. Впрочем, это общая беда 99% современных проектов.
Учитывая что мой функционал был наглухо необъектным, любитель объектов его объявит ересью по умолчанию. Но он работал :)
К тому же любые два неидентичных куска кода можно, сравнив, найти, чем один хуже другого. Или лучше другого.
Nemoden 06.09.2011 18:34 # 0
class Login:
- определение полей формы (public-properties)
- инстанс identity (будет типа CWebUser или унаследованном от него. Хранит всю информацию о пользователе, т.к. у нас форма авторизации, это нам надо)
- правила валидации данных, переданных из формы + темплейты ошибок, если валидация не прошла. Правила валидации можно не указывать, но тогда я бы может и заплюсовал бы этот "ГК".
- attributeLabels - сопоставление human-readable названий идентификаторам полей. Тоже можно не указывать, но лучше это хранить в модели - обеспечивает консистентность данных (не надо будет потом по всему коду менять "Логин" на "Имя"). Для интернациональных проектов можно делать 'name' => Yii::t('Имя'), что, опять же, очень удобно.
- функция аутентификации
- функция логина
Для последних 2х все в комментах к функциям написано :-)
Просто нужно знать фреймверк (к стати, очень рекомендую ;) ). Ничего "навороченного" тут нет.
P.S. я не "любитель объектов" :)
пишу и так и эдак, в зависимости от задачи
Arris 07.09.2011 10:12 # 0
Vasiliy 07.09.2011 11:18 # 0
Nemoden 07.09.2011 14:38 # 0
- где надо ООП, где не надо
- чего там куда наследовать
- какие нафиг модификаторы доступа
- че за интерфейсы
- чем абстрактный класс отличается от обычного
- нафига вообще абстрактный класс нужен если нельзя создать его инстанс
- что за перегрузки операторов
- почему надо имплементировать интерфейсы
- зачем разработчики языка вообще написали стандартные интерфейсы
и т.д.
xyzdsnxyz 10.09.2011 11:06 # 0