Yii и PHP 5.3
14 мая 2011
В Yii, при наличии PHP 5.3, можно использовать анонимные функции в качестве callback-а. Например, вот так могут выглядеть обработчики событий:
Yii::app()->onBeginRequest = function($event){ // … };
Более интересный пример — CGridView
:
$this->widget('zii.widgets.grid.CGridView',array( 'dataProvider'=>$dataProvider, 'columns'=>array( 'title', array ( 'name'=>'created_on', 'value'=> function($data){ return date("M j, Y", $data->created_on); }, ), array( 'class'=>'CButtonColumn', ), ), ));
Комментарии RSS по email OK
К анонимным функциям надо привыкнуть, наверно точно так же как в свое время привыкал к использованию short tag. И использование их чаще всего сомнительным мне кажется, потому что может привести к оверкоду. Я подобное стараюсь выносить или в хелперы, или хранить прямо в модели.
З.Ы.: Пример не самый удачный. То же самое можно сделать и без функции.
А чё к ним привыкать? По-моему, гораздо нагляднее, чем eval и create_function.
А мне пример понравился, даже не знал что gridView можно callback передавать.
Использую их в кэшировании (COutputCache) в параметре varyByExpression. Также можно использовать в CExpressionDependency.
Stamm, Мм, а с какой версии добавили, не в курсе ? В прошлых вроде обычный eval был с extract ом параметров..
@Ekdtazi Использовать анонимные функции можно везде, где требуется написание PHP expression. Другое дело что в API Reference нету описания какие параметры передаются этому callback - так что иногда приходится гадать.
Вопрос немного не по теме. Но, больше задать негде. Я хочу хранить шаблоны отображений в базе, а потом в Yii как-нибудь прогонять его через render или renderPartial, соответственно с подключенным шаблонизатором и т.п. Как скормить рендеру запись из базы?
Алексей, ну почему же негде? Форум к вашим услугам.
Ну, вот и замечательно!
Очень помогло. Попался случай, когда другого варианта реализации просто нет, кроме как через анонимную функцию.