Yii 2.0.2

Команда PHP фреймворка рада сообщить о выходе версии 2.0.2. Инструкции по установке и обновлению можно найти по адресу https://www.yiiframework.com/download/.
Версия 2.0.2 является патч-релизом Yii 2.0 и содержит около 40 небольших улучшений и исправлений. Полный список изменений можно найти на GitHub. Спасибо всем, кто нам помогал подготовить этот релиз.
Если хотите следить за процессом разработки Yii 2 можно поставить звёздочку или использовать кнопку watch на странице проекта на GitHub. Также у нас есть Twitter и Facebook.
Рассмотрим наиболее значительные дополнения данного релиза.

Псевдонимы маршрута
 

До 2.0.2 Yii поддерживал псевдонимы путей и URL. Теперь можно задавать псевдонимы для маршрутов. После задания псевдонима маршрута его можно использовать при создании URL методами Url::to() и Url::toRoute():

use yii\helpers\Url;

Yii::setAlias('@posts', 'post/index');

// /index.php?r=post/index
echo Url::to(['@posts']);
echo Url::toRoute('@posts');

Данная возможность пригодится если предполагаются изменения в структуре маршрутов. При использовании псевдонима не придётся менять код создания URL.
 

Конфигурирование зависимых компонентов
 

Свойства многих компонентов принимают ID других компонентов, таких как yii\caching\DbCache::db илиyii\web\CacheSession::cache. Иногда для того, чтобы не создавать новый компонент для юнит-тестирования, вам может понадобиться задать такое свойство при помощи массива конфигурации:
 

$cache = Yii::createObject([
    'class' => 'yii\caching\DbCache',
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => '...',
    ],
]);

Если вы разрабатываете новый класс, зависимый от внешних компонент, то можете использовать следующий код для предоставления аналогичной возможности:
 

use yii\base\Object;
use yii\db\Connection;
use yii\di\Instance;

class MyClass extends Object 
{
    public $db = 'db';

    public function init() 
    {
        $this->db = Instance::ensure($this->db, Connection::className());
    }
}


Код выше позволяет настроить свойство db одним из следующих значений:

  • строкой с ID компонента приложения;
  • объектом класса yii\db\Connection;
  • массивом конфигурации, который может использоваться для создания экземпляра yii\db\Connection.
     

Неизменяемый slug
 

Если вы используете yii\behaviors\SluggableBehavior, то теперь можете присвоить новому свойству immutable значение true. В этом случае однажды созданный slug не будет меняться при повторном сохранении модели. Это полезно для SEO: однажды проиндексированное содержимое останется по тому же URL.
 

Автоматический выбор альтернативного языка виджетом DatePicker
 

Виджет yii\jui\DatePicker теперь автоматически выбирает альтернативный язык, если указанный язык не найден. Это полезно в том случае, когда вы задаёте свойство language как ID локали, который содержит регион и/или вариант. К примеру, если задать language вde-DE и виджет не найдёт языкового файла /ui/i18n/datepicker-de-DE.js, то автоматически будет использован язык de и файл/ui/i18n/datepicker-de.js.
 

Передача ошибок валидации
 

Класс yii\base\Model теперь содержит метод addErrors(), который позволяет передать ошибки валидации одной модели в другую. К примеру, если у вас есть класс формы для модели ActiveRecord и вам необходимо передать ошибки валидации формы в модель ActiveRecord, сделать это можно так:
 

use yii\base\Model;
use yii\db\ActiveRecord;

class MyForm extends Model 
{
    public $model;

    public function process()
    {
        // ...
        if (!$this->validate()) {
            $this->model->addErrors($this->getErrors());
            // ....
        }
    }
}
 
Оригинал: https://habrahabr.ru/post/247741/
Читать далее »

Обновил платформу на Yii Booster 2 и Yii 1.1.14

Обновил платформу для разработки. Теперь у меня стоит YiiBooster 2 и Yii 1.1.14. 

YiiBooster 2 кстати не всегда корректно работает с Yii версии 1.1.13 и младше, у меня виджет TbExtendedGrid отказывался запускаться с этой конфигурацией. 

Читать далее »

Новый редактор в Yii

Буквально на днях на форуме yiiframework.ru стартовал сбор средств на покупку OEM-лицензии для проектов на Yii неплохого WYSIWYG Imperavi Redactor.

Я выступал в роли фонда. 400$ собрали всего за четыре дня, что очень удивило и обрадовало. В ту же ночь подпилили расширение в YiiExt и выкатили всё на публику.

Теперь, если пользуетесь Yii, можете пользоваться бесплатно и Redactor.

https://rmcreative.ru/blog/post/imperavi-redactor--kuplena-oem-litsenzija-dlja-yii

Прекрасно!

Читать далее »

Начальные сборки на Yii

Найдено на Хабре:

 Структура приложения – это одна из основных причин, по которой PHP программисты превращаются из “изобретателей колеса” в пользователей фреймворков. Строгие соглашения о структуре приложения и именовании позволяют нам избавиться от тонны кода, сделать рабочий процесс предсказуемым и объединить усилия команды для быстрого и качественного написания ценного бизнес функционала – без вечного рефакторинга роутеров, контроллеров и тд

Yii Framework имеет консольную команду для создания основного костяка приложения, который позволяет практически сразу начать работу над веб-приложением. Gii Модуль позволяет создавать каркассы классов моделей, контроллеров и универсальных CRUD интрерфейсов. Однако, если функциональность вашего приложения находится за пределами обычного вебсайта, — фреймворк сам по себе уже не имеет встроенных помощников для создания комплексной архитектуры. 

И, хотя, все добротные схемы организационной структуры приложения описаны и хорошо известны (на самом деле, не так уж и “хорошо”), это не освобождает нас от шаблонного конструирования в новых проектах время от времени. Здесь приходит на помощь готовый скелет структуры приложения.

https://habrahabr.ru/sandbox/51747/

Пользуюсь YiiBoilerplate в своем последнем проекте. Отличная штука. 

Читать далее »

Юнит тестирование моделей в Yii

Найдено:

Сейчас я расскажу про применение техники TDD для разработки моделей, используя Yii-framework.
Изначально предполагается, что была прочитана тема «Тестирование» из официального мануала (https://yiiframework.ru/doc/guide/ru/test.overview).

Итак, окружение настроено и сейчас нашей задачей будет — создать модели категории и продуктов(Category, Product) и покрыть их тестами.

https://habrahabr.ru/post/147491/

Читать далее »
Scroll To Top