Недавно на сайте http://fbdevzone.com/ был рассмотрен удобный способ передачи URL-параметров в действия.
Обычно для этой цели используются методы $this->_getParam() и $this->getRequest()->getParam() в классах контроллера. Это довольно удобный способ, однако он не идеален — прописывать это из метода в метод не очень удобно.
Предложенный способ заключается в том, что параметры передаются в действия в виде аргументов метода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /** * index/info/ * index/info/tags/one/tags/two * index/info/msg/msg-only * index/info/date/2009-10-03 * index/info/msg/RandomOrder/date/2009-10-03 * * @param array $tags * @param Zend_Date $date * @param string $msg */ public function infoAction(array $tags = null, Zend_Date $date = null, $msg = 'hello') { Zend_Debug::dump($tags); if (!is_null($date)) echo $date->get(Zend_Date::DATETIME_FULL); else echo "no date passed\n"; Zend_Debug::dump($msg); die; } |
При помощи Zend_Reflection производится парсинг phpdoc-комментариев, присваивая переменным соответствующие типы.
Подробнее читайте в блоге автора. Там же вы найдёте исходный код класса.
lp says:
если честно, даже из оригинала не совсем понятно, обязателен ли блок phpdoc’a с описанием переменных, или он просто желателен, но можно и без него? вообще странно, учитывая что переменные, да и их типы, указываются в параметрах самого контроллера.
15 октября 2009, 10:26Сергей Митрошин says:
Не маршруты ведь указываются, а переменные. Не вижу проблемы в том, что это указано в контроллере.
15 октября 2009, 10:59lp says:
я имел ввиду что странно что при том что все переменные указаны в параметрах экшена, нужен phpdoc. разве что опять же он не обязателен и просто служит своей цели – документации кода
15 октября 2009, 11:11Сергей Митрошин says:
Насколько я знаю, он необязателен.
15 октября 2009, 11:25Служит он, в первую очередь, для приведения типов переменных. Как видно из примера, можно автоматически преобразовывать параметры например в Zend_Date.
albeva says:
sorry hope you understand english (I can read russian, but not write it) -parameters and type in the phpdoc are optional if you do not require type casting. Since PHP does not allow typed parameters for other than classes and arrays you need to specify them manually.
—
// no arguments
function someAction($mixedType = 0, SomeObject $obj, array $arr) { … }
However the order in which parameters appear in phpdoc is important! So if you need to specify type hinting for the last argument you need also include all preceding arguments as well -this is due to limitation in Zend_Reflection API
hope this helps
15 октября 2009, 13:14Сергей Митрошин says:
albeva, большое спасибо за пояснения.
15 октября 2009, 21:18