Jak předat parametr ze šablony do druhé

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

Zdravím, můj problém spočívá v tom, že mám dejme tomu seznam chatovacích místností a při kliknutí na místnost se místnost otevře a načtou se již uložené příspěvky. Takže potřebuju předat id_room a ve druhé šabloně pomocí tohoto id získat data. zkoušel jsem to podobně jako s formulářem, kdy v modelu bylo

public function getRoom($id_room) {
      $stmt=$this->db->query("select * from rooms where id_rooms=?",$id_room);
      return $stmt->fetch();
  }
public function actionRoom($id_room){
           $this->data=$this->getModel()->getRoom($id_room);
       }
<td><a n:href="Chat:Room, rooms => id_rooms">Vstoupit</a></td>

ale to byla blbost, protože jsem se pak k tem datům nedostal. Doufám, že jsem to podal srozumitelně dík za případné rady.

Unlink
Člen | 298
+
0
-

A nemáš chybu v tom odkaze?
v actione máš ten parameter pomenovaný $id_room a odkaze rooms

Mysteria
Člen | 797
+
0
-

Myslíš něco jako tohle?

public function actionRoomList() {
	$this->template->rooms = $this->model->getAllRooms();
}

public function actionRoomDetail($roomID) {
	$this->template->room = $this->model->getRoom($roomID);
}
{foreach $rooms as $room}
Místnost {$room->name} - <a n:href='roomDetail $room->id'>Vstoupit</a>
{/foreach}
Vítejte v místnosti {$room->name}.
<!-- Výpis příspěvků... -->
safik
Člen | 11
+
0
-

Ano něco takového akorát mě to vyzuje Call to a member function getRoom() on null na řádku

public function actionRoomDetail($id_room){
         $this->template->room=$this->model->getRoom($id_room);
     }
David Matějka
Moderator | 6445
+
0
-

Jak injectujes model?

safik
Člen | 11
+
0
-

to ani nevim kde zjistit :) v modelu mam

public function __construct($db) {
     $this->db=$db;
 }

a v presenteru

private function getModel(){
           if(!isset($this->model)){

               $this->model=new \App\Model\ChatModel($this->context->getService("database"));
           }

           return $this->model;
       }

jestli je to ono

Mysteria
Člen | 797
+
+1
-

Ale fuj. Tohle se hodně rychle odnauč, v Nette se toto řeší mnohem lépe. :)

Rychlokurz vytvoření modelu, který pracuje s databází a jeho „zpřístupnění“ v presenteru najdeš zde: https://forum.nette.org/…senterom-atd#…

Případně doporučuju přečíst celé téma, je tam rozebráno proč je tvoje metoda výše uvedená špatně. :)

EDIT: Podle toho bys to měl být schopný dát dokupy, pokud ne, tak napiš v čem je problém a nějak to dáme pořádně dokupy. :)

Editoval Mysteria (24. 6. 2015 19:35)

safik
Člen | 11
+
0
-

He a takto nás to naučili ve škole :D

David Matějka
Moderator | 6445
+
0
-

@safik chjo :(

https://www.youtube.com/watch?…

muzes jim ve skole vysvetlit, ze se to tak nedela? :)

Mysteria
Člen | 797
+
0
-

Tak před Nette jsem to dělal podobně stejně. Samozřejmě můžeš si DI kontejner implementovat i sám, ale o něčem takovém nemají začátečníci v čistém PHPku většinou ani tušení (nebo já jsem alespoň do setkání s Nette neměl).