Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 18h43   #1
Invité régulier
 
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 8
Points : 8
Par défaut Problème (404 | Not Found | sfError404Exception) après enregistrement validation formulaire

Bonjour,
J'ai créé un formulaire pour créer des annonces.
J'ai cette erreur lors de la validation du formulaire après avoir saisi tous les champs:

404 | Not Found | sfError404Exception
Unable to find the Annonce object with the following parameters "array ( 'sf_format' => 'html',)").


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
at ()
in SF_ROOT_DIR\lib\vendor\symfony\lib\routing\sfObjectRoute.class.php line 111 ...
    // check the related object
 
    if (!($this->object = $this->getObjectForParameters($this->parameters)) && (!isset($this->options['allow_empty']) || !$this->options['allow_empty']))
 
    {
 
      throw new sfError404Exception(sprintf('Unable to find the %s object with the following parameters "%s").', $this->options['model'], str_replace("\n", '', var_export($this->filterParameters($this->parameters), true))));
 
    }
 
 
    return $this->object;
at sfObjectRoute->getObject()
in SF_ROOT_DIR\apps\frontend\modules\ads\actions\actions.class.php line 57
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
public function executeCreate(sfWebRequest $request)
 
  {
 
    $this->forward404Unless($request->isMethod(sfRequest::POST));
 
   $this->annonce = $this->getRoute()->getObject();// ligne 57
 
    $this->annonce->setUtilisateur_id($this->getUser()->getAttribute('id'));
 
    $this->form = new AnnonceForm($this->annonce);
Mon routing.yml

Code :
1
2
3
4
5
6
7
8
9
ads:
  class:   sfDoctrineRouteCollection
  options:  
    model: Annonce
    module:               ads
    prefix_path:          /ads
    column:               id
    with_wildcard_routes: true

Je suis vraiment coincé je ne sais pas pourquoi cette erreur sors maintenant avant je créais une Annonce sans aucun soucis.
J'avais presque rien modifier.


Merci de m'aider si vous avez une petite idée.
fastone650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 18h58   #2
Membre éclairé
 
Inscription : août 2007
Messages : 360
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 360
Points : 334
Points : 334
Bonsoir,

Pourrais tu nous montrer comment tu arrives jusqu'ici (notamment ton formulaire) ?

Apparemment la requête ne contient pas les paramètres nécessaires (id) qui permettrait a la doctrine route de retourner ton objet...

A+

Mathieu
mathieu44800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 19h51   #3
Invité régulier
 
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 8
Points : 8
Oui bien sur, juste un petite info en plus : en fait quand je rajoute une annonce manuellement dans la base (phpmysql) ça ne bogue plus sauf que cette fois l'annonce que j'ai rajouté depuis le formulaire prend la place de l'annonce que j'ai rajouté manuellement. J'ai l'impression que le formulaire cherche le 1er ID et le remplace et maintenant ça bogue peut être parce qu'il n'y a rien dans ma base. Ca me semble un peu bizard.

Donc au départ je lance cette URL : http://www.addad.com.localhost/frontend_dev.php/ads/new

donc :

Code :
1
2
3
4
5
6
 
<?php use_stylesheet('job.css') ?>
 
<h1>New Ad</h1>
 
<?php include_partial('form', array('form' => $form)) ?>
mon AnnonceForm.class.php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
 
class AnnonceForm extends BaseAnnonceForm
{
 
public function saveEmbeddedForms($con = null, $forms = null)
{
  if (null === $forms)
  {
    $photos = $this->getValue('newPhotos');
    $forms = $this->embeddedForms;
    foreach ($this->embeddedForms['newPhotos'] as $name => $form)
    {
      if (!isset($photos[$name]))
      {
        unset($forms['newPhotos'][$name]);
      }
    }
  }
 
  return parent::saveEmbeddedForms($con, $forms);
}
   public function configure()
  {
  //$this->setDefault('Utilisateur_id',$this->getUser()->getAttribute('id'));
   //$this->embedRelation('Photo');
    unset(
       $this['Utilisateur_id'],$this['created_at'], $this['updated_at'],
      $this['expires_at'], $this['is_activated'],$this['isAccomplished']
    );
 
	$form = new PhotoCollectionForm(null, array(
    'annonce' => $this->getObject(),
    'size'    => 2,
  ));
 // $this->embedRelation('Region');
  //$form2 = new RegionForm();
  //$this->embedForm('Region',$form2);
  $this->embedForm('newPhotos', $form);
 
 }
}
donc mon _form :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
<?php use_stylesheets_for_form($form) ?>
 
<?php use_javascript('jquery-1.4.4.min.js') ?> 
<?php use_javascript('/sfJqueryReloadedPlugin/js/jquery-1.3.2.min.js'); ?>
 
 
<?php use_javascripts_for_form($form) ?>
<?php echo form_tag_for($form, '@ads') ?>  
  <table id="job_form">
    <tfoot>
      <tr>
        <td colspan="2">
          <input type="submit" value="Preview your ad" />
        </td>
      </tr>
    </tfoot>
    <tbody>
      <?php echo $form['Categorie_id']->renderRow() ?>
 
      <?php echo $form['Region_id']->renderRow() ?>
	  <?php echo $form['Departement_id']->renderRow() ?> 
 
	  <?php //echo $form['Region']['Name']->renderRow() ?> <?php //bug ?>
 
	  <?php echo $form['CodePostal']->renderRow() ?>
	  <?php echo $form['Ville']->renderRow() ?>
	  <?php echo $form['TypeAnnonce']->renderRow() ?>
	  <?php echo $form['TitreAnnonce']->renderRow() ?>
	  <?php echo $form['TexteAnnonce']->renderRow() ?>
	  <?php echo $form['Prix']->renderRow() ?>
	  <?php echo $form->renderHiddenFields() ?>
	  <?php foreach ($form['newPhotos'] as $photo): ?>
      <?php echo $photo['caption']->renderRow() ?>
      <?php echo $photo['filename']->renderRow() ?>
      <?php endforeach; ?>
 
    </tbody>
  </table>
</form>
Après que je fais Submit pour valider mon formulaire :

Voilà ce qu'il fait :

il execute la fonction executeCreate il bug sur la 2eme ligne

Code :
1
2
3
4
5
6
7
8
9
10
11
public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));
    $this->annonce = $this->getRoute()->getObject(); // Bug
    $this->annonce->setUtilisateur_id($this->getUser()->getAttribute('id'));
    $this->form = new AnnonceForm($this->annonce);
    $this->processForm($request, $this->form);

    $this->setTemplate('new');
  }
