Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2] Problem z routingiem
Forum PHP.pl > Forum > PHP > Frameworki
pav
Witam,jestem początkujący w Symfony2, a wyskoczył mi problem, którego naprawdę nie wiem jak rozwiązać.

Podczas przekazywania parametrów wyskakuje mi błąd:

Cytat
Some mandatory parameters are missing ("idzwierzatka") to generate a URL for route "Admin_zwierze_edycja".



To link do przechodzenia do formularza edycja:

Cytat
<a href="<?php echo $view['router']->generate('Admin_zwierze_edycja', array('idzwierzatka' => $zwierzatka->getIdzwierzatka())); ?>">



tablica routingu:

Cytat
Admin_zwierze_edycja:
pattern: /admin/zwierze/edycja/{idzwierzatka}
defaults: { _controller: MultimediaAccountBundle:Admin:zwierzeEdycja}
requirements:
idzwierzatka: \d+



A to z controlera ( AdminController):

Cytat
public function zwierzeEdycjaAction(Request $request )
{
$idzwierzatka = $request->get('idzwierzatka' , '0');
$em=$this->getDoctrine()->getManager();

$zwierze = $em->getRepository('MultimediaAccountBundle:Zwierze')->find($idzwierzatka);

if (!$zwierze){
return $this->createForm(new ZwierzeType(), $zwierze);
}
$form = $this->createForm(new ZwierzeType(), $zwierze);
$em->flush();
return $this->render('MultimediaAccountBundle:Zwierze:edycja.html.php', array('form'=> $form->createView() , 'idzwierzatka'=>$idzwierzatka));

}



Zrzut z Entity Zwierze

Entity zwierze






Bardzo bym prosił o pomoc.

Dziękuje i pozdrawiam
kropka89
przy każdym użyciu routera dajesz parametry (przekierowania, linki) ?
pav
@Kropka89

Tak, wyświetlę jeszcze jeden wpis:

Cytat
Admin_zwierze_nowy:
pattern: /admin/zwierze/nowy
defaults: { _controller: MultimediaAccountBundle:Admin:zwierzeNew }

Admin_zwierze_edycja:
pattern: /admin/zwierze/edycja/{idzwierzatka}
defaults: { _controller: MultimediaAccountBundle:Admin:zwierzeEdycja}
requirements:
idzwierzatka: \d+



@masteron
Po pojawieniu się listy zwierząt (zrobionej foreach, tabela), w każdym wpisie występują przyciski edytuj i usuń.

edytuj
Cytat
<a href="<?php echo $view['router']->generate('Admin_zwierze_edycja', array('idzwierzatka' => $zwierzatka->getIdzwierzatka())); ?>">


usuń:
Cytat
<a href="<?php echo $view['router']->generate('Admin_zwierze_usun', array('idzwierzatka' => $zwierzatka->getIdzwierzatka())); ?>">Usuń</a>



Problem w tym, że
Cytat
$zwierzatka->getIdzwierzatka()

wyświetla poprawne id dla każdego wpisu. Przekazywanie danych w URL też jest poprawne ( z rozpaczy podam link):

Cytat


Nawet rzutowanie do INT nie pomaga. Ciągle jest to samo.
Crozin
Skoro rzuca Ci wyjątek, to będzie do niego dołączony backtrace, a w nim, na którymś tam miejscu będzie nazwa pliku szablonu i numer linii, które skutkują wyrzuceniem wyjątku - tam masz błąd.
pav
Pokazujące błędy:
1. Błąd:

Cytat
in C:\wamp\www\projekt\app\cache\dev\classes.php at line 1236

a 1236:

1235: if ($diff = array_diff_key($variables, $mergedParams)) {
1236: throw new MissingMandatoryParametersException(sprintf('Some mandatory parameters are missing ("%s") to generate a URL for route "%s".', implode('", "',
1237: array_keys($diff)), $name));
1238: }



