Yii 配置
配置用于创建新的对象或初始化现有对象。配置通常包括一个类名称和一组初始值。它们还可以包括一组事件处理程序和行为。
以下是数据库配置的示例-
<?php
config = [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host = localhost;dbname = helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];db = Yii::createObject($config);
?>
Yii::createObject() 方法接受一个配置数组,并根据配置中指定的类名创建一个对象。
配置的格式如下 –
[
//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,
]
基本应用模板的配置文件是最复杂的之一−
<?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' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
// 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' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'urlManager' => [
//'showScriptName' => false,
//'enablePrettyUrl' => true,
//'enableStrictParsing' => true,
//'suffix' => '/'
],
'db' => require(__DIR__ . '/db.php'),
],
'modules' => [
'hello' => [
'class' => 'app\modules\hello\Hello',
],
],
'params' => params,
];
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environmentconfig['bootstrap'][] = 'debug';
config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];config['bootstrap'][] = 'gii';
config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
returnconfig;
?>
在上述配置文件中,我们并没有定义类名。这是因为我们已经在 index.php 文件中定义了它 –
<?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 yii\web\Application(config))->run();
?>
许多小部件也使用配置,如下所示的代码。
<?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();
?>
当配置过于复杂时,一种常见的做法是创建一个返回数组的PHP文件。看一下 config/console.php 配置文件。
<?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' => 'app\commands',
'modules' => [
'gii' => 'yii\gii\Module',
],
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'db' => db,
],
'params' =>params,
];
?>
默认配置可以通过调用 Yii::$container->set() 方法来指定。它允许你在通过 Yii::createObject() 方法调用指定类的所有实例时应用默认配置。
例如,要自定义 yii\widgets\LinkPager 类,使得所有链接分页器最多显示三个按钮,你可以使用以下代码。
Yii::$container->set('yii\widgets\LinkPager', [
'maxButtonCount' => 3,
]);