Comment transmettre une instance de DoctrineRecord à un simple sfForm
Bonjour,
Voici un nouveau problème. Dans ma petite application, lorsqu'on visualise une fiche d'un formateur (qui est un DoctrineRecord) on a la possibilité de lui envoyer un email.
Pour ce faire je crée un simple formulaire sfForm (je ne crois pas qu'un sfFormDoctrine soit nécessaire ici, puisque l'email n'est pas un DoctrineRecord), auquel j'essaie de transmettre l'instance du formateur, pour disposer de son adresse email et la configurer pour le champ caché 'to'.
Le problème, c'est que j'ai direct une erreur 500 qui m'indique que "_csrf_token" n'est pas une propriété de "Formateur". Or je ne vois pas ce que cela vient faire ici...
Voici les codes :
Code:
1 2 3 4 5
| // actions.class.php
public function executeSendEmail(sfWebRequest $request) {
$formateur = $this->getRoute()->getObject();
$this->form = new EmailForm($formateur);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| // emailForm.class.php
class EmailForm extends sfForm {
public function configure()
{
$this->setWidgets(array(
'body' => new sfWidgetFormTextarea(array('label'=>'Message')),
'subject' => new sfWidgetFormInput(array('label'=>'Objet')),
'to' => new sfWidgetFormInputHidden(),
'from' => new sfWidgetFormInputHidden()
));
$this->setValidators(array(
'body' => new sfValidatorString( array('required' => true)),
'subject' => new sfValidatorString( array('required' => true))
));
}
} |
Code:
1 2 3 4 5 6 7 8
| // sendEmailSuccess.php
<form id="email-form">
<?php echo $form->renderHiddenFields() ?>
<p><?php echo $form['subject']->renderLabel() ?></p>
<p><?php echo $form['subject']->render() ?></p>
<p><?php echo $form['body']->renderLabel() ?></p>
<p><?php echo $form['body']->render() ?></p>
</form> |
Citation:
500 | Internal Server Error | Doctrine_Record_UnknownPropertyException
Unknown record property / related component "_csrf_token" on "Formateur"
stack trace
* at ()
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record/Filter/Standard.php line 44 ...
41. */
42. public function filterSet(Doctrine_Record $record, $name, $value)
43. {
44. throw new Doctrine_Record_UnknownPropertyException(sprintf('Unknown record property / related component "%s" on "%s"', $name, get_class($record)));
45. }
46.
47. /**
* at Doctrine_Record_Filter_Standard->filterSet(object('Formateur'), '_csrf_token', '7547a2440a359370d7a3e2bbcb36a1a6')
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php line 1504 ...
1501. $success = false;
1502. foreach ($this->_table->getFilters() as $filter) {
1503. try {
1504. $value = $filter->filterSet($this, $fieldName, $value);
1505. $success = true;
1506. } catch (Doctrine_Exception $e) {}
1507. }
* at Doctrine_Record->_set('_csrf_token', '7547a2440a359370d7a3e2bbcb36a1a6', 1)
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php line 1456 ...
1453. return $this->$mutator($value, $load, $fieldName);
1454. }
1455. }
1456. return $this->_set($fieldName, $value, $load);
1457. }
1458.
1459. protected function _set($fieldName, $value, $load = true)
* at Doctrine_Record->set('_csrf_token', '7547a2440a359370d7a3e2bbcb36a1a6')
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Access.php line 133 ...
130. if ( ! isset($offset)) {
131. $this->add($value);
132. } else {
133. $this->set($offset, $value);
134. }
135. }
136.
* at Doctrine_Access->offsetSet('_csrf_token', '7547a2440a359370d7a3e2bbcb36a1a6')
in SF_ROOT_DIR/lib/vendor/symfony/lib/form/sfForm.class.php line 784 ...
781. */
782. public function setDefault($name, $default)
783. {
784. $this->defaults[$name] = $default;
785.
786. $this->resetFormFields();
787.
* at sfForm->setDefault('_csrf_token', '7547a2440a359370d7a3e2bbcb36a1a6')
in SF_ROOT_DIR/lib/vendor/symfony/lib/form/sfForm.class.php line 881 ...
878.
879. $this->validatorSchema[self::$CSRFFieldName] = new sfValidatorCSRFToken(array('token' => $token));
880. $this->widgetSchema[self::$CSRFFieldName] = new sfWidgetFormInputHidden();
881. $this->setDefault(self::$CSRFFieldName, $token);
882.
883. return $this;
884. }
* at sfForm->addCSRFProtection(null)
in SF_ROOT_DIR/lib/vendor/symfony/lib/form/sfForm.class.php line 72 ...
69. $this->setup();
70. $this->configure();
71.
72. $this->addCSRFProtection($this->localCSRFSecret);
73. $this->resetFormFields();
74. }
75.
* at sfForm->__construct(object('Formateur'))
in SF_ROOT_DIR/apps/frontend/modules/formateur/actions/actions.class.php line 85 ...
82.
83. public function executeSendEmail(sfWebRequest $request) {
84. $formateur = $this->getRoute()->getObject();
85. $this->form = new EmailForm($formateur);
86. $this->form->addCSRFProtection('7547a2440a359370d7a3e2bbcb36a1a6');
87. }
88.
* at formateurActions->executeSendEmail(object('sfWebRequest'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/action/sfActions.class.php line 60 ...
Encore une fois merci d'avance pour votre aide !