ИМХО логика разрушения должна быть независимой от результатов испытаний.
В идеале, вам следует избегать полностью использовать установку и демонтаж, al xunit.net. См. здесь для получения дополнительной информации.
I don't know what you are doing in Symfony but it may help to be clear that the following is not a valid URL:
example.com/unsubscribe/email/me@example.com
What you almost certainly want (and this is true for all browsers!) is:
http://example.com/unsubscribe/email/me%40example.com
Note: The @ symbol is not safe and must be encoded, the . symbol is safe however (RFC1738). If you don't escape the @ symbol it will almost certainly cause big trouble so (escaping the . almost certainly won't, but you don't need to so I wouldn't).
Problems will occur with not escaping it because @ is reserved as a separator when passing authentication parameters (e.g. http://username:password@hostname.domain/ url / ). Некоторые парсеры URL поймут, что вы действительно хотели набрать% 40, если @ встречается после домена в URL, но другие этого не сделают.
Вместо того, чтобы просто статически кодировать символ @, вам следует использовать одну из функций кодирования URL PHP в адресе электронной почты (например, «$ emailAddress = urlencode ($ emailAddress) ;»), чтобы другие символы в адресе также экранировались должным образом. Не поддавайтесь соблазну отложить это на потом или «после того, как вы заработаете», сделайте это с самого начала и избавьте себя и конечных пользователей от головной боли! : -)
NB: Существует несколько способов кодирования URL-адресов в PHP, поэтому вам нужно будет прочитать страницу документации для urlencode () и сравнить ее с другими подходами, такими как rawurlencode (), чтобы убедиться, что это действительно то, что вам нужно. в вашем случае.
Ваша проблема не в правилах перезаписи. Учитывая, что Symfony выбрасывает исключение, запрос направляется в Symfony.
Можете ли вы опубликовать трассировку исключения? Если у вас есть sf_logging_enabled, он должен регистрировать довольно полезную информацию для отладки маршрутизации.
По умолчанию Symfony обрабатывает .
и /
в качестве разделителей параметров.
Это позволяет очень легко сопоставить URL, например:
/some/path/:param.:ext
Но не помогает с адресами электронной почты.
К счастью, вы можете переопределить .
разделитель, указав собственный шаблон.
Просто добавьте строку requirements
ниже в свой маршрут:
unsubscribeform:
url: /unsubscribe/email/:email
param: { module: subscribe, action: index }
requirements: { email: .+ }
.+
в требовании — это регулярное выражение, соответствующее чему угодно. .
соответствует любому символу, а +
означает соответствие одному или нескольким.
(Проверено в Symfony 1.4)