Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Yii2 params access within local config file in common directory

I'm using Yii2 advanced template, I want to access params.php in main-local.php file, I called this ways:

main-local.php:

'mailer' => [
            'class' => 'myClass',
             'apikey' => \Yii::$app->params['mandrill_api_key'],
             'viewPath' => '@common/mail',            
        ],

and I have stored this mandrill_api_key in params.php

params.php:

<?php
return [
    'adminEmail' => '[email protected]',
    'supportEmail' => '[email protected]',
    'user.passwordResetTokenExpire' => 3600,
     'mandrill_api_key' => 'mykey'
];

I'm getting this error:

Notice: Trying to get property of non-object in C:\xampp\htdocs\myproject\common\config\main-local.php on line 25

What should I do to access these parameters?

like image 638
Muhammad Shahzad Avatar asked Sep 21 '15 07:09

Muhammad Shahzad


3 Answers

The config files are read before the application is instantiated as explained in the request lifecycle:

  1. A user makes a request to the entry script web/index.php.
  2. The entry script loads the application configuration and creates an application instance to handle the request.
  3. The application resolves the requested route with the help of the request application component.
  4. ...

As such \Yii::$app does not yet exist hence the error. I would suggest moving your api_key definition to the main-local.php config such that there is no confusion over where it is being set:

'mailer' => [
    'class' => 'myClass',
    'apikey' => 'actual api key',
    'viewPath' => '@common/mail',            
],

Alternatively, you can use Yii2's dependancy injection container to set the apikey in your application's entry script:

...
$app = new yii\web\Application($config);
\Yii::$container->set('\fully\qualified\myClass', [
    'apikey' => \Yii::$app->params['mandrill_api_key'],
]);
$app->run();
like image 133
topher Avatar answered Nov 03 '22 14:11

topher


You can just do

$params['mandrill_api_key'] 

you dont need to use

\Yii::$app->params['mandrill_api_key']
like image 3
huss Avatar answered Nov 03 '22 13:11

huss


The params is a part of config and you can not call this in your config .

the best way for handel this you can use this in your class :

myClass:

class myClass extends ... {

    public $apikey;

    public function __construct(){
        $this->apikey =  \Yii::$app->params['mandrill_api_key'];
    }


}
like image 1
Amir Mohsen Avatar answered Nov 03 '22 14:11

Amir Mohsen