Problém s updatem (Call to a member function of a non-object)

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

Dobrý den.
Nette zkouším asi týden, resp. celé OOP.

Quickstart jsem prolétl…
Zkouším si vyvořit webík, ale narazil jsem na problém kdy chci updatovat položku v DB a hází mi to chybu:
Call to a member function getOptions() on a non-object

vcelku nechápu proč…
v modelu jsem si vytvořil:

public function getOptions(){
    return $this->database->table('nastaveni');
}

a v EditPresenteru mám toto..

public function barvyFormSubmitted(Form $form)
    {

		$this->model->getOptions()->where(array('id' => $user->id))->update(array(
                                                   //'obsah_barva' =>  hex2rgb($form->values->obsah_barva),
                                                   'obsah_alfa' => $form->values->obsah_alfa
                                            ));

        //$this->redirect('this');
    }

Dělal jsem to na základě předlohy tohoto dotazu:

$this->model->getTasks()->where(array('id' => $taskId))->update(array('done' => 1));

Můžete mě nějak nakopnout proč tomu tak je?
Předem děkuji za reakci

SparkCZ
Člen | 22
+
0
-

Předpokládám že $this->model je instance třídy kde máš metodu getOptions(), je to tak? POšli kdyžtak zbytek skriptů.

Frozen
Člen | 19
+
0
-

Ano.

Zde je Model.php

class Model extends Nette\Object {
    public $database;


    public function __construct(Nette\Database\Connection $database){
        $this->database = $database;
    }

    public function getManagers(){
        return $this->database->table('manager');
    }

    public function getStadions(){
        return $this->database->table('stadion');
    }

    public function getTeams(){
        return $this->database->table('team');
    }

    public function getOptions(){
        return $this->database->table('nastaveni');
    }

}

a zde je EditPresenter.php

use Nette\Application\UI\Form;
/**
 * Homepage presenter.
 *
 * @author     John Doe
 * @package    MyApplication
 */
class EditPresenter extends TeamPresenter
{
    public $model;

    public function startup(){

        parent::startup();
        $id = $this->getParameter('id');
        $user = $this->getUser();
        if($user->id == $id){
        }else{
            $this->redirect('Edit:default', $user->id);
        }

    }

    public function actionObrazky($id){

    }

    public function actionBarvy($id){

    }

    protected function createComponentBarvyForm()
        {
            $form = new Form();
            $form->addText('obsah_barva', 'Pozadí obsahu:', 20, 6)
                    ->setHtmlId('colorpickerField1');
            $form->addText('obsah_alfa', 'Průhlednost obsahu:', 2, 2);
            $form->addText('pismo_obsah_barva', 'Brava písma obsahu:', 20, 6)
                    ->setHtmlId('colorpickerField2');
  /*          $form->addSelect('userId', 'Pro:', $this->model->getUsers()->fetchPairs('id', 'name'))
                ->setPrompt('- Vyberte -')
                ->addRule(Form::FILLED, 'Je nutné vybrat, komu je úkol přiřazen.');*/
            $form->addSubmit('create', 'Vytvořit');
            $form->onSuccess[] = callback($this, 'barvyFormSubmitted');
            return $form;
        }
    public function barvyFormSubmitted(Form $form)
        {
     /*       $this->model->getTasks()->insert(array(
                'text' => $form->values->text,
                'user_id' => $form->values->userId,
                'created' => new DateTime(),
                'tasklist_id' => $this->taskList->id
            ));
      *
            $this->flashMessage('Úkol přidán.');*/
        // FUNKCE PRO PŘEVOD BARVY Z hex DO RGB
        function hex2rgb($hex) {
                if (strlen($hex)==3) $hex=$hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2];
                elseif (strlen($hex)!=6) return false;
                $rgb=array();
                $rgb[0] = hexdec(substr($hex,0,2)); // red
                $rgb[1] = hexdec(substr($hex,2,2)); // green
                $rgb[2] = hexdec(substr($hex,4,2)); // blue
                $barvicka = "rgb(".$rgb[0].",".$rgb[1].",".$rgb[2].")";
            return $barvicka;
            }

         $this->model->getOptions()->where(array('id' => $user->id))->update(array(
                                                       //'obsah_barva' =>  hex2rgb($form->values->obsah_barva),
                                                       'obsah_alfa' => $form->values->obsah_alfa
                                                ));

            //$this->redirect('this');
        }


}
SparkCZ
Člen | 22
+
0
-

A $model definuješ v TeamPresenteru např. takto?

$this->model = new Model ($this->context->database);

Editoval SparkCZ (9. 2. 2012 14:36)

Frozen
Člen | 19
+
0
-
$this->model = $this->getService('model');

V config.neon ho mám jako službu.
Na základě tvé odpovědi, jsem ho zkusil přidat do startupu(); v Editpresenteru společně s $userem a chybu to již nehází.
Děkuji ;-)

Editoval Frozen (9. 2. 2012 14:41)