Ruting i Symfony2

stemmer
25

Hvordan sette opp standard ruting i Symfony2?

I Symfony1 så det slik ut:

homepage:
  url:   /
  param: { module: default, action: index }

default_symfony:
  url:   /symfony/:action/...
  param: { module: default }

default_index:
  url:   /:module
  param: { action: index }

default:
  url:   /:module/:action/...
Publisert på 09/02/2011 klokken 13:41
kilden bruker
På andre språk...                            


10 svar

stemmer
28

Jeg var ser gjennom kokebok for et svar på dette, og tror jeg har funnet det her . Som standard, alle ruteparametrene har en skjult krav om at de samsvarer med alle tegn unntatt tegnet / ([^ /] +), men dette problemet kan overstyres med krav søkeord, ved å tvinge den til å matche ethvert tegn.

Følgende bør opprette en standardrute som fanger alle andre - og som sådan, bør komme sist i din routing config, som alle følgende ruter vil aldri matche. For å sikre at det matcher "/" også, en standardverdi for url parameter er inkludert.

default_route:
    pattern: /{url}
    defaults: { _controller: AcmeBundle:Default:index, url: "index" }
    requirements:
        url: ".+"
Svarte 25/10/2011 kl. 15:50
kilden bruker

stemmer
8

// Symfony2 PR10

i routing.yml:

default:
    pattern:  /{_controller}

Det gjør det mulig å bruke denne typen nettadresser: http: // localhost / MySuperBundle: MyController: MyView

Svarte 09/04/2011 kl. 16:10
kilden bruker

stemmer
8

Jeg tror ikke det er mulig med standard ruting komponent. Ta en titt på denne grupperingen, kan det hjelpe: https://github.com/hidenorigoto/DefaultRouteBundle

Svarte 25/02/2011 kl. 10:47
kilden bruker

stemmer
4

Symfony2 standard ruting komponent ikke støtter den, men dette bunten fyller gapet Symfony1 venstre:

https://github.com/LeaseWeb/LswDefaultRoutingBundle

Det gjør det du forventer. Du kan standardrute en bunt bruke denne syntaksen:

FosUserBundle:
  resource: "@FosUserBundle"
  prefix:   /
  type:     default

Den skanner bunt og automatisk legger ruter til ruteren tabell som du kan feilsøke ved å kjøre:

app/console router:debug

Eksempel på automatisk lagt til standard ruter:

[router] Current routes
Name                          Method Pattern
fos_user.user.login_check     ANY    /user/login_check.{_format}
fos_user.user.logout          ANY    /user/logout.{_format}
fos_user.user.login           ANY    /user/login.{_format}
...

Du ser at den støtter også den automatiske "format" valget ved å bruke en filtype (html, json eller xml).

Svarte 27/01/2013 kl. 23:34
kilden bruker

stemmer
3

Her er et eksempel: http://docs.symfony-reloaded.org/master/quick_tour/the_big_picture.html#routing

En rute definisjon har bare ett obligatoriske parametere patternog tre optionals parametere defaults, requirementsog options.

Her er en rute fra mitt eget prosjekt:

video:
    pattern:  /watch/{id}/{slug}
    defaults: { _controller: SiteBundle:Video:watch }
    requirements: { id: "\d+", slug: "[\w-]+" 
Svarte 09/02/2011 kl. 13:57
kilden bruker

stemmer
2

Lag en standardrute er ikke en god måte å programmering. Hvorfor? Fordi denne grunn ble gjennomført unntak. Symfony2 er bygget bare for å gjøre riktige tingene på riktig måte.

Hvis du ønsker å omdirigere alle "ikke finnes" ruter bør du bruke unntak, som NotFound404 eller noe lignende. Du kan selv tilpasse denne siden på egen hånd.

En rute er for ett formål. Alltid. Andre tror er dårlig.

Svarte 19/12/2011 kl. 14:57
kilden bruker

stemmer
2

Alternativt kan du bruke @Route merknader direkte i en kontroller fil. se https://github.com/sensio/SensioFrameworkExtraBundle/blob/master/Resources/doc/annotations/routing.rst

Som for standardruter, tror jeg Symfony2 oppfordrer eksplisitt rute kartlegging.

Svarte 10/07/2011 kl. 19:00
kilden bruker

stemmer
1

Hvis du ønsker å opprette en "catch all", beste alternativet ville være å hekte på KernelEvents::EXCEPTIONhendelsen. Denne hendelsen blir utløst når en Unntak faller gjennom til HttpKernel, dette inkluderer NotFoundHttpExceptionkastet når ruteren ikke kan løse en rute til en Controller.

Effekten vil være lik Symfony er stilisert 404-side som blir gjengitt når du sender forespørselen gjennom app_dev.php. I stedet for å returnere en 404, utfører du hva logikk du ønsker å.

Svarte 10/01/2013 kl. 00:29
kilden bruker

stemmer
1

Du kan lage din egen pakke som håndterte alle forespørsler og brukes nettadresseparametere for å konstruere en streng å passere til kontrollerens frem metode. Men det er ganske crappy, jeg vil gå med godt definerte ruter, det holder nettadressene renere, og kobler ut URL og kontrolleren navn. Hvis du endrer navn på en bunt eller noe, du må da refactor nettadressene?

Svarte 27/09/2011 kl. 21:04
kilden bruker

stemmer
0

Det kommer an ... Noen av mine ser slik ut:

api_email:
resource: "@MApiBundle/Resources/config/routing_email.yml"
prefix: /

og noen ser ut som

api_images:
path:     /images/{listingId}/{width}/{fileName}
defaults: { _controller: ApiBundle:Image:view, listingId: null, width: null, fileName: null }
methods:  [GET]
requirements:
    fileName: .+
Svarte 05/04/2018 kl. 07:07
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more