action nema kompletni url a chyby ID

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

Zdravim,

mam url /admin/articles/update/98 a formular se vykresli jako <form id=„frm-update“ method=„post“ action=„/admin/articles/update?do=update-submit“>, bohuzel zde chyby ID 98 a kdyz odeslu data tak nastane chyba protoze do formulare dostavam data z db.

Router mam

$adminRouter[] = new Route('admin/<presenter>/<action>[/<id [0-9]+>]', 'Default:default');

Nevite nekdo jak dostat id do rmulare bez toho abych musel pouzit setAction?

Nete mam 2.0.3.

ViPEr*CZ*
Člen | 817
+
0
-

Todle dělám přes hidden pole ve formuláři.

Tom_as
Člen | 28
+
0
-

Skoda, doufal jsem v cistci reseni. Dekuji Viper

ViPEr*CZ*
Člen | 817
+
0
-

No já to jako nečisté řešení nevnímám… při editu se mi nastaví hodnota do skrytého pole a při odeslání formu se odešle na server, navíc si můžu přes Nette nastavit, že tato hodnota při odeslání formu je vyžadována, takže kdyby se něco po*, tak form nebude validní. Odesílání se provádí přes POST. To co chceš ty by bylo akorát přes GET v url, ale stejně se to tam musí nějak dostat. Jinak nevidím smysl pro skrytá pole v html, když už bych je nemohl tímto či podobným způsobem využívat a mělo by to být nečisté řešení. Ještě mě napadá, že by jsi mohl využít tzv. persistentní parametr i když ty skrytá pole se mi teda osobně líbí více.

Tom_as
Člen | 28
+
0
-

Nakonec jsem tu spichnul takto:

	protected function createComponentUpdate($id){

		$model = new \AdminArticlesModel();


		$id = ($this->getParam("id")) ? $this->getParam("id") : $this->request->post['id_menu'];


		$r = $model->getArticle($id);

		$form = new Form();

		$form->addText('title_menu', 'Název kategorie:')
				->setRequired("Zadejte název kategorie")
				->setValue($r->name);
		$form->addText('title_page', 'Nadpis stránky:')
				->setRequired("Zadejte titulek stránky")
				->setValue($r->title);
		$form->addText('text', 'Obsah stránky:')
				->setRequired("Zadejte obsah stránky")
				->setValue($r->text);

		$form->addHidden("id_article", $r->id_article);
		$form->addHidden("id_menu", $r->id_menu);

		$form->addSubmit('submit', 'Uložit kategorii');
		$form->onSuccess[] = callback($this, 'UpdateFormSubmitted');

	return $form;

	}

	public function UpdateFormSubmitted($form)
	{

	    $values = $form->getValues();

	    $model = new \AdminArticlesModel();
	    $r = $model->Update($values);

	    if($r){
	    	$this->flashMessage("Kategorie byla aktualizována", 'info');
	    	$this->redirect('Articles:update', array('id' => $values->id_menu));
	    }else{
	    	$this->flashMessage("Nastala chyba ".$r, 'error');
	    	$this->redirect('Articles:update', array('id' => $values->id_menu));
	    }


	}
ViPEr*CZ*
Člen | 817
+
0
-

Jj to jsem měl takhle na mysli. Předpokládám, že to takhle máš v Presenteru, pak bych to celé vyhodil do extra souboru někde do složky components. Parametr id v createComponent ani nevyužíváš, tak tam být nemusí. A takhle třeba jak to máš voláš 2× new AdminArticlesModel, což před extra třídu pro komponentu by jsi nemusel. A docela by mě zajímalo jak vypadá ten model, když v tomhle samplu se tam nikde nedostane database?

awsickness
Člen | 98
+
0
-

a neslo by tohle resit pres persistent parametr ?
https://doc.nette.org/…n/presenters#…

ViPEr*CZ*
Člen | 817
+
0
-

awsickness napsal(a):

a neslo by tohle resit pres persistent parametr ?
https://doc.nette.org/…n/presenters#…

Vždyť jsem o tom psal :-)

Tom_as
Člen | 28
+
0
-

Jen pro zajimavost DB resim v modelu takto.

abstract class BaseModel extends \Nette\Object
{

	protected $db;

    public function __construct()
    {
        $this->db = Nette\Environment::getService('database');

    }
}
ViPEr*CZ*
Člen | 817
+
0
-

No tfuj… co takhle DI?

public function __construct(Nette\Database\Connection $db)
{
        $this->db = $db;
}
Filip Procházka
Moderator | 4668
+
0
-

Chybí.