2.
Cytat
at UrlGenerator ->doGenerate (array('idzwierzatka'), array('_controller' => 'Multimedia\AccountBundle\Controller\AdminController::zwierzeEdycjaAction'), array('idzwierzatka' => '\d+'), array(array('variable', '/', '\d+', 'idzwierzatka'), array('text', '/account/admin/zwierze/edycja')), array(), 'Admin_zwierze_edycja', false, array())
in C:\wamp\www\projekt\app\cache\dev\appdevUrlGenerator.php at line 73



a ten błąd w rozwinięciu:
Cytat
71: list($variables, $defaults, $requirements, $tokens, $hostTokens) = self::$declaredRoutes[$name];
73: return $this->doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens);
74: }
75: }



Następny:


Cytat
at RouterHelper ->generate ('Admin_zwierze_edycja')
in C:\wamp\www\projekt\src\Multimedia\AccountBundle\Resources\views\Zwierze\edycja.html.php at line 8


który wygląda tak:
Cytat
<form action="<?php echo $view['router']->generate('Admin_zwierze_edycja') ?>" method="post" <?php echo $view['form']->enctype($form) ?> >


i wg. Netbean'sa błąd jest:
Cytat
Bad value " " for atribut action on element "form": DOUBLE_WHITESPACE in PATH
Crozin
  1. <?php echo $view['router']->generate('Admin_zwierze_edycja') ?>
No przecież wyraźnie brakuje tutaj wymaganego parametru idzwierzatka.
Cytat
i wg. Netbean'sa błąd jest:
Kod
Bad value " " for atribut action on element "form": DOUBLE_WHITESPACE in PATH
Ten błąd możesz zignorować. NetBeans nie wziął pod uwagę faktu, że ten plik zawiera wstawki PHP-owskie i traktuje go jak zwykły dokument HTML.
pav
@Crozin


Teraz zmieniłem zapytanie w
Cytat
//MultimediaAccountBundle:Uzytkownicy:edycja.html.php


na

Cytat
<form action="{{ path('Admin_uzytkownicy_edycja') }}" method="POST" {{ form_enctype(form) }}>


Błąd oczywiście zniknął. W AdminControllerze nic nie zmieniałem, a teraz po zatwierdzeniu wprowadzonych zmian wyskakuje nie poprawny link:


Cytat


Rozumiem, że przeszkadza mu {{{ path('Admin_uzytkownicy_edycja') }} tylko co ja mam tam wpisać, zeby dzialalo ? Setki prob i ciagle to samo.
Chyba ze w admin controllerze mam cos zmienic.


To są dopiero początki, dlatego proszę o pomoc.
destroyerr
Nie możesz w pliku php korzystać z Twiga, albo jedno albo drugie.
pav
@destroyerr

To jeśli dobrze rozumiem, mam wysłać mu wraz z parametrem, czyli jeśli wpisze:

Cytat
<form action="<?php echo $view['router']->generate('Admin_uzytkownicy_edycja', array('iduzytkownika'=>$entity->getIduzytkownika())); ?>" method="post" <?php echo $view['form']->enctype($form) ?>>




i w AdminController zmieniłem na:

Cytat
public function uzytkownicyEdycjaAction($iduzytkownika)
{

$em = $this->getDoctrine()->getEntityManager();

$entity = $em->getRepository('MultimediaAccountBundle:Uzytkownicy')->find($iduzytkownika);

if (!$entity) {
throw $this->createNotFoundException('Nie znaleziono danego ENTITY');
}

$form = $this->createForm(new UzytkownicyType(), $entity);
$em->flush();

return $this->render('MultimediaAccountBundle:Uzytkownicy:edycja.html.php' , array('form' => $form->createView() , 'iduzytkownika'=>$iduzytkownika));

}



Strona w ogóle nie chce się załadować...
destroyerr
No to jeszcze przydałoby się wiedzieć co znaczy, że nie chce się załadować. Nie wiemy też czy na pewno korzystasz ze środowiska deweloperskiego.
W ciemno mogę tylko doradzić, abyś przejrzał logi Symfony i php/serwera.

  1. $em->flush();

Nie potrzebujesz flushować skoro niczego nie zmieniałeś.
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.