Skip to content

moorsiek/YiiBoilerplate

 
 

Repository files navigation

Новая система конфигурации

Yii.php подгружается после иниции общей конфигурации, что позволяет определять константы yii и различные системные функции в main-env.php и main-local.php. В файлах main-env.php и main-local.php доступна переменая $config, что, в отличии от CMap::merge(), позволяет удалять ключи из конфига.

config

При разделении приложения на common и остальное все, что находится в common перестает быть частью приложения и необходимо прописывать алиас до нужной папки. В результате множество модулей и расширений yii перестают работать, если их переложить в common. Наверно самый простой способ это исправить это переопределить методы Yii::getPathOfAlias() и Yii::import(). Метод Yii::getPathOfAlias() возвращает путь для common, если соответствующая директория или класс отсутствуют в папке приложения. Yii::import() переопределен так, что класс сначала ищется в папке приложения, а потом в common. В результате для приложения все выглядит так, как-буддто модули и расширения из common являются частью приложения.

Расширения

Как пощупать (потрогать).

Скачиваем проект своим любимым способом в свою любимую папку для проектов.

    git clone https://github.com/profet9/YiiBoilerplate.git

Настраиваем свой вэб-сервер.

Запускаем скрипт деплоя с нужным окружением.

    ./runpostdeploy dev

Прописываем в конфиге свою базу данных и остальные параметры. Например так:

// in common/config/main-local.php
$config['components']['db'] = array(
    'connectionString' => 'pgsql:host=localhost;dbname=yii',
    'emulatePrepare' => false,
    'username' => 'pgsql',
    'charset' => 'utf8',
    'enableParamLogging' => true,
    'enableProfiling' => true,
    'tablePrefix' => '',
);
unset($config['components']['db']['password']);
$config['params'] = array(
    'frontendUrl' => 'http://www.yii.local',
    'backendUrl'  => 'http://admin.yii.local',
);

Запускаем миграции.

    ./yiic migrate

Теперь, если повезло, в бэкэнде можно заливать картинки и видео. А также прикреплять картинки в качестве превью к видео. В фронтэнде ничего интересного.

Для примера сделаем каталог товаров.

создадим миграции:

    ./yiic migrate create catalog
// in migration file
public function safeUp()
{
    $this->createTable('catalog',array(
        'id' => 'serial PRIMARY KEY', // for mysql 'integer AUTO_INCREMENT PRIMARY KEY'
        'parent_id' => 'integer REFERENCES catalog ON UPDATE CASCADE ON DELETE CASCADE',
        'picture_id' => 'integer REFERENCES picture ON UPDATE CASCADE ON DELETE SET NULL',
        'name' => 'varchar',
        'description' => 'text',
    ));

    $this->createIndex('catalog_parent_idx','catalog','parent_id');
    $this->createIndex('catalog_picture_idx','catalog','picture_id');

    $this->createTable('item', array(
        'id' => 'serial PRIMARY KEY', // for mysql 'integer AUTO_INCREMENT PRIMARY KEY'
        'catalog_id' => 'integer REFERENCES catalog ON UPDATE CASCADE ON DELETE SET NULL',
        'picture_id' => 'integer REFERENCES picture ON UPDATE CASCADE ON DELETE SET NULL',
        'name' => 'varchar',
        'price' => 'float',
        'description' => 'text',
    ));

    $this->createIndex('item_catalog_idx','item','catalog_id');
    $this->createIndex('item_picture_idx','item','picture_id');
}

public function safeDown()
{
    $this->dropTable('item');
    $this->dropTable('catalog');
}

По адресу {backendUrl}/gii в разделе "GiiyModel Generator" генерим модели. Реализуем в моделях интерфейс Iillustrated

// in common/models/Catalog.php
class Catalog extends BaseCatalog implements Iillustrated
{
    /** @return Catalog */
	public static function model($className=__CLASS__) {
		return parent::model($className);
	}

    /** @return Picture|null */
    public function getPicture()
    {
        return $this->getRelated('picture');
    }

}
// in common/models/Item.php
class Item extends BaseItem implements Iillustrated
{
    /** @return Item */
	public static function model($className=__CLASS__) {
		return parent::model($className);
	}

    /** @return Picture|null */
    public function getPicture()
    {
        return $this->getRelated('picture');
    }
}

И сгенерим CRUD-контроллеры в разделе "GiiyCrud Generator".

Прописываем новые контроллеры в меню.

//somewere in backend/view/main.php
'items' => array(
        array(
            'class' => 'bootstrap.widgets.TbMenu',
            'items' => array(
                array('label' => 'Pictures', 'url' => array('/Picture')),
                array('label' => 'Videos', 'url' => array('/Video')),
                array('label' => 'Catalog', 'url' => array('/Catalog')),
                array('label' => 'Item', 'url' => array('/Item')),
            ),
        ),
//...

Теперь вполне реально работать над каталогом товаров.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 85.0%
  • HTML 10.6%
  • JavaScript 4.0%
  • CSS 0.3%
  • ApacheConf 0.1%
  • Batchfile 0.0%