1 Мне эти тесты ни о чем не говорят. Нет примеров, нет подробного описания. 2 Давай один пример, например блог, с одинаковым фнукционалом, на Yii и Симфони - погоняем, посмотрим. 3 С выходом Симфони 2 они кое-что сперли в идейном плане с ИИ, и начали нагло пиарить, что типа их куча говно-кода работает быстрее чем Yii. Правда, на это авторы Yii отреагировали: на Yii форуме обсуждались скорости, 1-ые Симфони по-умолчанию много чего кеширует, 2-е у Yii по-умолчанию 2-я вложенность view
И, да, каждый фреймворк пишет что он быстрый. Что на сайте Yii написано что он быстрее симфони, что на DooPHP http://doophp.com/benchmark тоже написано, что Yii быстрее Симфони. Тесты тестам рознь.
- Молоток лучше отвертки, отверткой неудобно гвозди забивать. Вот молотком шурупы - это да! - Ничего ты не понимаешь. Попробуй молотком открутить крышку от телевизора. - Зачем мне крышка телевизора, у меня такой задачи нет. Я стену досками обшиваю! И все мои коллеги говорят, что отвертка - говно! - Ничего вы не понимаете, это молоток говно. Мы вот проводили тесты, и выяснили, что отвертка работает быстрее на 50%. и т.д. О чем спор то?
парень не верит проверенной информации (Инфа 100%) ну и так пустячковый холивар о сортах говна. Amertox какой блог, зачем всё это? может ещё что-нибудь по-сложнее написать? достаточно хеловорд
Полно, прекращайте спросить, лучше помогите мне разобраться с одним моментом Как в модели задать проверку для одного поля, чтобы оно было обязательно лишь для незарегистрированных посетителей, т.е. для гостей? Я так понимаю, что это нужно свой валидатор писать?
можно применять всякие калбаки и проверять перед сохранением зареген или нет, если нет, то делаешь что нужно бросаешь исключение => и повторный вызов формы или редирект на вход\регистрацию
Можно разные сценарии задать для зарегистрированных и нет. Как бы учить модель саму проверять состояние пользователя не очень правильно. Сказать это из контроллера более правильно, имхо.
Если более конкретно, то, есть форма для добавления комментария, на которой поле "Ваше имя". Если посетитель - гость, поле отображается и должно быть обязательно к заполнению, если посетитель - пользователь, поле не выводится. В лоб в модели такую проверку сделать, как я понял
У тебя в модели есть user_name и user_id, так? user_name обязательно только если user_id пустое? Ну или заполняй user_name в контролере для зарегистрированных (тогда user_name оставляешь обязательным и все), или свой метод-валидатор, или сценарии. Хотя я бы выбрал или первый или последний вариант... зачем зря свои валидаторы плодить.
в контроллере там где создаешь объект формы PHP: <?php $form = new CommentForm(); меняешь на PHP: <?php $scenario = if (/* user залогованый */) ? 'user' : 'guest'; $form = new CommentForm($scenario); И в модели добавляешь правило PHP: <?php public function rules() { return array( /* тут набор стандартных валидаторов */ array('name', 'required', 'on' => 'guest'), ); } PROFIT
MiksIr, так и есть, в модели есть username и user_id. Если посетитель - гость, то работаю с username, иначе с user_id. tommyangelo, спасибо, изящное решение, буду практиковаться далее
Mr. T А, еще я кое-чего не учел Это только правило валидации. А еще есть отображение элемента на форме. Там придется дополнительно проверку сделать. Например через ifAttributeRequired (точно не уверен, пишу по памяти)
tommyangelo, с формой я разобрался, просто проверяю посетитель гость или нет, пока хватает, капчу также вывожу
Есть еще вопрос, смотрю сейчас авторизацию в Yii с использованием БД, в частности, руководство по созданию блога. Суть поля salt в таблице tbl_user не уловил, а также использования соли при проверке пароля. Или здесь есть что-то неявное, или я точно что-то упускаю. Подскажите, пожалуйста
Padaboo, я, наверное, неправильно выразился, зачем соль при шифровании пароля нужна - ясно, но в описании авторизации в руководстве о ней практически не упоминается. К примеру, посмотрим код PHP: <?php class User extends CActiveRecord { ...... public function validatePassword($password) { return $this->hashPassword($password, $this->salt) === $this->password; } public function hashPassword($password, $salt) { return md5($salt . $password); } protected function generateSalt() { return uniqid('', true); } } , в таблице tbl_user есть поле salt, так вот, объясните, пожалуйста, где связь между этим кодом и полем в таблице, не понимаю...
Вроде разобрался, соль генерируется методом generateSalt() при регистрации пользователя и заносится в БД, больше она не меняется. В будущем берется значение соли из БД, пароль, который пришел с формы, шифруется и сравнивается с хешем, который в БД уже, так?
Угу. А если вы криптуете пароли crypt-ом, то и отдельное поле не нужно - там итоговый хеш в хитром формате, включающем в себя соль, и при проверке она выдергивается сама. $hash = crypt($pass) - создание хеша, соль генерится сама if ($hash == crypt($pass, $hash)) - проверка
Возник еще вопрос, по urlManager, в частности, о пейджере, сейчас ссылки имеют вид Код (Text): http://localhost/category/1/title/?page=3&ajax=yw0 , маялся, но так и не понял как сделать так Код (Text): http://localhost/category/1/title/page/3/ , реально вообще? , параметр Код (Text): ajax=yw0 убирается Код (Text): 'params' => array() так?