<rmcreative>

RSS

Yii, frameworks and where PHP is heading to

12 ноября 2012

Слайды с прошедшей WebConf Riga 2012. Язык английский, также как и язык самого доклада.

Видео записывалось, возможно будет.

Комментарии RSS

  1. №7026
    tenzor
    tenzor 12 нояб. 2012 г., 4:44:59

    Хмм, что за интересный Phalcon? Кто-нибудь ковырял?

  2. №7027
    tenzor
    tenzor 12 нояб. 2012 г., 4:48:31

    Sam, что вы имели ввиду под "There's not a sungle setMyCoolFactoryDependencyInjectionContainer() in Yii"?

  3. №7028
    Роман
    Роман 12 нояб. 2012 г., 12:54:31

    Отличные слайды, спасибо! Ждем видео :-)

  4. №7033
    Sam
    Sam 12 нояб. 2012 г., 13:32:33

    tenzor, это PECL-фреймворк. То есть в виде расширения для PHP. Я как-нибудь про него и PECL-фреймворки в целом напишу.

    Под "There's not a single setMyCoolFactoryDependencyInjectionContainer() in Yii" имелось ввиду, что нет в Yii никакого нездорового внимания к тому, какой именно паттерн где использован. Думать надо о том, что делаешь, а не о том, какой паттерн используется.

  5. №7034
    idle
    idle 12 нояб. 2012 г., 13:55:26

    Поспорил бы с everything из «PHP makes everything easy». А ещё убрал бы вовсе curse words из доклада. ;)

  6. №7035
    Костя
    Костя 12 нояб. 2012 г., 14:13:53

    Вот еще такой фреймворк lithify.me/ судя по документации, достаточно интересен.

  7. №7036
    Андрей
    Андрей 12 нояб. 2012 г., 14:25:34

    Ух скок вкусностей - как же я все это жду !!!

  8. №7038
    Sam
    Sam 12 нояб. 2012 г., 15:55:11

    Костя, это то, что должно было стать CakePHP3. Интересных фреймворков очень много.

  9. №7046
    Никита
    Никита 14 нояб. 2012 г., 14:52:22

    Не будет в Yii2 criteria? Я вообще слабо понимаю, зачем её изначально сделали?

  10. №7051
    Dador
    Dador 16 нояб. 2012 г., 22:46:57

    В презентации сказано

    Yii can work with components from Symfony 2 and ZF2.

    Можно поподробнее (или ссылку на подробности)?

  11. №7052
    Elfet
    Elfet 17 нояб. 2012 г., 0:08:52

    Опять нытье про то что Symfony2 слишком сложна...

  12. №7053
    Иван
    Иван 17 нояб. 2012 г., 0:15:38

    А почему выбрана интеграция именно с Jquery? Это один из самых отвратительных фреймворков для JS. Основываясь на нем просто невозможно построить нормальную архитектуру для SPA/RIA.

    Недальновидно.

  13. №7054
    Dador
    Dador 17 нояб. 2012 г., 0:22:08

    Иван, не знаю на счет "отвратительности", но статистика говорит о другом www.webappers.com/infographics/javascript-frameworks-jquery.html

  14. №7055
    Chel
    Chel 17 нояб. 2012 г., 2:25:06

    Хорошая презентация, правда некоторые места немного необъективны, например касательно сложности Symfony2 и намека на практичные фремворки (Yii) и остальные - которые, получается непрактичны (так выходит). Но потом я вспомнил что автор - один из разработчиков Yii, а следовательно подобная необъективность допускается во имя пиара своего любимца ;)

  15. №7059
    Игорь
    Игорь 17 нояб. 2012 г., 20:30:58

    Только мне одному показалось, что на слайдах критикуется ZF2 и SF2? Щупал Yii, сейчас работаю с SF2, очень доволен, не все всегда гладко, но работать приятно.

  16. №7065
    Sam
    Sam 18 нояб. 2012 г., 20:15:06

    Dador, Yii нормально работает с PSR-0. Делается примерно вот так.

    Elfet, если «нытья» много и часто, значит какая-то доля объективности в этом «нытье» имеется. Опытному разработчику, конечно, комфортно с большинством компонентов Symfony, но даже опытные теряются с некоторыми из них.

  17. №7066
    Sam
    Sam 18 нояб. 2012 г., 20:20:58

    Иван, интеграция с jQuery выбрана по причине его популярности. Далеко не всем нужны SPA/RIA, но если нужны, jQuery отключается одной строчкой в конфиге, подключается какой-нибудь Knockout или Ember и вперёд.

    Chel, практичных для разработчика довольно много. Те же Laravel или Kohana вполне подходят. С ними, к сожалению, проблемы в виде частой поломки обратной совместимости и странностей в документации.

    Игорь, не показалось. Действительно критикуются за излишнюю усложнённость, которой можно было избежать.

  18. №7067
    Elfet
    Elfet 18 нояб. 2012 г., 21:51:29

    Sam, я работал много и с Symfony, и с Yii. Так аот во второй нехватает именно идей из симфонии(IoC, DI), я имею ввиду работы с бандлами как с независимыми модулями которые легко можно переопределять и обновлять. Если бы в Yii была бы такая (extentions не в счет) то она могла бы быть достойной конкуренцией симфонии.

  19. №7071
    resurtm
    resurtm 19 нояб. 2012 г., 11:45:34

    Так аот во второй нехватает именно идей из симфонии(IoC, DI)

    В Yii есть IoC, но внимание пользователей на нём не акцентируется, как это делается Zend Framework 2 и Symfony2.

    Если бы в Yii была бы такая (extentions не в счет) то она могла бы быть достойной конкуренцией симфонии.

    Чем Symfony Bundles концептуально и идейно лучше Yii Extensions? Тем, что всё чуточку строже/педантичнее в оформлении third party штук?

  20. №7072
    Elfet
    Elfet 19 нояб. 2012 г., 14:02:01

    Тем что в бандлах находятся весь твой код. Например для управления пользователями (FOSUserBundle). И это главное отличие Симфонии. Именно это делает её фреймворком. В Yii же свой код можно разбрасать куда хочешь: часто получаю код где управление пользователми раскидано по extensions, modules, components.

  21. №7074
    resurtm
    resurtm 19 нояб. 2012 г., 14:35:54

    Elfet, то, что Symfony2 навязывает довольно жёсткие требования по оформлению бандлов — да, очень хорошо и правильно.

    Но то, что вам попадались такие приложения и расширения на Yii, где всё было раскидано довольно странно (ну или приходилось самому что-то копировать из директории расширения) — это не недостаток Yii. Это проблемы с самими приложениями и расширениями.

    Даже если фреймворк создаёт множество соглашений (conventions) необходимость думать головой никто не отменял. :-)

    А что за расширения? Я помню только парочку, где нужно было копировать вручную messages для i18n, но и это поправили в 1.1.13.

  22. №7075
    Данила
    Данила 19 нояб. 2012 г., 14:59:21

    Sam, очень удивился, увидев наш логотип на первом слайде с логотипами. Вы как-то отслеживаете использование фреймворка? Если не секрет — как?

  23. №7077
    Sam
    Sam 19 нояб. 2012 г., 15:56:38

    Данила, никак не отслеживаем. Я как-то просил накидать в твиттер ссылок на проекты на Yii, видно 66.ru также прилетел.

  24. №7546
    mrix
    mrix 17 февр. 2013 г., 17:51:03

    Очень поздно прочитал новость. Хочу задать пару вопросов про AR в Yii 2.

    Какой будет синтаксис scope, если нужно передать параметр? Сейчас можно описать как отдельный метод. Например:

    class Post extends CActiveRecord
    {
        public function userOnly($userId)
        {
            $condition = 't.user_id = ' . (int)$userId;
            $this->getDbCriteria()->mergeWith(array('condition' => $condition));
     
            return $this;
        }
    }

    Как я понял, будет использоваться отдельный класс Finder. Scope будут добавляться только через ActiveRecord::scopes()? Если так, то придётся каждый раз переопределять Finder? Как же быть с нормальным автокомплитом в IDE?

    Какой будет синтаксис у deleteAll() и updateAll()? Будет ли возможность в них использовать scopes?

    Зачем же такой синтаксис relations()? Зачем писать класс в ключе, если параметры итак задаются массивом?

    class X extends ActiveRecord
    {
        public static function relations()
        {
            return array
            (
                'items:Y[]' => array(/* ... */)
            );
        }
    }
     
    class XX extends X
    {
        public static function relations()
        {
            //придётся писать так
            $new = array
            (
                'items:YY[]' => array(/* ... */)
            );
            //oops
            return CMap::mergeArray(parent::relations(), $new);
        }
    }
     
    class Y extends ActiveRecord { /* ... */ }
     
    class YY extends Y { /* ... */ }

    А stat-relation не будет? Если будет, то очень нужна функция форматирования результата. Например, БД на такой запрос

    SELECT SUM(t.price) FROM pricelist

    может вернуть NULL, может строку "45.99", а нужно всегда double. Если в AR можно настроить типизацию, то в stat-relaiton приходится всегда "руками" приводить тип.

  25. №7548
    Sam
    Sam 17 февр. 2013 г., 19:11:53

    Какой будет синтаксис scope, если нужно передать параметр?

    class Customer extends \yii\db\ActiveRecord
    {
        // ...
     
        /**
         * @param ActiveQuery $query
         * @param integer $age
         */
        public function olderThan($query, $age = 30)
        {
            $query->andWhere('age > :age', array(':age' => $age));
        }
    }
     
    $customers = Customer::find()->olderThan(50)->all();

    Какой будет синтаксис у deleteAll() и updateAll()? Будет ли возможность в них использовать scopes?

    Customer::deleteAll('status = :status', array('status' => Customer::STATUS_INACTIVE));
     
    Customer::updateAll(array(
        'name' => 'temp',
    ), array('id' => 3));

    Scopes возможности использовать в этих случаях нет.

    Зачем же такой синтаксис relations()?

    Он уже не такой:

    class Customer extends ActiveRecord
    {
        const STATUS_ACTIVE = 1;
        const STATUS_INACTIVE = 2;
     
        public $status2;
     
        public static function tableName()
        {
            return 'tbl_customer';
        }
     
        public function getOrders()
        {
            return $this->hasMany('Order', array('customer_id' => 'id'))->orderBy('id');
        }
     
        public static function active($query)
        {
            return $query->andWhere('status=1');
        }
    }

    А stat-relation не будет?

    Нет.

  26. №7549
    mrix
    mrix 18 февр. 2013 г., 6:53:29

    Scope в таком виде намного лучше. А Finder можно будет переопределять?

    return $this->hasMany('Order', array('customer_id' => 'id'))->orderBy('id');

    Жадной загрузки не будет?

  27. №7550
    Sam
    Sam 18 февр. 2013 г., 12:32:13

    Жадная загрузка никуда не делась. Finder, скорее всего, переопределять будет можно.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.