Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] formularz
Forum PHP.pl > Forum > PHP > Frameworki
kicaj
Opisujac relacje w temacie: Temat: CakePHP_relacje
Jak w np. w Article/view/43 lub Users/view/3 dodac komentarz, oraz czy w takim przypadku dobre bedzie zastosowanie formularza do komentowania w views/elements?
Rafal Filipek
nie rozumiem do konca co masz na mysli mowiac "jak dodac" . generalnie robisz tak:
w kontrolerze w akcji
Kod
$this->data = $this->Comment->create(array('model'=>'Article', 'model_id'=>$id));

to ci doda do this data nowy komentarz.
a w widoku
Kod
<?php
    echo $form->create("Comment",array('url'=>'akacja/gdzie/zapisujesz'));
    echo $form->input("Comment.model", array('type'=>'hidden')); ?>
    echo $form->input("Comment.moel_id, array('type'=>'hidden')); ?>
    // pozostale standardowe pola formularza
?>

tutaj w tym formularz jedyne co musisz zmienic to url bo standardowo cake wrzuci ci tam akcje ala REST wiec comments/add ( bo w kontrolerze nie ustawilismy id dla komentarza ).
co do pytania o elements ... imho tak . formularz masz taki sam dla Article i User do tego mozesz korzystac z niego podczas edycji itp. wiec min 3 miejsca ... ja robie to tak ze w elements mam katalogi tak jak w widoku wiec np. robie sobie elements/comments/form.ctp ( ale to juz kwestia indywidualna ).
kicaj
Zrobilem cos takiego: http://bin.cakephp.org/view/1722481208
W innych relacjach 'foreign_key' jest automatycznie dodawany, a w tej wyskakuje blad ze 'foreing_key' nie ma domyslnej wartosc?

Czy musze w tym przypadku dodawac 'foreign_key' recznie?
Rafal Filipek
1)
Kod
$this->Event->Comment->create();
na
$this->Comment->create($this->data); // tworzysz komentarz z danymi z post'a

2)
Kod
if($this->Event->Comment->saveAll($this->data)) {
na
if($this->Comment->save($this->data)) { // wystarczy save

3)nie potrzebujesz redirect po zapisaniu komentarza ( chyba ze chodzi ci o unikniecie efektu f5 ).
jak widzisz pokasowalem zapis relacji Event->Comment. Osobiscie tego nie stosuje bo jak zapisuje komentarz to nie widze potrzeby zeby robic to jeszcze przez model Event. Ja bym najzwyczajniej w formularzu dodal pole
Kod
$form->input('Comment.model_id', array('type'=>hidden'));

i juz
a co do tego automatycznego wypelniania to faktycznie z faktu iz jest to nazwa niestandardowa ( model_id ) moze go automatycznie nie wypelniac ( ale to nie na sto procent ).
kicaj
ad 1 i 2: Undefined property: EventsController::$Comment
ad 3: Nie jest to chyba rozwiazanie zadawalajace, po to ustawilem w modelu Event:
  1. <?php
  2. var $hasMany = array(
  3.        'Comment' => array(
  4.            'className' => 'Comment',
  5.            'foreignKey' => 'foreign_key', // Twoje 'model_id', 'foreign_id' z artykulu ponizej, itd.
  6.            'conditions' => array(
  7.                'Comment.model' => 'Event')));
  8. }
  9. ?>


Posilkowalem sie artykulem: http://mrphp.com.au/code/code-category/cak...y-model-cakephp
ale tutaj takze ustawione jest 'foreignKey' w $hasMany, a klucz dodawany jest "recznie.

Dlaczego nie dziala to automatycznie?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.