Missing argument 1 for …

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

Zdravím, nevím v čem jse zakopaný pes a proto bych Vás rád požádal o radu. Raději sem rovnou přiložím inkriminované soubory:
AdministracePresenter:

<?php

use Nette\Application\UI\Control;
use \AdministraceModel;


class AdministracePresenter extends AdminPresenter{

	private static $AdministraceModel;

	public function beforeRender()
	{	}

	protected function getAdministraceModel()
	{
		if (self::$AdministraceModel === NULL) {
			self::$AdministraceModel = new \Model\AdministraceModel();
		}
		return self::$AdministraceModel;
	}

	public function createComponentTestWysiwyg()
	{
		$form = new Nette\Application\UI\Form();
		$form->onSuccess[] = callback($this, 'testWysiwyg_onSuccess');
		$form->addTextArea('text', 'Text')->getControlPrototype()->class('mceEditor');
		$form -> addSubmit('save', 'Uloz');

		return $form;
	}

	public function testWysiwyg_onSuccess(Nette\Application\UI\Form $form)
    {
        $values = $form->getValues();

		$this->getAdministraceModel()->save(array('text' => $values['text']));
        $this->flashMessage('Text uložen ...');
        $this->redirect('Administrace:test');
    }
}
?>

AdministraceModel:

<?php
namespace Model;
use Nette\Object,
	Nette\Enviroment,
	Nette\Database\Connection;

use \dibi;

class AdministraceModel extends BaseModel
{

	public function __construct($database)
	{
        parent::__construct($database);
    }

	public function save(array $data)
	{
		if (!isset($data['id']) || $data['id'] == NULL) {
			$this->insert($data);
		} else {
		$this->update($data, array('id' => $data['id']));
		}
	}
}
?>

a problém je, že mi to hlásí Missing argument 1 for Model\AdministraceModel::__construct(), called in C:\xampp\htdocs\A\app\AdminModule\presenters\AdministracePresenter.php on line 30 and defined. Mohu Vás požádat o radu co dělám špatně? Děkuji

Jan Endel
Člen | 1016
+
0
-

Chyba je na tomto řádku:

self::$AdministraceModel = new \Model\AdministraceModel();

nepředáváš připojení k databázi, kterou tvůj model vyžaduje.

milan
Člen | 24
+
0
-

pilec napsal(a):

Chyba je na tomto řádku:

self::$AdministraceModel = new \Model\AdministraceModel();

nepředáváš připojení k databázi, kterou tvůj model vyžaduje.

Ahoj, omlouvám se, ale dostal jsem se k odpovědi až teď. Nevím jak to udělat, mohl bys mě prosím nakopnout? Děkuji

Claudie1
Člen | 21
+
0
-

vytáříš nový objekt v jehož konstruktoru máš předepsaný parametr $database
viz:

public function __construct($database)

je tedy třeba ten parametr uvést při vytváření modelu do závorek, které máš teď prázdné:

self::$AdministraceModel = new \Model\AdministraceModel($database)

v $database by mělo být to připojení

bojovyletoun
Člen | 667
+
0
-

to getdatabaseModel je ukázka tfujsingletonu. Ještě do toho motat self… ještě, že to nečetl Hosiplan. Přečti si něco zde

Po úpravě ti zbyde v presenteru jedoduchý kod: místo $this->getAdministraceModel() stačí budeš volat $this->context->administracnisluzba, (pozn: nebrání ti nic si tohle vložit do oné funkce getadmi…)
přičemž význam bude takový, že se tím dotazuješ na službu. Tu službu si můžeš definovat v config.neon. Přičemž ta služba bude při své tvorbě brát jako další parametr další službu, což bude připojení.

Letmo jsem se podíval sem ,to je asi ono.

Editoval bojovyletoun (25. 11. 2011 18:21)

JuniorJR
Člen | 181
+
0
-

Ten singleton jsem mu poradil já :-) a jelikož dotyčnému OOP nic neříká, nemá smysl mu něco vykládat o DI…

Editoval JuniorJR (25. 11. 2011 19:57)