Při přidání nového komentáře duplikujeme se mi řádek
- jAkErCZ
- Člen | 322
Zdravím,
mám takový problém a to je ten že jsem si vytvořil systém komentářů ale
jakmile přidám komentář tak se mi do db přidají 2 stejné řádky.
A nechápu kde dělám chybu..
{if ($user->isLoggedIn())}
<div class="comment-form">
<h4 class="page-header">{_article.comments_add}</h4>
{snippet addComment}
<form n:name="commentForm" class="ajax" id="add-coment">
<div class="form-group">
<textarea n:name="content" class="form-control" rows="6"></textarea>
</div>
<input type="submit" id="addCommentForm" n:name="send" class="btn btn-primary btn-rounded btn-shadow pull-right ajax" value="Vložit komentář">
</form>
{/snippet}
</div>
{else}
<br />
<p>{_article.forAddingCommentLogIn}</p>
{/if}
Presenter:
protected function createComponentCommentForm()
{
$form = new Form;
$form->addHidden('comment_id');
$form->addHidden('user_id');
$form->addHidden('article_id');
$form->addHidden('parent_id');
$form->addTextArea('content', '')
->setAttribute('placeholder','Vložte text komentáře...')
->setRequired('Zpráva je povinná!');
$form->addSubmit('send', '');
$form->onSuccess[] = [$this, 'commentFormSucceeded'];
return $form;
}
public function commentFormSucceeded(Form $form, ArrayHash $values)
{
if ($this->isAjax()) {
$this->articleManager->saveCommentWithArticle($values);
$this->flashMessage('Komentář byl vložen.', BasePresenter::MSG_SUCCESS);
$this->redrawControl('comments');
} else {
$this->flashMessage('Nastala chyba, opakujte akci později!', BasePresenter::MSG_ERROR);
}
$this->redrawControl('flashMessages');
}
Model:
public function saveCommentWithArticle($values){
if (!$values[self::COLUMN_COM_ID]){
$test = $this->database->table(self::TABLE_COMMENTS)->insert([
'user_id' => $values->user_id,
'article_id' => $values->article_id,
'parent_id' => $values->parent_id ? $values->parent_id : NULL,
'content' => $values->content
]);
bdump($test);
}else{
$this->database->table(self::TABLE_COMMENTS)->where(self::COLUMN_COM_ARTICLE_ID, $values->article_id)->where(self::COLUMN_COM_ID)->update($values);
}
}
Výsledek:
NÁHLED
Kde tedy dělám chybu?
Editoval jAkErCZ (14. 1. 2019 16:28)
- David Matějka
- Moderator | 6445
Neprovedou se ti dva ajax requesty? koukni do developer konzole v prohlížeči v záložce network.
případně se ujisti, že $form->onSuccess[]
callback
nezapojuješ dvakrát
- jAkErCZ
- Člen | 322
David Matějka napsal(a):
Neprovedou se ti dva ajax requesty? koukni do developer konzole v prohlížeči v záložce network.
případně se ujisti, že
$form->onSuccess[]
callback nezapojuješ dvakrát
Tak sem si vrátil $form a taky to co jde do db
Výsledky
Nette\Application\UI\Form #f13e
onAnchor => null
onSuccess => array (1)
0 => array (2)
0 => App\FrontModule\Presenters\ArticlePresenter #2244 { ... }
1 => "commentFormSucceeded" (20)
onError => null
onSubmit => null
onRender => null
httpRequest => null
submittedBy private => Nette\Forms\Controls\SubmitButton #33b3
httpData private => array (7)
element private => Nette\Utils\Html #cc83
attrs => array (3)
action => Nette\Application\UI\Link #7515 { ... }
method => "post" (4)
id => "frm-commentForm" (15)
children protected => array ()
name private => "form" (4)
isEmpty private => false
renderer private => null
translator private => null
groups private => array ()
errors private => array ()
beforeRenderCalled private => null
onValidate => null
currentGroup protected => null
validated private => true
components private => array (6)
comment_id => Nette\Forms\Controls\HiddenField #9fde
user_id => Nette\Forms\Controls\HiddenField #bd12
article_id => Nette\Forms\Controls\HiddenField #3014
parent_id => Nette\Forms\Controls\HiddenField #8cc0
content => Nette\Forms\Controls\TextArea #c6c1
send => Nette\Forms\Controls\SubmitButton #33b3
cloning private => null
parent private => App\FrontModule\Presenters\ArticlePresenter #2244
name private => "commentForm" (11)
monitors private => array (2)
"Nette\Application\UI\Presenter" => array (4)
0 => App\FrontModule\Presenters\ArticlePresenter #2244 { ... }
1 => 1
2 => "commentForm" (11)
3 => array (1) [ ... ]
"Nette\Forms\Form" => array (4)
0 => null
1 => null
2 => null
3 => array (1) [ ... ]
DB:
Nette\Database\Table\ActiveRow #0666
table private => Nette\Database\Table\Selection #00ee
data private => array (7)
comment_id => 3
user_id => 1
article_id => 4
parent_id => null
content => "test" (4)
created_at => Nette\Utils\DateTime #710c
date => "2019-01-14 16:29:51.000000" (26)
timezone_type => 3
timezone => "Europe/Prague" (13)
hidden => 0
dataRefreshed private => false
A dev vrací jen 1 request :D
- Phalanx
- Člen | 310
@jAkErCZ Nainstaluj si XDebug a zjistíš to hned
návod např. https://knut.brloh.eu/…ro-phpstorm/
- jAkErCZ
- Člen | 322
Phalanx napsal(a):
@jAkErCZ Nainstaluj si XDebug a zjistíš to hned
návod např. https://knut.brloh.eu/…ro-phpstorm/
Jenže ten mám ale nic tam nevidím jinak…
- Phalanx
- Člen | 310
Dej si break point na řádek:
<?php
$test = $this->database->table(self::TABLE_COMMENTS)->insert([
?>
a předtím zkontroluj databázi, jestli se tam už něco nevložilo. Pak
dávej F8 a kontroluj databázi, kdy se přidá další řádek. Pak zjistíš,
že se třeba vyvolává nějaká událost dvakrát nebo se třeba uloží
podruhé z tohoto příkazu bdump($test);
Editoval Phalanx (14. 1. 2019 18:12)
- jAkErCZ
- Člen | 322
Phalanx napsal(a):
Dej si break point na řádek:
<?php $test = $this->database->table(self::TABLE_COMMENTS)->insert([ ?>
a předtím zkontroluj databázi, jestli se tam už něco nevložilo. Pak dávej F8 a kontroluj databázi, kdy se přidá další řádek. Pak zjistíš, že se třeba vyvolává nějaká událost dvakrát nebo se třeba uloží podruhé z tohoto příkazu
bdump($test);
Je to divný ale když to projedu xDebugem a pak ukončím debug tak v db mám jen 1 řádek a mimo debug mi to zase dá 2…