Callback na metodu – postFormSucceeded
- doudik
- Člen | 12
Zdravím,
obracím se na pomoc ohledně callback funkce. Chci po úspěšném provedení Callbacknout na postFormSucceeded, ale nějak mi nebere.
Verze nette 2.3.2
img: http://imageshack.com/…9/BFBRsV.png
děkuji.
- Jan Tvrdík
- Nette guru | 2595
Jak máš Nette nainstalované? Nahraď použití callback
za
obyčejné array
a bude to fungovat.
- doudik
- Člen | 12
Paráda! Jeden problém vyřešen :)
Nemilé zjištění bylo, že následoval další problém..
img: http://imageshack.com/…3/QwUk6k.png
Zase habruje register.. Zkoušel sem hledat na netu, ale nikde nebyl řešen daný problém.
@JanTvrdík Implementuju ho ručně při vytváření projektu.
- David Matějka
- Moderator | 6445
@doudik ukaz, jak deklarujes property users
v tom
presenteru a jak do toho injectujes tu zavislost
- doudik
- Člen | 12
@DavidMatějka
img:
http://imageshack.com/…9/1KhiYn.png
http://imageshack.com/…8/QBnsr7.png
Editoval doudik (1. 6. 2015 23:19)
- Filip Procházka
- Moderator | 4668
Users vypadá jako nějaký model, ale nikde nemáš konstruktor.
class Users
{
private $db;
public function __construct(\DibiConnection $db)
{
$this->db = $db;
}
Ty proměnné presenteru, pokud chceš aby ti do nich Nette injectlo samo, nesmí být private.
class RegisterPresenter ...
{
/** @var Users @inject */
public $users;
A příště prosím kopíruj kód sem do fóra a použij formátovací funkce na zvýraznění, opisování kódu z obrázku je opruz.
- Azathoth
- Člen | 495
mohl bych podotknout, jen tak mimochodem, že používat statickou sůl a sha1 je trochu hloupé, když nette samotné poskytuje velmi příjemné a silné hashování?
Editoval Azathoth (1. 6. 2015 23:34)
- doudik
- Člen | 12
@FilipProcházka Omlouvám se, ale teďka sem tě nějak zcela
nepochopil. Users mám dělanou jako model, do které sem chtěl přistupovat
z presenteru. Tudíž sem se nějak ztratil. Třída $users
byla
nastavena na public.
E: Po přidání /** @var Users @inject*/
laděnka:
Service of type App\Presenters\Users used in @var annotation at App\Presenters\RegisterPresenter::$users not found. Did you register it in configuration file?
na $container = $configurator->createContainer();
Editoval doudik (1. 6. 2015 23:36)
- Azathoth
- Člen | 495
potřebuješ dostat connection do modelu a model do presenteru. Přesně k tomu slouží dependency injection, tedy vstřikování závislostí. Connection a třída Users jsou závislosti, které chceš vstříknout někam, kde jsou zapotřebí. Tady je na dependency injection(DI) hezké video a tady je další hezké video, přímo od tvůrce
- Azathoth
- Člen | 495
@doudik a registroval jsi? máš v config.neon podle dokumentace tohle?
services:
- App\Presenters\Users
Editoval Azathoth (1. 6. 2015 23:43)
- doudik
- Člen | 12
@Azathoth Neměl sem. Přidal sem a teďka bojuju s přesností tab/mezer. Píšu to ve fazolích, zkouším nastavit správné odstavení v notepadu++
@Azathoth e: Nastaveno.
public function __construct(\DibiConnection $db)
{
$this->db = $db;
}
Používám $database.
Stále jsem u chyby
Call to a member function register() on a non-object
Při kódu – habruje 48 řádka.
>
38: ->addRule(Form::FILLED, ‚Heslo znovu‘)
39: ->addRule(Form::EQUAL, ‚Hesla se neshodují.‘, $form[‚password‘]);
40: $form->addSubmit(‚send‘, ‚Registrovat‘);
41: $form->onSuccess[] = array($this, ‚registerFormSubmitted‘);
42: return $form;
43: }
44:
45: public function registerFormSubmitted(UI\Form $form) {
46: $values = $form->getValues();
47: // $new_user_id = $form->getValues($asArray = FALSE);
48: $new_user_id = $this->users->register($values);
49: if($new_user_id){
50: $this->flashMessage(‚Registrace proběhla úspěšně!‘);
51: $this->redirect(‚Sign:in‘);
52: }
Editoval doudik (2. 6. 2015 0:03)