Voilà le processus :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Match route "ads_create" (/ads.:sf_format) for /ads.html with parameters array ( 'module' => 'ads', 'action' => 'create', 'sf_format' => 'html',)

Executing filter "sfRenderingFilter"

Executing filter "sfExecutionFilter"

exec : SET NAMES 'UTF8' - ()

query : SELECT a.id AS a__id, a.utilisateur_id AS a__utilisateur_id, a.categorie_id AS a__categorie_id, a.region_id AS a__region_id, a.departement_id AS a__departement_id, a.codepostal AS a__codepostal, a.ville AS a__ville, a.texteannonce AS a__texteannonce, a.titreannonce AS a__titreannonce, a.prix AS a__prix, a.typeannonce AS a__typeannonce, a.isaccomplished AS a__isaccomplished, a.is_activated AS a__is_activated, a.expires_at AS a__expires_at, a.created_at AS a__created_at, a.updated_at AS a__updated_at FROM annonce a - ()

Unable to find the Annonce object with the following parameters "array ( 'sf_format' => 'html',)").

Send status "HTTP/1.1 404 Not Found"
fastone650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 20h15   #4
Invité régulier
 
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 8
Points : 8
C'est bon problème réglé j'ai modifié :


le executeCreate et la focntion processForm :

Code :
1
2
3
4
5
6
7
8
9
10
 
public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));
 
    $this->form = new AnnonceForm();
    $this->processForm($request, $this->form);
 
    $this->setTemplate('new');
  }
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
	  //$this->annonce = $this->getRoute()->getObject();
	  //$this->annonce->setUtilisateur_id($this->getUser()->getAttribute('id'));
	  $form->getObject()->setUtilisateur_id($this->getUser()->getAttribute('id'));
      $annonce = $form->save();
 
      $this->redirect('ads/edit?id='.$annonce->getId());
    }
  }
J'ai fait le setter de l'id utilisateur directement dans la fonction processForm setter le champs du formulaire avant la sauvegarde moi je récuperais l'id de l'annonce avant la fonction processForm donc dans le executeCreate d'ou mon erreur.

Merci.

Espérant trouver prochainement la solution de mon autre poste sur AJAX :S.
fastone650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 09h28   #5
Membre éclairé
 
Inscription : août 2007
Messages : 360
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 360
Points : 334
Points : 334
Salut,

T'as même pas eu besoin de nous pour résoudre ton problème...

Penses au tag [Résolu] !!!

A+

Mathieu
mathieu44800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h12.


 
 
 
 
Partenaires

Hébergement Web