Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] routing i url_for() GET
blackroger
post
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Gribo
post
Post #2





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


przecież masz komunikat że brakuje ci frazy (parametru) w twojej ścieżce
spróbuj tak:
  1. <?php echo url_for('@search?keyword='.jakas zmienna); ?>


--------------------
Wyszukiwarka noclegów w Polsce i zagranicą.
Najlepszy katalog turystyczny wspomagający pozycjonowanie i promocje stron.
Go to the top of the page
+Quote Post
destroyerr
post
Post #3





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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:               [ /, ., "[", "]" ]
Go to the top of the page
+Quote Post
blackroger
post
Post #4





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

Ostrzeżenie: (0%)
-----


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ę...
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował Crozin 12.04.2010, 14:03:43
Go to the top of the page
+Quote Post
Gribo
post
Post #6





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


A ja proponuje wrócić i poczytać dokumentacje związaną z formularzami. Nawet do wersji 1.2 jest polska wersji podajże


--------------------
Wyszukiwarka noclegów w Polsce i zagranicą.
Najlepszy katalog turystyczny wspomagający pozycjonowanie i promocje stron.
Go to the top of the page
+Quote Post
blackroger
post
Post #7





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

Ostrzeżenie: (0%)
-----


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....
Go to the top of the page
+Quote Post
destroyerr
post
Post #8





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


No to wyślij formularz jako get z dodatkowym parametrem lub do innej akcji.
Go to the top of the page
+Quote Post
blackroger
post
Post #9





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

Ostrzeżenie: (0%)
-----


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....




Ten post edytował blackroger 14.04.2010, 19:54:24
Go to the top of the page
+Quote Post
destroyerr
post
Post #10





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Podałem rozwiązanie z separatorami, bo o to zapytałeś. Zadaj pytanie precyzyjniej. Co ma być interpretowane jako nazwa i co to oznacza?
Go to the top of the page
+Quote Post
blackroger
post
Post #11





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:19