2 moduly v jednom presenteru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
masterr
Začátečník | 141
+
0
-

Fatal Error

Call to a member function uploadimg() on a non-object

function addgoodsFormSubmitted($form)
{
  if($form['ok']->isSubmittedBy()) {
        $this->flashMessage('Zboží přidáno.');
        $values = $form->getValues();
        $goods = new Goods;

       // $image->save('/document_root/upload/');
        $this->model->createGoods($goods);
        **$file = new FileManager();
       $this->file->uploadimg("goods",144,$values['count_img']);**
    }
    $this->redirect(':Admin:goods:');
}
public function getModel() {
        if(!isset($this->goods))
          $this->goods = new Goods;
       return $this->goods;
}

Potřebuji použít dva modely v 1 presenteru a nwm jak na to.

Editoval masterr (4. 10. 2010 15:18)

jasir
Člen | 746
+
0
-

Moduly vs. modely, pořádně nezformátované, nesrozumitelná otázka…
Nevím, jestli ti někdo bude chtít takhle poradit.

masterr
Začátečník | 141
+
0
-

Omlouvám se,
myslím modely. Nadpis zřejmě nejde editovat, že?

Jedná se o to, že potřebuji použít dva modely, ale nwm jak říct, tenhle model použij proto a tenhle pro to druhé.

$file = new FileManager();
       $this->file->uploadimg("goods",144,$values['count_img']);

Dá se to tak to použít?

Editoval masterr (4. 10. 2010 17:32)

bazo
Člen | 620
+
0
-

modelov si moze v presenteri pouzivat kolko len chces. a to ci sa da ten kod tak pouzit, zalezi na tom, ako si si ten file manager naprogramoval

westrem
Člen | 398
+
0
-

Preco volas $this->file-> .. ked predtym mas ocividne iba instancovanie premennej a nikde to do tej $this->file nepriradujes. Chcel si tam teda napisat: $file->uploadimg( .. )

Pripadne ak to chces na ten styl ako to je v ukazkovom priklade v distribucii (kde prave tento model je nestastne vysvetleny) tak takto:

// funkcia v presenteru
public function getFile() {
        if(empty($this->file))
          $this->file = new FileManager;
       return $this->file;
}

//pouzitie vo vnutri nejakej funkcie presenteru
$this->file->uploadimg(' .. ')
masterr
Začátečník | 141
+
0
-

Dík, už chápu jak to funguje.
Edit:

 $this->model->createGoods($goods);


       $this->file->uploadimg("goods",144,$values['count_img']);
    }
    $this->redirect(':Admin:goods:');



	}

   public function getFile() {
        if(empty($this->file))
          $this->file = new FileManager;
       return $this->file;
}

    public function getModel() {
        if(!isset($this->goods))
          $this->goods = new Goods;
       return $this->goods;



    }

Když to mám takto tak to stale hazi tu chybu, ale když to napíšu

$file->uploadimg("goods",144,$values['sklad']);

tak to beží, čim to je?

Editoval masterr (4. 10. 2010 17:55)

westrem
Člen | 398
+
0
-

Ach, ospravedlnujem sa, trochu som mystifikoval v mojom predoslom prispevku. V zhone som si neuvedomil jednu zasadnu vec. Prepis to teda takto:

// toto bude v presenteri
private $file;

public function startup()
{
	parent::startup();
	$this->file = new FileManager();
}

Dalej zmaz funkciu getFile() teraz je uz nepotrebna. V kode by ti uz potom malo normalne fungovat $this->file->uploadimg.

masterr
Začátečník | 141
+
0
-

Proč to má být takto a ne jak jsi psal předtím? Jak zvýrazňuješ syntaxy tady na forku?

westrem
Člen | 398
+
0
-

Pretoze ked som to pisal vtedy tak som prilis premyslal nad properties v Nette (kedze akurat ten thread som docital) a neuvedomil som si plne, ze sme v kontexte presenteru, ktory v podstate nikdy nebudes brat ako externu triedu.

Problem pri tom co som napisal v 1. prispevku je ten, ze pri volani:

$this->file->..

sa nezavola getter getFile() pretoze si vo vnutri triedy a teda property file je viditelna. Ak chces vediet nieco viac, nastuduj si jednak Magic Methods v PHP a tiez ako funguje Nette\Object

Ad zvyraznovanie:
Na fore funguje Texy! syntax, to mas predsa napisane hned nad textareou, kde pises prispevok. Na formatovanie kodu pouzivaj zapis, ktory je uverejneny v Podrobnej syntaxi v sekcii „Kod“