Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Routing w Symfony
rsobczuk
post
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Witam,
buduję stronkę w Symfony.
Napotkałem problem z routingiem.
Jak powinienem skonfigurować wpis w routing.yml?

1) plik routing.yml posiada taką konfigurację dopisaną przeze mnie:
download:
url: /download/:id/*
param: { module: download, action: application}

2) plik, gdzie jest wygenerowany link w ten sposób:
<? echo link_to('Download', 'download/12023/ApplicationName');?>


Po najechaniu myszką na link jednak generuje mi się coś takiego:
http://<adres>/download/12023
a chciał bym coś takiego
http://<adres>/download/12023/ApplicationName

Download to wygenerowany moduł. W akcji executeApplication() potrzebuję pobrać ID aplikacji (w tym przypadku: 12023 dostępne jest pod zmienną z GET o nazwie `id`) - i z tym nie ma problemu. Chciał bym jednak, żeby generowała się w linku nazwa aplikacji. Nie jest konieczne, żeby była dostępna przez metodę GET, bo na podstawie ID mogę pobrać ją sobie w bazie. Zależy mi tylko, żeby wyświetliła się w URL.

Dzięki
Rafał
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Hmm, a spróbuj tak:
Wpis w pliku konfiguracyjnym:
Kod
download:
  url: /download/:id/*
  param: { module: download, action: application}

I użycie:
  1. <?php
  2. echo link_to('Download', '@download?id=12023&ApplicationName');
  3. ?>
Go to the top of the page
+Quote Post
rsobczuk
post
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Wygenerowało się coś takiego:
http://<address>/download/12023%26ApplicationName i w `get` otrzymałem `12023&ApplicationName`;

Jak zmieniłem na:
  1. <?php
  2. echo link_to('Download', '@download?id=12023/ApplicationName');
  3. ?>

to wygenerowało się dobrze - tak jak chciałem, ale stronka się nie otworzyła. Adres na jaki przekierowało to:
http://<address>/download/12023%2FApplicationName

Pozdro
Rafał
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A spróbuj tak:
  1. <?php
  2. echo link_to('Download', '@download?id=12023&ApplicationName=');
  3. ?>


Znak = na końcu :-)
Go to the top of the page
+Quote Post
rsobczuk
post
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Biega.
Możesz więcej o tym opowiedzieć? Co oznacza @ na początku?
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(rsobczuk @ 20.06.2008, 16:54:03 ) *
Możesz więcej o tym opowiedzieć? Co oznacza @ na początku?
Małpa to odniesienie do nazwy konkretnego routingu.
Na przykład jeśli miałbyś linka http://<adres>/login
To routing mógłby wyglądać tak:
Kod
login:
  url: /login
  param: {module: auth, action: login}

Więc zamiast pisać:
  1. <?php
  2. echo link_to('Logowanie', 'auth/login');
  3. ?>

piszesz:
  1. <?php
  2. echo link_to('Logowanie', '@login');
  3. ?>

Jaką masz przewagę?

Załóżmy teraz że chciałbyś przenieść logowanie do innego modułu lub akcje czy umieścić je pod innym adresem:
Kod
login:
  url: /ukryty_adres
  param: {module: jakiśInnyModuł, action: jakaśInnaAkcja}


I tyle. Wystarczy zmiana w konfiguracji. Przy stosowaniu kombinacji moduł/akcja w parametrze funkcji link_to musiałbyś w całej aplikacji zamieniać na:
  1. <?php
  2. echo link_to('Logowanie', 'jakiśInnyModuł/jakaśInnaAkcja');
  3. ?>
a tak nadal zostaje:
  1. <?php
  2. echo link_to('Logowanie', '@login');
  3. ?>
symfony samo za Ciebie załatwi sprawę.

A sztuczka z = to ... taka sztuczka :-)

Ten post edytował mike 20.06.2008, 19:11:42
Go to the top of the page
+Quote Post
rsobczuk
post
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Rozumiem, że teoretycznie po znaku = powinna być przypisana jakaś wartość parametru, więc ApplicationName to poprostu nazwa zmiennej, do której nic nie jest przypisane?
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(rsobczuk @ 20.06.2008, 17:25:58 ) *
Rozumiem, że teoretycznie po znaku = powinna być przypisana jakaś wartość parametru, więc ApplicationName to poprostu nazwa zmiennej, do której nic nie jest przypisane?
Dokładnie. A skoro Ci to nie potrzebne to można było tak zasymulować.
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: 20.08.2025 - 06:17