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 http://example.com/@/your_name.

In 1.8, zf treats '@' as a marker of translated segment, so the above code does not work but throws an exception. http://framework.zend.com/manual/en/…

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. http://framework.zend.com/manual/en/…


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.