Properties and Components App - uniqcle/Yii2 GitHub Wiki

Properties

Свойство язык сайта в frontend/config/main.php

...
return [
    'id' => 'app-frontend',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'controllerNamespace' => 'frontend\controllers',
    'language'=>'ru',
    'components' => [
...

Свойство параметры приложения в файле frontend/config/params.php

return [
    'adminEmail' => '[email protected]',
];

Вызов в любом месте приложения. Напр, в контроллере.

use Yii; 
...
$email = Yii::$app->params["adminEmail"]; 
...

Components

Создаем новый класс в frontend/components/StringHelper.php

namespace frontend\components;

class StringHelper
{
    //Укорачивание текста. На входе принимает какой-то аргумент
    public function getShort($string){

        return substr($string, 0, 20);
    }
}

В Контроллере

namespace frontend\controllers;

use Yii;
use yii\web\Controller;
use frontend\models\News;

class NewsController extends Controller
{
    public function actionIndex(){

        $maxNewsInList = Yii::$app->params['maxNewsInList'];

        $listNews = News::getNewsList($maxNewsInList);

        return $this->render('index', [
            'listNews' => $listNews
        ]);
    }
}

Затем используем этот класс в модели News

namespace frontend\models;

use Yii;
use frontend\components\StringHelper;

class News
{
    public static function  getNewsList($maxNewsInList){

        $maxNewsInList = intval($maxNewsInList);

        $sql = "SELECT * FROM news LIMIT ".$maxNewsInList;
        $result =  Yii::$app->db->createCommand($sql)->queryAll();

        //Создаем экземпляр класса StringHelper
        $helper = new StringHelper();

        if(!empty( $result ) && is_array( $result )){

            //Использование компонента StringHelper
            foreach($result as &$item):
                $item['content'] = $helper->getShort( $item['content'] );
            endforeach;

        }

        return $result;

}
}

Совершенствуем компонент. Берем данные из параметров.

Добавляем в параметры приложения frontend/config/params.php

...
'shortTextLimit' => 20, //Кол-во символов для "обрезки" полученных статей
...

Затем в нашем классе в конструкторе забираем данные из параметров и записываем в свойство, с которым и будем работать.

namespace frontend\components;

use Yii;

class StringHelper
{
    public $limit; //Определяем св-во limit

    public function __construct(){
        $this->limit = Yii::$app->params["shortTextLimit"];
    }

    //Укорачивание текста. На входе принимает какой-то аргумент
    public function getShort($string, $limit = null){

        //Если в методе задан limit, то используем его. Если не задан по-умолч. , то берем из параметров.
        if( empty( $limit )){
            $limit = $this->limit;
        }

        return substr($string, 0, $limit );
    }
}

Совершенствуем компонент. Делаем объект компонента частью нашего приложения

Регистрируем как компонент в конфигурации.

Для этого нам потребуется полное название класса. use frontend\components\StringHelper;

Переходим в frontend/config/main.php в разделе 'components' добавляем:

...
        'stringHelper' => [
            'class' => 'frontend\components\StringHelper'
        ],
...

Теперь мы можем его использовать, например в модели. Отличается формой вызова

namespace frontend\models;

use Yii;
//use frontend\components\StringHelper; //Это можно удалить

class News
{
    public static function  getNewsList($maxNewsInList){

        $maxNewsInList = intval($maxNewsInList);

        $sql = "SELECT * FROM news LIMIT ".$maxNewsInList;
        $result =  Yii::$app->db->createCommand($sql)->queryAll();

        //Создаем экземпляр класса StringHelper
        //$helper = new StringHelper();
        $helper2 = Yii::$app->stringHelper; //Создаем во время запуска приложения

        if(!empty( $result ) && is_array( $result )){

            //Использование компонента StringHelper
            foreach($result as &$item):
                //$item['content'] = $helper2->getShort( $item['content'], 30 );
                //или сокращенное название
                $item['content'] = Yii::$app->stringHelper->getShort( $item['content'], 30 );
            endforeach;
        }

        return $result;

}
}

Components as default

'request' # Позволяет инкапсулировать всю логику запроса. Не требуется работать с GET/POST
'user'    # Позволяет получить доступ к инструментам работы с пользователем. Гость или выполнил вход, получить его имя и т.д
'session' # Позволяет удобно работать с сессиями вместо $_SESSION
'log'     # Позволяет отслеживать события. Записывать их куда-нибудь
'errorHandler' # Необходим для работы с ошибками
'urlManager'   # Необходим для управления адресами страниц