2010-11-22 6 views
1

Alles ist im Titel.Prefill das Widget eines Formulars mit URL-Parameter (Symfony)

Ich erhalte die URL param:

$log = $request->getParameter('logement'); 

Widget Aussage:

$this->widgetSchema['logement'] = new sfWidgetFormInputText(); 

Und ich gehe es in der Form meines Widget 'logement' prefill:

$this->form = new bailForm(array('logement' => $log)); 

I habe es in symfonys doc gelesen, aber wenn ich das mache, habe ich diesen Fehler:

The "BailForm" form only accepts a "Bail" object. 

Ich habe schon viele Dinge im Internet versucht, aber niemand funktioniert.

EDIT

Das ORM Lehre ist "Logement" ist ein Attribut von "Bail"

EDIT 2

I versucht:

$log = $request->getParameter('logement'); 

$this->form = new bailForm(null, array('logement' => $log)); 

I habe keinen Fehler, aber mein Widget "logement" ist nicht gefüllt ...

Antwort

3

eine von zwei Möglichkeiten:

1. Wenn Sie Logement zu validieren

$form = new BailForm(); //BailForm must have Logement validator set 
$form->bind(array('logement' => $log) + $otherRequestParameters); 
$form->updateObject(); //or save 

2.Wenn Sie gerade eingestellt Logement wollen auf das Objekt

$bail = new Bail(); 
$bail->Logement = $log; 
$form = new BailForm($bail); 
0

Die Formen, die auf Basis von Modellklassen (in diesem Fall für BailFormBail) automatisch erzeugt werden, sind vom Typ sfFormObject, und somit nur Parameter vom Typ akzeptieren zum Modellklasse entsprechen.

Eine naive Lösung besteht darin, einen benutzerdefinierten Konstruktor für den Typ BailForm zu deklarieren, der ein Array als einzelnen Parameter (oder ein Array und ein Objekt vom Typ Bail) akzeptiert.

Dies ist jedoch nicht sehr gut, da Modellformen nur für Modellklassen geeignet sind. Dieser logement Parameter - was ist seine Bedeutung in Bezug auf die Bail Objekt? Vielleicht, wenn Sie sich diese Frage stellen, können Sie mit einem geeigneteren Entwurf kommen, der wahrscheinlich die logement als ein Attribut von Bail enthält.

1

Ihr Formular ist eine Propel- oder Doktrinform, der erste Parameter des Konstruktors muss eine verknüpfte Objektinstanz sein. Versuchen Sie folgendes:

$this->form = new bailForm(null, array('logement' => $log)); 
0
class QuestionsForm extends BaseForm 
{ 

    private static $email; 


    public static function setEmail($set) { self::$email = $set; } 
    public static function getEmail() { return self::$email; } 

    public function configure() 
    { 

     $this->setDefault('email', self::$email); 
     //$this->setDefault('email', 'testemail'); 

     //rest of the form setup code 
    } 

} 

Hier ist die Aktionen Klasse

class questionsActions extends sfActions 
{ 
    public function executeIndex(sfWebRequest $request) 
    { 

    $this->email = $this->getRequestParameter('email'); 

    QuestionsForm::setEmail($this->email); 
    //die(QuestionsForm::getEmail()); 
    $f = new QuestionsForm(); 

    $this->form = $f; 
Verwandte Themen