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' environment
      $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [
         'class' => 'yii\debug\Module',
      ];
      $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [
         'class' => 'yii\gii\Module',
      ];
   }
   return $config;
?>

उपरोक्त कॉन्फ़िगरेशन फ़ाइल में, हम वर्ग नाम को परिभाषित नहीं करते हैं। ऐसा इसलिए है क्योंकि हम पहले ही इसे परिभाषित कर चुके हैं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,
]);