Call to a member function getOperations() on null

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

Ahoj,

zkouším jeden příklad, když zavolám funkci getOperations z modelu v presenteru při vytváření komponenty
tak to skončí chybou (Call to a member function getOperations() on null).Nevíte kde je chyba?

Výpis : model

<?php
namespace App\Model;

use Nette\Object;

class CalculatorManager extends Object
{
   /* definice konstant*/

    const
       ADD=1,
       SUBTRACT=2,
       MULTIPLY=3,
       DIVIDE=4;


    /* secte  */
    public function add($x,$y)
      {
        return $x+$y;

      }
    /*odecte*/
public function subtract($x,$y)
     {
      return $x-$y;
     }
    /*nasobi*/
public function multiply($x,$y)
    {
     return $x*$y;
    }

    /*deleni*/
public function divide($x,$y)
    {
    return ($x/$y);
    }


public function getOperations()
     {
       return  array(
        self:: ADD=>'Sčítání',
        self:: SUBTRACT=>'Odčítání',
        self:: MULTIPLY=>'Násobení',
        self:: SUBTRACT=>'Dělení'
    );
       return $array;
    }

  /*zavola danou operaci a vrati jeji vysledek*/
 public function calculate($operation,$x,$Y)
   {
     switch ($operation)
     {
       case self::ADD:
           return $this->add($x, $y);
       case self::SUBTRACT:
           return $this->subtract($x, $y);
       case self::MULTIPLY:
           return $this->multiply($x, $y);
       case self::DIVIDE:
           return $this->divide($x, $y);

       default :
          return null;


     }


   }
}

?>

presenter:

<?php

namespace App\Presenters;

use Nette\Application\UI\Presenter;
use App\Model\CalculatorManager;
use Nette\Application\UI\Form;
use Nette;
use App\Model;

/**
 * Homepage presenter.
 */
class CalculatorPresenter extends Presenter
{

    /** @var int|null výsledek operace nebo null */
    private $result=null;

    private $calculatorManager;


    const FORM_MSG_REQUIRED= 'Tohle je povinné pole',
          FORM_MSG_RULE='Tohle pole má neplatný formát',
          Integer=':integer';

public function _construct(\Model\CalculatorManager $calculatorManager)
{
    parent::_construct();
    $this->calculatorManager=$calculatorManager;
}


	public function renderDefault()
	{
		$this->template->result = $this->result;

	}

        protected function createComponentCalculatorForm()
     {

        $form=new Form;
        $form->addRadioList('operation','Operace:',$this->calculatorManager->getOperations())
             ->setDefaultValue(CalculatorManager::ADD)
             ->setRequired(self::FORM_MSG_REQUIRED);
        $form->addText('x','První číslo:')
             ->setType('number')
             ->setDefaultValue(0)
             ->setRequired(self::FORM_MSG_REQUIRED)
             ->addRule(Form::INTEGER,self::FORM_MSG_RULE)
             ->addConditionON($form['operation'],Form::EQUAL, CalculatorPresenter::DIVIDE)
             ->addRule(Form::Patern,'Nelze dělit nulou','^[^0].*');
        $form->addSubmit('calculate','spočítej výsledek');
        $form->onSuccess[]=[$this,'calculatorFormSucceeded'];
        return $form;
     }

public function calculatorFormSucceeded($form,$values)
{
$this->result=$this->calculatorManager->calculate($values->operation,$values->x,$values-y);

}
    }
?>

a config.neon :

services
App\Model\CalculatorManager
App\Forms\SignFormFactory

router: App\RouterFactory::createRouter

David Matějka
Moderator | 6445
+
+1
-

__construct, nikoliv _construct – dve podtrzitka

JohnSilver
Člen | 2
+
0
-

Ach jo, díky