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' # Необходим для управления адресами страниц