2015-09-21 9 views
7

sto usando Yii2 modello avanzato, voglio accedere params.php in main-local.php di file, ho chiamato questo modi:Yii2 params accesso all'interno di file di configurazione locale nella directory comune

main-local.php:

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

e ho conservato questo mandrill_api_key in params.php

params.php:

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

sto ottenendo questo errore:

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

Cosa devo fare per accedere a questi parametri?

+0

hai provato ad aggiungere un \, quindi mething come: \ Yii :: $ app-> params ['mandrill_api_key'] – Criesto

+0

Sì, ho provato questo, ma non funziona, potrebbe essere necessario definire qualcosa quando il bootstrap dell'applicazione. –

risposta

3

I config file vengono letti prima dell'applicazione, è infine spiegato nel 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. ...

Come tale \Yii::$app non esiste ancora quindi l'errore. Vorrei suggerire spostare la vostra definizione api_key al main-local.php config in modo tale che non v'è alcuna confusione su cui è stato impostato:

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

In alternativa, è possibile utilizzare Yii2 di dependancy injection container per impostare il apikey nella entry script dell'applicazione:

... 
$app = new yii\web\Application($config); 
\Yii::$container->set('\fully\qualified\myClass', [ 
    'apikey' => \Yii::$app->params['mandrill_api_key'], 
]); 
$app->run(); 
+0

Grazie, ci proverò, ma il mio problema è che devo ottenere questa chiave API dal database e impostare in configurazione. –

+0

come @huss indica che potresti usare direttamente $ params nei file di configurazione locali – nevermind

2

I parametri sono una parte della configurazione e non è possibile richiamarli nella configurazione.

il modo migliore per Handel questo si può utilizzare questo nella tua classe:

myClass:

class myClass extends ... { 

    public $apikey; 

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


} 
2

Si può solo fare

$params['mandrill_api_key'] 

non avete bisogno di utilizzare

\Yii::$app->params['mandrill_api_key'] 
+0

Questa dovrebbe essere la risposta accettata. Yii2 config carica il file params all'avvio dello script main-config $ params = require (__ DIR__. '/params.php'); Quindi puoi usare l'array $ params in qualsiasi parte del tuo file –

Problemi correlati