За последние 24 часа нас посетили 21960 программистов и 988 роботов. Сейчас ищут 654 программиста ...

Кружок по Yii

Тема в разделе "Прочие вопросы по PHP", создана пользователем Psih, 9 июл 2010.

?

Пользуетесь ли вы Yii?

  1. Нет, не пользуюсь.

    3 голосов
    33,3%
  2. Нет, у меня другой людимый фреймворк.

    1 голосов
    11,1%
  3. Начинаю с ним работать.

    3 голосов
    33,3%
  4. Да пользуюсь, всё хорошо.

    2 голосов
    22,2%
  1. Amertox

    Amertox Активный пользователь

    С нами с:
    21 мар 2011
    Сообщения:
    17
    Симпатии:
    0
    1 Мне эти тесты ни о чем не говорят. Нет примеров, нет подробного описания.

    2 Давай один пример, например блог, с одинаковым фнукционалом, на Yii и Симфони - погоняем, посмотрим.

    3 С выходом Симфони 2 они кое-что сперли в идейном плане с ИИ, и начали нагло пиарить, что типа их куча говно-кода работает быстрее чем Yii. Правда, на это авторы Yii отреагировали: на Yii форуме обсуждались скорости, 1-ые Симфони по-умолчанию много чего кеширует, 2-е у Yii по-умолчанию 2-я вложенность view
     
  2. Amertox

    Amertox Активный пользователь

    С нами с:
    21 мар 2011
    Сообщения:
    17
    Симпатии:
    0
    И, да, каждый фреймворк пишет что он быстрый. Что на сайте Yii написано что он быстрее симфони, что на DooPHP http://doophp.com/benchmark тоже написано, что Yii быстрее Симфони.

    Тесты тестам рознь.
     
  3. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    но там же не ссылки на сайты фреймворков, правда же? так что Yii вылетает.
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    - Молоток лучше отвертки, отверткой неудобно гвозди забивать. Вот молотком шурупы - это да!
    - Ничего ты не понимаешь. Попробуй молотком открутить крышку от телевизора.
    - Зачем мне крышка телевизора, у меня такой задачи нет. Я стену досками обшиваю! И все мои коллеги говорят, что отвертка - говно!
    - Ничего вы не понимаете, это молоток говно. Мы вот проводили тесты, и выяснили, что отвертка работает быстрее на 50%.

    и т.д.

    О чем спор то?
     
  5. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    парень не верит проверенной информации (Инфа 100%) ну и так пустячковый холивар о сортах говна.

    Amertox
    какой блог, зачем всё это? может ещё что-нибудь по-сложнее написать? достаточно хеловорд
     
  6. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ИМХО, скорость фреймворка не настолько важна, как удобство и гибкость использования.
     
  7. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    конечно, не важна, если на сайте в день 3.5 человека.
     
  8. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Есть различные механизмы кеширования.
     
  9. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    на кеш уповай, а сам не плошай.
     
  10. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Полно, прекращайте спросить, лучше помогите мне разобраться с одним моментом :) Как в модели задать проверку для одного поля, чтобы оно было обязательно лишь для незарегистрированных посетителей, т.е. для гостей? Я так понимаю, что это нужно свой валидатор писать?
     
  11. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    можно применять всякие калбаки и проверять перед сохранением зареген или нет, если нет, то делаешь что нужно бросаешь исключение => и повторный вызов формы или редирект на вход\регистрацию
     
  12. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    Можно разные сценарии задать для зарегистрированных и нет.
    Как бы учить модель саму проверять состояние пользователя не очень правильно. Сказать это из контроллера более правильно, имхо.
     
  13. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    +1 за разные сценарии
     
  14. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Если более конкретно, то, есть форма для добавления комментария, на которой поле "Ваше имя". Если посетитель - гость, поле отображается и должно быть обязательно к заполнению, если посетитель - пользователь, поле не выводится. В лоб в модели такую проверку сделать, как я понял :)
     
  15. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    У тебя в модели есть user_name и user_id, так? user_name обязательно только если user_id пустое? Ну или заполняй user_name в контролере для зарегистрированных (тогда user_name оставляешь обязательным и все), или свой метод-валидатор, или сценарии.
    Хотя я бы выбрал или первый или последний вариант... зачем зря свои валидаторы плодить.
     
  16. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    в контроллере там где создаешь объект формы

    PHP:
    1.  
    2. <?php
    3.  
    4. $form = new CommentForm();
    меняешь на

    PHP:
    1. <?php
    2.  
    3. $scenario = if (/* user залогованый */) ? 'user' : 'guest';
    4. $form = new CommentForm($scenario);
    И в модели добавляешь правило

    PHP:
    1. <?php
    2.  
    3.     public function rules()
    4.     {
    5.         return array(
    6.             /*
    7.                  тут набор стандартных валидаторов
    8.             */
    9.             array('name', 'required', 'on' => 'guest'),
    10.         );
    11.     }
    PROFIT
     
  17. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    MiksIr, так и есть, в модели есть username и user_id. Если посетитель - гость, то работаю с username, иначе с user_id.

    tommyangelo, спасибо, изящное решение, буду практиковаться далее :)
     
  18. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Mr. T
    А, еще я кое-чего не учел :)
    Это только правило валидации. А еще есть отображение элемента на форме. Там придется дополнительно проверку сделать. Например через ifAttributeRequired (точно не уверен, пишу по памяти)
     
  19. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    tommyangelo, с формой я разобрался, просто проверяю посетитель гость или нет, пока хватает, капчу также вывожу :)
     
  20. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Есть еще вопрос, смотрю сейчас авторизацию в Yii с использованием БД, в частности, руководство по созданию блога. Суть поля salt в таблице tbl_user не уловил, а также использования соли при проверке пароля. Или здесь есть что-то неявное, или я точно что-то упускаю. Подскажите, пожалуйста :)
     
  21. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  22. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Padaboo, я, наверное, неправильно выразился, зачем соль при шифровании пароля нужна - ясно, но в описании авторизации в руководстве о ней практически не упоминается. К примеру, посмотрим код
    PHP:
    1. <?php
    2. class User extends CActiveRecord
    3. {
    4.     ......
    5.     public function validatePassword($password)
    6.     {
    7.         return $this->hashPassword($password, $this->salt) === $this->password;
    8.     }
    9.     public function hashPassword($password, $salt)
    10.     {
    11.         return md5($salt . $password);
    12.     }
    13.     protected function generateSalt()
    14.     {
    15.         return uniqid('', true);
    16.     }
    17. }
    , в таблице tbl_user есть поле salt, так вот, объясните, пожалуйста, где связь между этим кодом и полем в таблице, не понимаю...
     
  23. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Вроде разобрался, соль генерируется методом generateSalt() при регистрации пользователя и заносится в БД, больше она не меняется. В будущем берется значение соли из БД, пароль, который пришел с формы, шифруется и сравнивается с хешем, который в БД уже, так?
     
  24. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    Угу. А если вы криптуете пароли crypt-ом, то и отдельное поле не нужно - там итоговый хеш в хитром формате, включающем в себя соль, и при проверке она выдергивается сама.
    $hash = crypt($pass) - создание хеша, соль генерится сама
    if ($hash == crypt($pass, $hash)) - проверка
     
  25. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Возник еще вопрос, по urlManager, в частности, о пейджере, сейчас ссылки имеют вид
    Код (Text):
    1. http://localhost/category/1/title/?page=3&ajax=yw0
    , маялся, но так и не понял как сделать так
    Код (Text):
    1. http://localhost/category/1/title/page/3/
    , реально вообще? :), параметр
    Код (Text):
    1. ajax=yw0
    убирается
    Код (Text):
    1. 'params' => array()
    так?