Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] sfFormDoctrine i relacje miedzy tabelami
Forum PHP.pl > Forum > PHP > Frameworki
johny_s
Witam

Ostatnio cos mnie skusiło aby zerknąć na symfoni i postanowiłem sobie wyskrobać jakiś projekci w ramach zapoznania się z tym frameworkie, ale oczywiście żeby nie było za łatwo zawsze sie trafi na jakieś problemy smile.gif Wiem pewnie rozwiązanie będzie jakieś banalne ale jakoś nie potrafie na nie wpaść :/ A może kombinuje w złym kierunku...

Wycinek mojego projektu:

baza:
  1. PetsUser:
  2.  columns:
  3.    username:
  4.      type: string(20)
  5.      notnull: true
  6.      unique: true
  7.    password:
  8.      type: string(32)
  9.      notnull: true
  10.    email:
  11.      type: string(255)
  12.      notnull: true
  13.      unique: true
  14. ...
  15.  
  16. PetsQuestion:
  17.  columns:
  18.    user_id:
  19.      type: integer
  20.      notnull: true
  21.    title:
  22.      type: string(255)
  23.    body:
  24.      type: clob
  25.      notnull: true
  26.  relations:
  27.    PetsUser:
  28.      onDelete: CASCADE
  29.      local: user_id
  30.      foreign: id
  31. ...


Formularze ładnie się generuja, wszystko pięknie dziła na wersji wygenerowanej przez symfony. Schody zaczynają się w momencie kiedy próbuje przgrzebać troszke formularz do dodawania pytan..

Schemat jest następujący:
Aby dodać pytanie trzeba być zalogowanym, wszystko ładnie pięknie ale postanowiłem wyciąć z formularza do zadawania pytan usera, czyli:
  1. <?php
  2. class PetsQuestionForm extends BasePetsQuestionForm
  3. {
  4. public function configure()
  5. {
  6.   unset( $this['user_id'] );
  7.   ....
  8. }
  9. }
  10. ?>


poźniej przejscie przez odpowidnie akcje, validacja i zapis

teraz aby przypisac uzytkownika do danego pytania
nadpisuje funkcje save:

  1. <?php
  2. class PetsQuestion extends BasePetsQuestion
  3. {
  4.    public function save( Doctrine_Connection $conn = null ) {
  5.        $userId = sfContext::getInstance()->getUser()->getId();
  6.                $this->setUserId( $userId );
  7.        return parent::save( $conn );
  8.    }
  9. }
  10. ?>


no i wszystko pięknie zapisuje się jak powinno, ale tu moje pierwsze pytanie:
Czy to jest odpowiednie miejsce na to czy powinienem wykonać to w jakiś inny sposób?

Nie przeszkadzało by mi w sumie to w niczym poza jednym - przy przebudowie projektu i probie załadowania danych z fixtures: ./symfony doctrine:build-all-reload pojawia się błąd: The "default" context does not exist. spowodowany proba odwolania sie do sesji. Wiec pytanie drugie:
Jak to obejść? W ktorym miejscu odwolac sie do uzytkownika aby nie musiec umieszczac ukrtego pola w formularzu.

Za wszelka pomoc jak i sugestie bede wdzieczny

pozdrawiam
Johny
Rafal Filipek
Nie jestem ekspertem od symfony ale z tego co ogólnie wiem to zasada jest taka "modele są ku**a od danych". Dlatego też umiszczanie w nich odwołań do takich klas jak sfContext o której możemy przeycztać
Cytat
sfContext provides information about the current application context
nie jest dobrym pomyslem bo model nie interesuje sie w jakim kontekscie zapisuje dane. Zapisz uzytkownika ( tzn. dopisz go do pytania ) w kontrolerze przed zapisaniem danych.
galileox86
Zobrazuje
  1. <?php
  2. ...
  3.  
  4. public function executeJakasAkcja(sfWebRequest $request)
  5. {
  6.    $pq = new PetsQuestion();
  7.    $pq -> setUserId($this -> getUser() -> getId());
  8.    $pq -> save();
  9.  
  10.  
  11.  
  12.    a jesli chodzi o formularz no to po zbindowaniu danych mozesz sobie uzyc
  13.  
  14.    $form -> getObject() -> setUserId($this -> getUser()->getId());
  15.  
  16. }
  17. ...
  18. ?>
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.