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
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