<rmcreative>

RSS

Что изменилось и чего ожидать от Yii 1.1.11?

24 июля 2012

resurtm, активно участвующий в разработке Yii, описал основные изменения, которые ждут нас в 1.1.11. Релиз состоится на этой неделе. За это время список изменений может немного пополниться.

Всем, кто хочет обновиться рекомендую взять код из master и погонять с ним свой проект локально. Если что-то сломалось — ещё не поздно будет поправить.

Читаем и комментируем

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

  1. №6479
    resurtm
    resurtm 24 июля 2012 г., 21:47:59

    И ещё, если в CHANGELOG есть что-то интересное для кого-то, но этого нет в гайде или непонятно как юзать, то могу расписать подробнее, как сделано во второй части поста.

    Просто прямо всё расписать подобным образом — не совсем реально. :)

  2. №6480
    Максим
    Максим 24 июля 2012 г., 22:22:56

    Отличные новости, попробую обновить фреймворк с гитхаб и потестить.

  3. №6481
    jx
    jx 25 июля 2012 г., 6:58:19

    А в методе CHtml::resolveValue не ожидается изменений на строке 2149

    Вместо

    if(is_array($value) && isset($value[$id]))

    Писать

    if ((is_array($value) || $value instanceof ArrayAccess) && isset($value[$id]))

    Сейчас работаем с MongoDb. Для вложенных документов очень удобно.

  4. №6482
    Skiller
    Skiller 25 июля 2012 г., 12:36:46

    Немного не понял про "Модули теперь так же могут загружаться из пространств имён.", "Появилась возможность использования контроллеров из пространств имён". В 1.1.10 тоже можно, в чем фишка?ну у меня например в модуле все по неймспейсам распределено и хорошо работает при 1.1.10.

  5. №6483
    Sam
    Sam 25 июля 2012 г., 13:01:56

    jx, мы об этом даже не знали. Никто же не рассказывает. Не до конца понимаю назначение данного изменения, но шанс понять и включить в релиз ещё есть.

    Skiller, у resurtm неточности в анонсе. На тему контроллеров ничего не менялось, только документацию написал. На тему модулей — теперь не нужно все их контроллеры пихать в classMap, можно просто задать controllerNamespace. Документация здесь. Если с этим решением что-то не так, самое время мне об этом рассказать.

  6. №6484
    Skiller
    Skiller 25 июля 2012 г., 13:19:50

    Sam "На тему модулей — теперь не нужно все их контроллеры пихать в classMap" ты хотел сказать про глобальный массив импорта да?ну когда при старте приложения пути к модулям автоматически создаются или что? Прочитал доки, хм, если я правильно понимаю то едиственное преимущество такого неймспейса лишь чтобы просто разделить контроллеры и контроллеры для тесто. Для модулей я понял аналогично все. Только вот еще где это может использоваться я понять пока не могу, можешь привести примеры?Жалко в CHtml не поправиили баг, который я когда-то на ru форуме писал, досадно(

  7. №6486
    Sam
    Sam 25 июля 2012 г., 14:36:42

    Skiller, нет, я про controllerMap. Раньше, если класс модуля был в namespace, чтобы грузить контроллеры из того же namespace нужно было в controllerMap все из прописать. Если при этом имелся модуль с тем же именем в глобальном namespace, ничего не работало.

    В Yii 1.1 namespace вообще немного чужеродны. Сам пример привести не могу, но те, кто это просил, закидывали модуль, его контроллеры, модели и компоненты в один namespace.

    Про CHtml я ничего вспомнить не смог. Я не успеваю всё на форуме читать. Если хотите, чтобы баг точно рассмотрели, лучше писать сразу на github в трекер.

  8. №6488
    mrix
    mrix 25 июля 2012 г., 15:07:46

    jx, мы об этом даже не знали. Никто же не рассказывает. Не до конца понимаю назначение данного изменения, но шанс понять и включить в релиз ещё есть.

    Обсуждалось тут github.com/yiisoft/yii/issues/157. Только предлагалось is_object.

    Назначение опишу в примере:

    class NestedObj extends CFormModel
    {
        public $name;
        public $value;
     
        public function rules()
        {
            return array
            (
                array('name, value', 'safe'),
            );
        }
    }
    class ParentObj extends CFormModel
    {
        private $_nested;
     
        public function getNested()
        {
            if ($this->_nested === null)
            {
                $this->_nested = new NestedObj();
            }
            return $this->_nested;
        }
     
        public function setNested($value)
        {
            if ($this->_nested === null)
            {
                $this->_nested = new NestedObj();
            }
            $this->_nested->attributes = $value;
        }
     
        public function rules()
        {
            return array
            (
                array('nested', 'safe'),
            );
        }
    }
     
    $parent = new ParentObj();
    $parent->attributes = array
    (
        'nested' => array('name' => '123 456', 'value' => 'qwe rty')
    );
     
    var_dump($parent->nested->attributes);
    var_dump(CHtml::resolveValue($parent, 'nested[name]'));

    Почти реальный пример с формой:

    <?php $parent->attributes = isset($_POST['ParentObj']) ? $_POST['ParentObj'] : array(); ?>
    <div id="site-index">
        <?php echo CHtml::beginForm(); ?>
     
            <pre><?php var_dump($parent->nested->attributes); ?></pre>
            <p><?php echo CHtml::activeTextField($parent, 'nested[name]'); ?></p>
            <p><?php echo CHtml::activeTextField($parent, 'nested[value]'); ?></p>
     
            <p></p>
            <p><?php echo CHtml::submitButton('OK'); ?></p>
     
        <?php echo CHtml::endForm(); ?>
    </div>

    При отправке формы поля для ввода остались пустыми, а атрибуты заполнены. Потому что is_array($value) вернёт false, т.к. это $parent->nested объект. Если добавить is_array($value) || $value instanceof ArrayAccess, то всё работает.

  9. №6489
    Skiller
    Skiller 25 июля 2012 г., 15:26:40

    Sam ок, понял про неймспейсы теперь, ну впринципе норм. мне тоже пригодится, т.к. все модули закидываю в неймспейсы тоже. Баг напишу на гитхаб ок.

  10. №6490
    Sam
    Sam 25 июля 2012 г., 15:57:02

    jx, mrix, закрыл.

  11. №6492
    Stan
    Stan 25 июля 2012 г., 23:27:05

    вот как наглядно, на примере, jx показал, как пиар в нужном помогает продвинуть свой фикс :)

  12. №6493
    Stan
    Stan 25 июля 2012 г., 23:27:32

    *в нужном месте

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

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

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