Using $this when not in object context

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

ahoj,

na řádku $count = $this->basket->getBasketItem($itemId)->fetch();

mi to hází chybu

Using $this when not in object context

na localhostu to nedělá a na hostingu ano. Vím že to souvisí nejak s tím že $this není možno použít v anonimních funkcích… ale neznám řešení.

Děkuji

<?php
public function createComponentShopForm() {

        return new Nette\Application\UI\Multiplier(function ($itemId) {

            $count = $this->basket->getBasketItem($itemId)->fetch();

            $form = new Nette\Application\UI\Form;
            $form->addText('count', 'Počet zboží:')
                    ->setAttribute("size", 3)
                    ->addRule($form::FILLED)
                    ->addRule($form::INTEGER)->setValue($count->count);
            $form->addHidden('id', $count->product->id);
            $form->addSubmit('send', 'Aktualizovat');
            $form->onSuccess[] = $this->changeCount;
            return $form;
        });
    }
?>
Felix
Nette Core | 1247
+
0
-
$presenter = $this;
return new Nette\Application\UI\Multiplier(function ($itemId) use ($presenter) {

Mam pocit ze od PHP 5.5 to uz pujde. Nebo i driv?

David Matějka
Moderator | 6445
+
+1
-

$this muzes v anonymni fci pouzit od php 5.4;
pouzij tohle:

public function createComponentShopForm() {
	$self = $this;
        return new Nette\Application\UI\Multiplier(function ($itemId) use($self){
	$self->basket...
batko
Člen | 219
+
0
-

matej21 napsal(a):

$this muzes v anonymni fci pouzit od php 5.4;
pouzij tohle:

public function createComponentShopForm() {
	$self = $this;
        return new Nette\Application\UI\Multiplier(function ($itemId) use($self){
	$self->basket...

hazi chybu

Undefined variable: this

přitom na localu mi to jede normálně…

Editoval batko (4. 9. 2013 21:31)

David Matějka
Moderator | 6445
+
0
-

jako na tomhle

$self = $this;

radku? to snad ne… vymenil jsi VSECHNY $this v anonymni fci za $self?

batko
Člen | 219
+
0
-

matej21 napsal(a):

jako na tomhle

$self = $this;

radku? to snad ne… vymenil jsi VSECHNY $this v anonymni fci za $self?

<?php
    public function createComponentShopForm() {

        $self = $this;
        return new Nette\Application\UI\Multiplier(function ($itemId) use($self) {

            $count = $self->basket->getBasketItem($itemId)->fetch();

            $form = new Nette\Application\UI\Form;
            $form->addText('count', 'Počet zboží:')
                    ->setAttribute("size", 3)
                    ->addRule($form::FILLED)
                    ->addRule($form::INTEGER)->setValue($count->count);
            $form->addHidden('id', $count->product->id);
            $form->addSubmit('send', 'Aktualizovat');
            $form->onSuccess[] = $self->changeCount;
            return $form;
        });
    }
?>

ano laděnka označuje tento řádek

$self = $this;

David Matějka
Moderator | 6445
+
0
-

muzes sem hodit celou ladenku?

batko
Člen | 219
+
0
-

To muzu – to ji mam jen zkopirovat?

jinak mozna bych mozna mel rici ze tu fci reateComponentShopForm() mam uvnit komponenty…

David Matějka
Moderator | 6445
+
0
-

uloz html a nekam ho uploadni; to, ze je to uvnitr komponenty, nema vliv

batko
Člen | 219
+
0
-

matej21 napsal(a):

uloz html a nekam ho uploadni; to, ze je to uvnitr komponenty, nema vliv

poslal jsem ti link emailem, děkuji

David Matějka
Moderator | 6445
+
0
-
return new Nette\Application\UI\Multiplier(function ($itemId) {
                $self = $this;

zrovna neni to, co jsem psal :)
viz:

public function createComponentShopForm() {
  $self = $this;
  return new Nette\Application\UI\Multiplier(function ($itemId) use($self){

to $self = $this musis mit pred anonymni fci + tam musis dat use($self)

batko
Člen | 219
+
0
-

Ja jsem totiz blbec. Na locale jsem to upravil, ale nahrál to do jiné složky na serveru.

Omlouvám se a moc děkuji