Nacitanie parametrov z config.neon pre extension
- xrep
- Člen | 51
Ahoj,
snažím sa nejako vytvoriť extension do Nette aby som mohol využívať sendgrid. Sendgrid sa naťahuje cez composer do /vendor zložky a má úplne jednoduché API. Ten extension by mal v podstate len vytvoriť inštanciu Sendgridu, ktorá berie ako parameter údaje meno a klúč.
Vytvoril som si teda extension:
<?php
<?php
namespace App\Extensions;
use Nette\DI\CompilerExtension;
class SendgridExtension extends CompilerExtension {
public function loadConfiguration() {
$builder = $this->getContainerBuilder();
$config = $this->getConfig( );
if (! $config ) {
throw new \Exception('Please add configuration for Sendgrid, or remove it from active extensions' );
}
$builder->addDefinition($this->prefix('sendgrid'))
->setClass('App\Extensions\SendgridMailer', array( $config[ 'apiUser' ], $config[ 'apiKey' ] ) );
}
}
?>
a do config neon pridal do extensions sekcie sendgrid: App\Extensions\SendgridExtension + v configu som zadefinoval
sendgrid:
apiUser: user
apiKey: key
Ďalej som vytvoril triedu SendgridMailer
<?php
namespace App\Extensions;
class SendgridMailer extends \Nette\Object {
private $sendGrid;
public function __construct( $apiUser, $apiKey ) {
$this->sendGrid = new \SendGrid( $apiUser, $apiKey );
}
public function getMail() {
return $this->sendGrid;
}
}
?>
Chcem dosiahnuť toho aby v ideálnom prípade som mohol kdekolvek v presenteri zavolat niečo ako SendgridMailer::getMail() alebo SendgridMailer->getMail() a pracoval už s tým. Teda že by sa mi ten extension nakompiloval tak, že by si vytiahol údaje (user, key) z config.neon za kompilácie a ja aby som to nemusel neustále vyplňovať. Absolútne ale nechápem ako..
- castamir
- Člen | 629
Compiler extension:
<?php
namespace App\Extensions;
use Nette\DI\CompilerExtension;
class SendgridExtension extends CompilerExtension
{
public $defaults = [
'apiUser' => 'default value for apiUser',
'apiKey' => 'default value for apiKey',
];
public function loadConfiguration()
{
$builder = $this->getContainerBuilder();
$config = $this->getConfig($this->defaults);
$builder->addDefinition($this->prefix('sendgrid'))
->setClass('App\Extensions\SendgridMailer', [$config['apiUser'], $config['apiKey']]);
}
}
config.neon:
extensions:
SendGrid: App\Extensions\SendgridExtension
SendGrid:
apiUser: foo
apiKey: bar
použití v presenteru:
<?php
namespace MyApplication;
class MyPresenter extends \Nette\Application\UI\Presenter
{
/** @var \App\Extensions\SendgridMailer @inject */
public $sendGridMailer;
public function actionDefault()
{
$mail = $this->sendGridMailer->getMail();
}
}
psáno zpatra, snad tam nejsou překlepy