Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] routing i url_for() GET
Forum PHP.pl > Forum > PHP > Frameworki
blackroger
Witam. Problem jest następujący. Czy jest możliwość wysłania formularza GETEM używając url_for() tak żeby routing to łapał?
  1. <form method="get" action="<?php echo url_for('@search'); ?>">
  2. <input type="text" name="keyword" />
  3. <input type="submit" class="button" value="Search" />
  4. </form>
  5.  


Wpis w routingu:
search:
url: /search/:keyword
param: { module: search, action: searchresult }

Błąd:

The "/search/:keyword" route has some missing mandatory parameters (:keyword).

Tak jakby symfony nie widziało...

A drugie pytanie to jak w routingu dać jako parametr takie coś:
url: /search/:search[keyword] (chodzi o nawiasy)
Gribo
przecież masz komunikat że brakuje ci frazy (parametru) w twojej ścieżce
spróbuj tak:
  1. <?php echo url_for('@search?keyword='.jakas zmienna); ?>
destroyerr
Kiedy zrozumiesz jak działa routing, zrozumiesz błąd w swoich założeniach. Jest to do wykonania ale trzeba się nakombinować a i tak nie ma to najmniejszego sensu.
Lepiej normalnie wysłać formularz do jakieś akcji zebrać keyword i zrobić redirect do odpowiedniej akcji.

Co do drugiego problemu to musisz dodać sepatory (plik factories.yml):
Kod
default:
  routing:
    param:
      segment_separators:               [ /, ., "[", "]" ]
blackroger
Aha czyli rozumiem że wysyłam GETEM formularz powiedzmy do akcji check. Tam jest pobierany keyword i przekierowany na akcję search z dobrym już routingiem. Wysyłanie POSTem nie wchodzi w grę bo komunikat przeglądarki przy cofaniu czy odświeżaniu zapytania jest nie do przyjęcia... Mam nadzieję że dobrze rozumuję...
Crozin
W skrócie robisz tak:
1) Wysyłasz metodą POST formularz do akcji (przykładowo) search/index
2) W tej akcji sprawdzasz na samym początku czy aby przypadkiem typ żądania to nie jest POST ($request->isMethod('post'))
3) Jeśli tak to wykonujesz przekierowanie na /search/tutaj_wpisana_fraza ($this->redirect('@search?keyword=' . $request->getParameter('keyword'))
4) Jeżeli nie to obsługujesz cały mechanizm wyszukiwania.

Czyli na dobrą sprawę:
  1. public function executeIndex(sfWebRequest $request) {
  2. if ($request->isMethod('post')) {
  3. $this->redirec....
  4. }
  5.  
  6. // tutaj obsłużenie wyszukiwania
  7. }
Gribo
A ja proponuje wrócić i poczytać dokumentacje związaną z formularzami. Nawet do wersji 1.2 jest polska wersji podajże
blackroger
Dzięki Crozin ale jak wyślę formularz metodą POST gdziekolwiek to w momencie jak użytkownik będzie chciał cofnąć w przeglądarce to wyskoczy mu dalece niewskazany komunikat o przesyłaniu postem....
destroyerr
No to wyślij formularz jako get z dodatkowym parametrem lub do innej akcji.
blackroger
Ok i też tak zrobię...

Destroyer mi odpowiedział na drugie pytanie , ale teraz zobaczyłem że nie o to mi chodziło...Nie chodzi mi o separators ale o nawiasy "[" "]". Chcę żeby one były poprostu interpretowane jako nazwa np (search[costam]) - jako cały parametr....


destroyerr
Podałem rozwiązanie z separatorami, bo o to zapytałeś. Zadaj pytanie precyzyjniej. Co ma być interpretowane jako nazwa i co to oznacza?
blackroger
A drugie pytanie to jak w routingu dać jako parametr takie coś:
url: /search/:search[keyword] (chodzi o nawiasy)

Dokładniej....czy jest możliwość żeby w routingu była interpretowana tablica search? Chodzi o zmienną w takiej postaci: search[keyword]...search[category] itd....bo na obecna chwilę wyrzuca błąd...
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.