Redirect na príspevok po vytvorení

PadFoot
Člen | 5
+
0
-

Ahojte mám taký problém.
Keď vytvorím Post chcem až ma redirectne na ten konkrétny post.
Keď som robil cms podľa Nette tutoriálu tak mi to šlo ale teraz mi to nejde a neviem zistiť prečo.
Píše mi to:
Trying to get property ‚id‘ of non-object

Metóda vyzerá takto

code

<?php

    public function postFormSucceeded(Form $form, array $values): void
    {
      $id = (int) $this->getParameter('id');

      if ($id) {
        $post = $this->posts->findById($id);
        $post->update($values);
        $this->flashMessage('The post has been updated.', 'success');
        $this->redirect('show', $post->id);
      } else {
        $post = $this->posts->insert($values);
        $this->flashMessage('The post has been created.', 'success');
        $this->redirect('show', $post->id);
      }
    }
?>

Prvý redirect funguje, druhý nie

MajklNajt
Člen | 471
+
+1
-

ahoj, ukáž aj metódu $this->posts->insert($values);?

PadFoot
Člen | 5
+
0
-

MajklNajt napsal(a):

ahoj, ukáž aj metódu $this->posts->insert($values);?

<?php

	public function findAll(): Nette\Database\Table\Selection
	{
		return $this->database->table('posts');
	}

	public function insert(iterable $values): void
	{
		$this->findAll()->insert($values);
	}
?>

Editoval PadFoot (14. 6. 2020 19:18)

MajklNajt
Člen | 471
+
+4
-

keďže ti metóda insert nič nevracia, nemôžeš z toho postu ťahať ID :) oprav si to takto:

public function insert(iterable $values): Nette\Database\IRow
{
	return $this->findAll()->insert($values);
}
PadFoot
Člen | 5
+
0
-

MajklNajt napsal(a):

keďže ti metóda insert nič nevracia, nemôžeš z toho postu ťahať ID :) oprav si to takto:

public function insert(iterable $values): Nette\Database\IRow
{
	return $this->findAll()->insert($values);
}

Super. Veľmi pekne ďakujem :)

CZechBoY
Člen | 3608
+
0
-

btw na tohle by přišlo každý IDEčko, doporučuju se poohledénout po nějakém… já používám phpstorm, někdo zase nedá dopustit na vscode/sublime (s pluginama); případně alespoň pouštět phpstan

PadFoot
Člen | 5
+
0
-

CZechBoY napsal(a):

btw na tohle by přišlo každý IDEčko, doporučuju se poohledénout po nějakém… já používám phpstorm, někdo zase nedá dopustit na vscode/sublime (s pluginama); případně alespoň pouštět phpstan

Používam VSCode. Vieš mi poradiť, aký plugin dokáže zistiť takéto chyby?

EncryptSL
Člen | 11
+
+1
-

@PadFoot Zkoušel si něco v podobě tohoto pluginu ? PHP Intelephense třeba od Ben Mewburn, na MarketPlace jich je hromada. Některé bohužel obsahují premium prvky čili by sis musel koupit nějakou licensi aby si měl něco extra.

Nevím jak moc se to vyplatí já využívám tu free verzi bez těch dodatků co ten PHP Intelephense obsahuje.
No k těm chybám já se naučil nějak s tím popasovat sice mi to zabere hromadu extra času ale aspoň kontroluji překlepy 2×.

Doufám že jsem odpověděl na tvůj dotaz.

Ps: VSC je k tomu vztahu k PHP trochu mizerné co se týká právě zobrazení onych chyb.

MajklNajt
Člen | 471
+
0
-

@PadFoot licencia k PhpStormu na individuálne použitie stojí prvý rok 89 € (potom sa cena znižuje), čo je podľa mňa zanedbateľná čiastka oproti tomu, čo si za našu prácu účtujeme :)

EDIT: a vlastne máš tam aj „fallback license grant“, čiže ak si aj nepredĺžiš predplatné, stále ti zostáva plnohodnotné IDE, lenže updaty sú prudko návykové, takže nebudeš chcieť sa vracať k fallback verzii

Editoval MajklNajt (16. 6. 2020 7:53)

CZechBoY
Člen | 3608
+
-1
-

Takovou chybu by melo odhalit samotna analyza uvnitr vscodu…

Kcko
Člen | 465
+
0
-

PadFoot napsal(a):

CZechBoY napsal(a):

btw na tohle by přišlo každý IDEčko, doporučuju se poohledénout po nějakém… já používám phpstorm, někdo zase nedá dopustit na vscode/sublime (s pluginama); případně alespoň pouštět phpstan

Používam VSCode. Vieš mi poradiť, aký plugin dokáže zistiť takéto chyby?

https://www.devsense.com/en PHPTOOLS by DevSense

Petr Parolek
Člen | 455
+
-2
-

Zkus ještě Apache NetBeans, který je zdarma, navíc je opensource. Lepší OSS PHP IDE neznám.

EncryptSL
Člen | 11
+
0
-

@CZechBoY Bohužel nedělá to i když by mělo. No třeba uvedu příklad taháš přes konstruktor model a chceš si vytáhnout funkci/metodu v Presenteru no a přepíšeš se napíšeš $this->modelBlabla->createArticle(); Tohle je správně ale když napíšeš $this->modelBlabla->crateAritcle(); I tak ti to ani VSC neoznačí jako chybnou metodu. Tolik k VSC bohužel není to primárně na PHP asi proto tomu nikdo nevěnuje tolik pozornosti v Microsoftu.