Předání parametrů v config.neon do komponenty
- Alsatian
- Člen | 175
Ahoj.
Rád bych předal parametry z config.neon do své komponenty ContactForm která vypadá takto (zjednodušeně):
namespace App\Components;
use...
class ContactForm extends UI\Control
{
public function render() {...}
public function createComponentMyForm() {...}
public function formSucceeded() {...}
}
interface IContactFormFactory
{
/** @return ContactForm */
function create($config);
}
Parametry předávám například do presenterů v config.neon například takto:
services:
- App\Model\UserManager(%global%)
parameters:
global:
systemEmail = 'info@alsan.cz'
...
Například tento „systemEmail“ bych rád v mé komponentě posléze využil. Jak to tam ale předat nevím…
Děkuji moc předem za jakoukoli radu :)
Našel jsem tento příspěvek, konkrétně radu od Davida, ale nefunguje mi
to.
https://forum.nette.org/…ne-z-configu
Dostanu chybu „Service ‚arguments‘: Unknown key ‚0‘ in definition of
service.“
Nevím jak přesně potom proměnnou ze své komponenty vytáhnout
(použít)
- Alsatian
- Člen | 175
@FVesely ahoj, zkouším a chyba:
Service ‚85_App_Components_IContactFormFactory‘: The item ‚factory‘ in
array expects to be callable or Nette\DI\Statement or null,
array(20) given.
Já si myslím, že to bude muset být nějak takto:
- implement: IMyFactory
arguments: [%foo%]
Ale odkaz ve vláknu od Davida Matějky už není bohužel funkční.
https://forum.nette.org/…ne-z-configu
- Alsatian
- Člen | 175
Tak nevím, co dělám špatně.
Pokud do config.neon zadám
- {implement: App\Components\IContactFormFactory, arguments: [%global%]}
kde global je
parameters:
global:
systemEmail = 'info@alsan.cz'
...
a do své továrničky přidám
class ContactForm extends UI\Control
{
public function __construct(array $config) {
parent::__construct();
}
...
}
interface IContactFormFactory
{
/** @return ContactForm */
function create();
}
dostanu chybu:
Too few arguments to function App\Components\ContactForm::__construct(),
0 passed in D:\wamp64\www\nazevprojektu\app\presenters\BasePresenter.php on
line 355 and exactly 1 expected
PS: doplním, že v BasePresenter.php se formulář zobrazuje takto:
public function startup() {
parent::startup();
...
// kontaktni formular
ob_start();
$this['contactForm']->render();
$formTemplate = ob_get_clean();
$this->template->kontaktniFormular = (string) $formTemplate;
...
}
Editoval Alsatian (8. 3. 2019 22:33)
- David Matějka
- Moderator | 6445
to vypada, ze v BasePresenter.php on line 355
nepouzivas tu
tovarnu, ale instasnci ContactForm vytvaris rucne pres new