如何设置 Symfony2 路由以允许更多可选路径。
目前路由文件看起来像这样,控制器包含 3 个动作来处理请求。
MediaFilmBundle_film:
pattern: /films
defaults: { _controller: MediaFilmBundle:Film:index }
MediaFilmBundle_Film_Genre:
pattern: /films/genre/{genre_slug}
defaults: { _controller: MediaFilmBundle:Film:genre }
MediaFilmBundle_Film_Source:
pattern: /films/source/{source_slug}
defaults: { _controller: MediaFilmBundle:Film:source }
这项工作,但如何才能做得更好或者是超越 Symfony2,是否有可能做类似以下的事情,所以只有一个动作可以处理这一切。
MediaFilmBundle_film:
pattern: /films/genre/{genre_slug}/source/{source_slug}
defaults: { _controller: MediaFilmBundle:Film:index }
上述路线应符合以下所有条件:
/films
/films/genre/horror
/films/source/america
/films/genre/action/source/england
理想情况下,它不应与以下内容匹配,否则控制器可以将其重定向到标准格式genre/../source/..
/films/source/england/genre/action
可以使用现有结构匹配路由,如下所示:
MediaFilmBundle_Film_Genre_Source:
pattern: /films/genre/{genre_slug}/source/{source_slug}
defaults: { _controller: MediaFilmBundle:Film:genreSource }
这种方法的问题是随着更多的 slug 添加更多的路线并且需要更多的操作。
- 1 slug = 2 路线和行动
- 2 条 slug = 4 条路线和行动
- 3 条 slug = 8 条路线和行动
- n 蛞蝓 = ...