pridanie komponentu do presenteru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Michal8245
Člen | 14
+
0
-

Zdravím prosím vas mam taky problém snažím sa o rozbehanie komponentu Captcha čo je tu na fore zaveseny a dostal som sa až do bodu kedy mi vyhadzuje vynimku „Component ‚captcha‘ is not attached to ‚Presenter‘“.

public function getLink($need = FALSE)
	{
		if (!isset($this->link)) {
			$presenter = $this->lookup('Presenter');
			if ($presenter !== NULL) {
				$this->link = $presenter->lazyLink(self::$defaultLinkMask);
			}

			if ($need && $this->link === NULL) {
				throw new InvalidStateException('Component must be attached to presenter for link autocreation.');
			}
		}

		return $this->link;
	}

vyhadzuje mi to pri tom ako sa snaží dostat presenter. neviete niekto čo s tym?
dakujem vopred

nanuqcz
Člen | 822
+
0
-

Ahoj, dáváš nám docela málo informací. Jak vytváříš formulář s captchou? Jak vypadá celý výpis z laděnky?

Zkusím si ale tipnout :-) Pokud vytváříš formulář takto:

function createComponentForm() {
	$form = new Form();
	...
}

zkus formuláři předat aktuální presenter a jméno budoucí komponenty:

function createComponentForm($name) {  // parametr $name ti tam Nette předá samo
	$form = new Form($this, $name);
	...
}
Michal8245
Člen | 14
+
0
-

no formular mam ako zvlašt komponent

class RegisterForm extends AppForm
{

    public function __construct($parent, $name)
    {
        parent::__construct($parent, $name);
        class_exists('Captcha');
        $this->addText("name","Full name");
        $this->addText("login", "User name")
                ->addRule(NForm::FILLED);
        $this->addText("email","E-mail")
                ->setEmptyValue("@")
                ->addRule(NForm::FILLED)
                ->addRule(NForm::EMAIL);
        $this->addPassword("password", "Heslo")
                ->addRule(NForm::FILLED)
                ->addCondition(NForm::MIN_LENGTH,'Heslo musí mať aspoň %d znakov', 5);

        $this->addPassword("passwordVerify", "Zopakuj heslo")
                ->addRule(NForm::EQUAL, "Heslá sa musia zhodovať", $this["password"]);
        $this->addCaptcha('captcha', 'Zadaj kód z obrázku')
            ->setTextColor(NImage::rgb(255, 0, 0))
            ->addRule('Captcha::validateValid', 'Opište správně písmena z obrázku.');
        $this->addSubmit("submit", "Pokračovať");
        $this->addProtection('Vypršal časový limit, odošlite formulár znovu');
    }

no a v presenteri mam vytvorenie

protected function createComponentRegisterForm($name)
    {
        $form = new RegisterForm($this, $name);
        $form->onSuccess[] = callback($this, 'registerFormSubmitted');
    }

no ale presenter to neni ta captcha presenter, ale presenter čo mam ja na prihlasovanie. može byt aj tam problém?
no potom už len v šablone davam vypisovat control registerForm

tak asi tam bude chyba že nemam to ako naviazane na ten presenter. Ale neviem ako to spravit inač .. ten navod čo je tu na fore na zakomponovanie tej captchy do projektu je biedny tak neviem kde by mohla byt chyba.
a k tej ladenke neviem presne čo odtial potrebuješ skopirovat lebo nejako sa v nej nevyznam je tam len chybova hlaška a subory kde nastala :D

Editoval Michal8245 (17. 11. 2012 8:36)