Nefunkční úprava článků – repository
- kiCkZ
- Člen | 153
Zdravim,
nevíte někdo z jakého důvodu se mi místo úpravy článek vytvoří nový ?
Repository.php
abstract class Repository extends Object {
/** @var Database */
protected $database;
/** @var string */
protected $table;
public function __construct(Context $database) {
$this->database = $database;
}
public function findAll() {
return $this->database->table($this->table);
}
public function findBy($where) {
return $this->findAll()->where($where);
}
public function update($where,$data){
return $this->findBy($where)->update($data);
}
}
ArticleRepository.php
public function updateArticle($id,$title,$url,$content) {
$this->update($id,[
self::COLUMN_TITLE => $title,
self::COLUMN_URL => Strings::webalize($url),
self::COLUMN_CONTENT => $content
]);
}
ArticlePresenter.php
public function actionEdit($id) {
$this->id = $id;
$article = $this->articleRepository->getArticle($id);
if(!$article){
$this->error('Článek nebyl nalezen');
}
$this['articleForm']->setDefaults($article->toArray());
}
ArticleFormFactory.php
public function create($id,callable $onSuccess) {
$form = $this->factory->create();
$form->addText('title','Název článku')
->setRequired();
$form->addText('url','URL adresa');
$form->addTextArea('content','');
$form->addSubmit('save','Uložit');
$form->onSuccess[] = function (Form $form,$values) use ($id,$onSuccess) {
try{
if($id) {
$article = $this->articleRepository->updateArticle($id,$values->title,$values->url,$values->content);
} else {
$this->articleRepository->createArticle($values->title,$values->url,$values->content);
}
} catch (Exception $e) {
$form->addError('Nepodařilo se vytvořit článek');
return;
}
$onSuccess();
};
return $form;
}
Děkuji
- David Matějka
- Moderator | 6445
divny, chybu tam nevidim. po odeslani formulare dojde k presmerovani na
jakou stranku? (nemyslim ten redirect po ulozeni, ale hned po odeslani
formulare). existuje $id
? zkus si to oddebugovat, nejsnaze
treba dump($id);exit;
- kiCkZ
- Člen | 153
David Matějka napsal(a):
divny, chybu tam nevidim. po odeslani formulare dojde k presmerovani na jakou stranku? (nemyslim ten redirect po ulozeni, ale hned po odeslani formulare). existuje
$id
? zkus si to oddebugovat, nejsnaze trebadump($id);exit;
Zkusim ten debug ještě, ale problém je takový, že jakmile dám edit dostanu se na stránku se článkem veškeré vyplněné věci jsou dobře ke konkrétnímu článku, ale po uložení se mi přepíšou všechny články na hodnoty, které jsem přitom nastavil k jednomu konkrétnímu článku podle ID.
- David Matějka
- Moderator | 6445
jo uz to vidim, ty tam posilas do where jen to id, tedy provadis neco jako
->where(1)->update(...)
takze uprav tu podminku na ['id' => $id]
- kiCkZ
- Člen | 153
David Matějka napsal(a):
jo uz to vidim, ty tam posilas do where jen to id, tedy provadis neco jako
->where(1)->update(...)
takze uprav tu podminku na
['id' => $id]
Takže v té funkci stačí u update udělat tohle tedy.
public function update($id,$data){
return $this->findBy(['id' => $id])->update($data);
}
Díky moc kluci
Editoval kiCkZ (25. 10. 2017 20:15)