Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Routing w Symfony
Forum PHP.pl > Forum > PHP > Frameworki
rsobczuk
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ł
mike
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. ?>
rsobczuk
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ł
mike
A spróbuj tak:
  1. <?php
  2. echo link_to('Download', '@download?id=12023&ApplicationName=');
  3. ?>


Znak = na końcu :-)
rsobczuk
Biega.
Możesz więcej o tym opowiedzieć? Co oznacza @ na początku?
mike
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 :-)
rsobczuk
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?
mike
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ć.
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.