ZF-6533: Router begins to treat '@' as a special character in version 1.8, which should be noted in "Migrating from Previous Versions" section


Zend_Controller_Router_Route used to treat '@' as a normal character, so I use it like 'user' => new Zend_Controller_Router_Route('@/:user_name/*', array('module' => $defaultModuleName, 'controller' => 'user')), it works on zf1.7 with

In 1.8, zf treats '@' as a marker of translated segment, so the above code does not work but throws an exception.…

To make it work as same as 1.7, I need to modify strangely like the following. 'user' => new Zend_Controller_Router_Route('@/:user_name/*', array('module' => $defaultModuleName, 'controller' => 'user'), array(), new Zend_Translate('array', array('' => '@'))),

I do not know it's the great way or not, but anyway this behavior change leads a backword-compatibility break, so that it should be noted in the migrating section in the document.…


Except mentioning that in the migration chapter, we could also allow escaping special chars (being colon ":" and at "@" in the beginning of a segment). Thus you would be able to use them again without a dirty workaround.

Maybe that's right, but I think every zf change that the zf-user needs to change his/her code should be noted in the migration chapter. Even if you have introduce the escape character (or a way to change special characters), zf-user needs a small mod to add an escape character, so still it should be noted in the migration chapter.

Whoops, I meant "Beside mentioning that..."

Escaping for beginning special characters is now :: and @@…

the @ character is no a special character in the beginning of a route segment. You mean "now a special character"?

Yes, that is what's meant. The typo was solved yesterday, and will be put online within a few days (probably with the release of 1.8.1).

Closing for now.