Jak volat IPub\FlashMessages z komponenty
- Phalanx
- Člen | 310
Ahoj,
zkouším IPub\FlashMessages volat z komponenty – vytvořit modal po
odeslání formuláře, ale nedaří se mi.
Pokud to volám v presenteru, je to v pořádku.
Netuším jak tady zavolat flashNotifier z komponenty
<?php
// Cannot read an undeclared property App\FrontModule\Presenters\ContactUsPresenter::$flashNotifier.
// ale přitom v renderDefault tohoto presenteru to jede...
$this->presenter->flashNotifier->overlay('Message text', 'info', 'My message title');
if ($this->presenter->isAjax()) {
$this->redrawControl('contactFormSnippet');
$this->presenter->redrawControl();
} else {
$this->redirect('this', array('sent' => true));
}
?>
A pokud použiju trait v komponentě a volám jen
<?php
$this->flashNotifier->overlay('Message text', 'info', 'My message title');
?>
Pak dostávám chybu Call to a member function overlay() on null
Budu vděčný za jakékoliv rady.
Děkuji.
Editoval Phalanx (20. 2. 2017 9:17)
- CZechBoY
- Člen | 3608
Přes $this->presenter->flashMessage(...)
by to mohlo
jít.
Případně zkus v komponentě povolit inject
(1), nebo přes
decorator
zavolat injectFlashMessages
metodu (2).
1)
- přes nastavení služby
services:
-
class: App\mojekomponenta
inject: yes
- přes decorator
decorator:
App\mojekomponenta:
inject: yes
2)
decorator:
App\mojekomponenta:
setup:
- injectFlashMessages
Editoval CZechBoY (20. 2. 2017 9:44)
- Phalanx
- Člen | 310
@CZechBoY Děkuju, ale chová se to fakt podivně. Přepsal jsem si kousek Traity a vložil si do konstruktoru potřebné třídy. Bohužel se to ale ukázalo jako hodně šílené řešení.
Chtěl jsem mít modální dialog, v něm formulář, který po odeslání zobrazí flash message v dalším dialogu… Udělal jsem to raději tak, že to dělám bez ajaxu a posílám jen parametr v GET.
Při $this->presenter->flashMessage(…) a následném ajaxu se mi zobrazuje v response tohle… což je pro UIKIT i když mám jasně definovaný bootstrap.
<div class=„ipub-flash-messages uk-text-left“ id=„snippet-flashMessages-messages“>↵</div>
- akadlec
- Člen | 1326
@Phalanx Do komponent si to musíš dopravit konstruktorem a nebo komponentě zapnout inject jak padlo výše.
To že vidíš v šabloně uk-text-left
ještě neznamená že
máš šablonu uikitu, koukám do šablony bootstrapu a dostalo se to i do ní.
Klidně PR na odstranění, já TWBS nepoužívám takže jej netestuji.
Když to děláš ajaxem tak je potřeba aby sis invalidoval správné snippety, jinak ti to nebude fungovat jak chceš.
- Phalanx
- Člen | 310
@akadlec taky děkuji. Vidíš, já viděl uk-text-left a už jsem se domníval, že jde o chybnou šablonu. Každopádně se budu snažit tomuto balíku vyhnout, protože ho nedokážu zprovoznit tak, aby to fungovalo na 100 procent.
Příklady:
- nepřekládá se v šabloně text (chybí translator) i když při vytváření komponenty uvádím – tzn. asi se nepředává až do šablon
- když použiju vlastní template šablonu, nepředávají se mi proměnné title a body
Balíček ale beru jako dobrou inspiraci, jak se dají věci dělat jinak.
- akadlec
- Člen | 1326
- Jaký text v šabloně? Extension má k dispozici inject pro translator, taky podporuje Frázové překlady z kdyby. V šabloně je jen jeden nepřeložitelný text a to v modalu.
- Zřejmě si ji použil špatně. Extension používám se šablonou systému kde ji mám a nemám problém v tom že bych tam neměl proměnné.
Jinak jak ext použít sepsal docela pěkně Honza Černý