Yii – Configurations
”;
Configurations are used to create new objects or initializing the existing ones. Configurations usually include a class name and a list of initial values. They may also include a list of event handlers and behaviors.
The following is an example of the database configuration −
<?php $config = [ ''class'' => ''yiidbConnection'', ''dsn'' => ''mysql:host = localhost;dbname = helloworld'', ''username'' => ''vladimir'', ''password'' => ''12345'', ''charset'' => ''utf8'', ]; $db = Yii::createObject($config); ?>
The Yii::createObject() method takes a configuration array and creates an object based on the class named in the configuration.
The format of a configuration −
[ //a fully qualified class name for the object being created ''class'' => ''ClassName'', //initial values for the named property ''propertyName'' => ''propertyValue'', //specifies what handlers should be attached to the object''s events ''on eventName'' => $eventHandler, //specifies what behaviors should be attached to the object ''as behaviorName'' => $behaviorConfig, ]
The configuration file of a basic application template is one of the most complex −
<?php $params = require(__DIR__ . ''/params.php''); $config = [ ''id'' => ''basic'', ''basePath'' => dirname(__DIR__), ''bootstrap'' => [''log''], ''components'' => [ ''request'' => [ // !!! insert a secret key in the following (if it is empty) - this //is required by cookie validation ''cookieValidationKey'' => ''ymoaYrebZHa8gURuolioHGlK8fLXCKjO'', ], ''cache'' => [ ''class'' => ''yiicachingFileCache'', ], ''user'' => [ ''identityClass'' => ''appmodelsUser'', ''enableAutoLogin'' => true, ], ''errorHandler'' => [ ''errorAction'' => ''site/error'', ], ''mailer'' => [ ''class'' => ''yiiswiftmailerMailer'', // send all mails to a file by default. You have to set // ''useFileTransport'' to false and configure a transport // for the mailer to send real emails. ''useFileTransport'' => true, ], ''log'' => [ ''traceLevel'' => YII_DEBUG ? 3 : 0, ''targets'' => [ [ ''class'' => ''yiilogFileTarget'', ''levels'' => [''error'', ''warning''], ], ], ], ''urlManager'' => [ //''showScriptName'' => false, //''enablePrettyUrl'' => true, //''enableStrictParsing'' => true, //''suffix'' => ''/'' ], ''db'' => require(__DIR__ . ''/db.php''), ], ''modules'' => [ ''hello'' => [ ''class'' => ''appmoduleshelloHello'', ], ], ''params'' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for ''dev'' environment $config[''bootstrap''][] = ''debug''; $config[''modules''][''debug''] = [ ''class'' => ''yiidebugModule'', ]; $config[''bootstrap''][] = ''gii''; $config[''modules''][''gii''] = [ ''class'' => ''yiigiiModule'', ]; } return $config; ?>
In the above configuration file, we do not define the class name. This is because we have already defined it in the index.php file −
<?php //defining global constans defined(''YII_DEBUG'') or define(''YII_DEBUG'', true); defined(''YII_ENV'') or define(''YII_ENV'', ''dev''); //register composer autoloader require(__DIR__ . ''/../vendor/autoload.php''); //include yii files require(__DIR__ . ''/../vendor/yiisoft/yii2/Yii.php''); //load application config $config = require(__DIR__ . ''/../config/web.php''); //create, config, and process request (new yiiwebApplication($config))->run(); ?>
Many widgets also use configurations as shown in the following code.
<?php NavBar::begin([ ''brandLabel'' => ''My Company'', ''brandUrl'' => Yii::$app->homeUrl, ''options'' => [ ''class'' => ''navbar-inverse navbar-fixed-top'', ], ]); echo Nav::widget([ ''options'' => [''class'' => ''navbar-nav navbar-right''], ''items'' => [ [''label'' => ''Home'', ''url'' => [''/site/index'']], [''label'' => ''About'', ''url'' => [''/site/about'']], [''label'' => ''Contact'', ''url'' => [''/site/contact'']], Yii::$app->user->isGuest ? [''label'' => ''Login'', ''url'' => [''/site/login'']] : [ ''label'' => ''Logout ('' . Yii::$app->user->identity->username . '')'', ''url'' => [''/site/logout''], ''linkOptions'' => [''data-method'' => ''post''] ], ], ]); NavBar::end(); ?>
When a configuration is too complex, a common practice is to create a PHP file, which returns an array. Take a look at the config/console.php configuration file −
<?php Yii::setAlias(''@tests'', dirname(__DIR__) . ''/tests''); $params = require(__DIR__ . ''/params.php''); $db = require(__DIR__ . ''/db.php''); return [ ''id'' => ''basic-console'', ''basePath'' => dirname(__DIR__), ''bootstrap'' => [''log'', ''gii''], ''controllerNamespace'' => ''appcommands'', ''modules'' => [ ''gii'' => ''yiigiiModule'', ], ''components'' => [ ''cache'' => [ ''class'' => ''yiicachingFileCache'', ], ''log'' => [ ''targets'' => [ [ ''class'' => ''yiilogFileTarget'', ''levels'' => [''error'', ''warning''], ], ], ], ''db'' => $db, ], ''params'' => $params, ]; ?>
The default configurations can be specified by calling the Yii::$container->set() method. It allows you to apply default configurations to all instances of the specified classes when they are called via the Yii::createObject() method.
For example, to customize the yiiwidgetsLinkPager class, so that all link pagers will show at most three buttons, you can use the following code.
Yii::$container->set(''yiiwidgetsLinkPager'', [ ''maxButtonCount'' => 3, ]);
”;