Chyba v $this v registračním formuláři

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

Ahoj, mám tento kód u registračního formuláře, u mě na localhostu to funguje v pohodě, ale na serveru na hostingu mi to píše chybu „Fatal Error: Using $this when not in object context“. Jde o nějakou jinou verzi PHP? jak to opravit aby to fungovalo všude?

<?php
public function createRegisterForm($instructions = null, Form $form = null){
    	$form = $this->createBasicForm($form);
    	$form->addPassword('password_repeat')
    		->setRequired()
    		->setAttribute('placeholder', 'Heslo znovu')
    		->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']);
    	$form->addText('y')->setType('number')->setRequired()
    		->setAttribute('placeholder', 'Zadejte aktuální rok (antispam).')
    		->addRule(Form::EQUAL, 'Špatně vyplněný antispam', date('Y'));
    	$form->addSubmit('register', 'Registrovat');
    	$form->onSuccess[] = function(Form $form) use ($instructions){
    		$this->login($form, $instructions, true);
    	};
    	return $form;
    }
?>

Díky za radu

Blujacker
Člen | 89
+
0
-

razorlight napsal(a):

Ahoj, mám tento kód u registračního formuláře, u mě na localhostu to funguje v pohodě, ale na serveru na hostingu mi to píše chybu „Fatal Error: Using $this when not in object context“. Jde o nějakou jinou verzi PHP? jak to opravit aby to fungovalo všude?

<?php
public function createRegisterForm($instructions = null, Form $form = null){
    	$form = $this->createBasicForm($form);
    	$form->addPassword('password_repeat')
    		->setRequired()
    		->setAttribute('placeholder', 'Heslo znovu')
    		->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']);
    	$form->addText('y')->setType('number')->setRequired()
    		->setAttribute('placeholder', 'Zadejte aktuální rok (antispam).')
    		->addRule(Form::EQUAL, 'Špatně vyplněný antispam', date('Y'));
    	$form->addSubmit('register', 'Registrovat');
    	$form->onSuccess[] = function(Form $form) use ($instructions){
    		$this->login($form, $instructions, true);
    	};
    	return $form;
    }
?>

Díky za radu

Smazana cache na serveru byla?

leninzprahy
Člen | 150
+
+3
-

Tento zápis předpokládá minimálně php 5.4
U nižších verzí lze použít něco jako:

$that = $this;
$form->onSuccess[] = function(Form $form) use ($instructions, $that){
	$that->login($form, $instructions, true);
};

razorlight napsal(a):

Ahoj, mám tento kód u registračního formuláře, u mě na localhostu to funguje v pohodě, ale na serveru na hostingu mi to píše chybu „Fatal Error: Using $this when not in object context“. Jde o nějakou jinou verzi PHP? jak to opravit aby to fungovalo všude?

<?php
public function createRegisterForm($instructions = null, Form $form = null){
    	$form = $this->createBasicForm($form);
    	$form->addPassword('password_repeat')
    		->setRequired()
    		->setAttribute('placeholder', 'Heslo znovu')
    		->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']);
    	$form->addText('y')->setType('number')->setRequired()
    		->setAttribute('placeholder', 'Zadejte aktuální rok (antispam).')
    		->addRule(Form::EQUAL, 'Špatně vyplněný antispam', date('Y'));
    	$form->addSubmit('register', 'Registrovat');
    	$form->onSuccess[] = function(Form $form) use ($instructions){
    		$this->login($form, $instructions, true);
    	};
    	return $form;
    }
?>

Díky za radu

razorlight
Člen | 15
+
0
-

jj cache je smazaná a zkoušel sem i $that a to mi hází error undefined variable. mám jí definovanou přímo v tý funkci

David Matějka
Moderator | 6445
+
+1
-

asi si to $that pouzil spatne – koukni znovu na ten prispevek @leninzprahy . musis tam mit $that = $this a potom to $that vlozit do use u closure

razorlight
Člen | 15
+
0
-

ajo toho sem si předtim nevšiml. No teďka sem to teda upravil a píše mi to další error: Nette\MemberAccessException: Call to undefined method parent::login()…

U mě na local opět funkční už takhle.

David Matějka
Moderator | 6445
+
0
-

neni ta metoda login private nebo protected?

razorlight
Člen | 15
+
0
-

byla private… už to funguje, díky za pomoc

David Matějka
Moderator | 6445
+
0
-

Mimochodem, durazne doporucuji pouzit novejsi verzi PHP, 5.3 je jiz 2 roky nepodporovana: http://php.net/…versions.php

a nove nette bude podporovat jen php >= 5.6