<rmcreative>

RSS

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

  1. №4643
    Владимир
    Владимир 14 мая 2011 г., 7:52:52

    К анонимным функциям надо привыкнуть, наверно точно так же как в свое время привыкал к использованию short tag. И использование их чаще всего сомнительным мне кажется, потому что может привести к оверкоду. Я подобное стараюсь выносить или в хелперы, или хранить прямо в модели.

    З.Ы.: Пример не самый удачный. То же самое можно сделать и без функции.

  2. №4644
    mrix
    mrix 14 мая 2011 г., 8:48:45

    А чё к ним привыкать? По-моему, гораздо нагляднее, чем eval и create_function.

  3. №4645
    Ekstazi
    Ekstazi 14 мая 2011 г., 11:47:00

    А мне пример понравился, даже не знал что gridView можно callback передавать.

  4. №4646
    Stamm
    Stamm 14 мая 2011 г., 12:49:39

    Использую их в кэшировании (COutputCache) в параметре varyByExpression. Также можно использовать в CExpressionDependency.

  5. №4647
    Ekstazi
    Ekstazi 14 мая 2011 г., 14:29:40

    Stamm, Мм, а с какой версии добавили, не в курсе ? В прошлых вроде обычный eval был с extract ом параметров..

  6. №4648
    psih
    psih 14 мая 2011 г., 21:12:17

    @Ekdtazi Использовать анонимные функции можно везде, где требуется написание PHP expression. Другое дело что в API Reference нету описания какие параметры передаются этому callback - так что иногда приходится гадать.

  7. №4729
    Алексей
    Алексей 24 мая 2011 г., 21:16:43

    Вопрос немного не по теме. Но, больше задать негде. Я хочу хранить шаблоны отображений в базе, а потом в Yii как-нибудь прогонять его через render или renderPartial, соответственно с подключенным шаблонизатором и т.п. Как скормить рендеру запись из базы?

  8. №4731
    Sam
    Sam 24 мая 2011 г., 21:54:31

    Алексей, ну почему же негде? Форум к вашим услугам.

  9. №4732
    Алексей
    Алексей 24 мая 2011 г., 22:06:02

    Ну, вот и замечательно!

  10. №5971
    lkg0dzre
    lkg0dzre 03 марта 2012 г., 16:13:10

    Очень помогло. Попался случай, когда другого варианта реализации просто нет, кроме как через анонимную функцию.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.