PHP без жира "набор" с закрытием - PullRequest
3 голосов
/ 20 февраля 2011

Кто-нибудь знает, как назначить, а затем использовать замыкание в модели / представлении с помощью F3 :: set?Или предложить решение для следующего сценария?

Я использую версию 1.4.4

Вот что я пытаюсь сделать:

//In Model - Loaded from controller w/ F3::call
F3::set('getPrice', function($tax, $profile){
//return price
});

//In View - Inside an F3:repeat of @products
{@getPrice(@product.tax, @product.profile)}

Но замыкания неКажется, не поддерживается ... Если я загружаю модель, используя require / include, определяю функцию без F3 :: set и включаю пользовательские функции в представлении, я могу заставить его работать.Но я надеялся сохранить уровень разделения с помощью F3 :: call / F3 :: set.

Спасибо!

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Итак, версия 1.4.4 не поддерживает это, но версия 2.0 поддерживает.Спасибо за отличные обновления в 2.0!Вот поддержка анонимных функций:

Контроллер-

F3::set('func',
    function($a,$b) {
        return $a.', '.$b;
    }
);

Шаблон-

{{@func('hello','world')}}

А вот поддержка объектов:

$foo=new stdClass;
$foo->phrase='99 bottles of beer';
F3::set('myvar',$foo);

{{@myvar->phrase}}

http://fatfree.sourceforge.net/page/views-templates

1 голос
/ 04 апреля 2011

Возможно, это не тот ответ, который вы хотели бы услышать, но: движок шаблонов F3 ужасно ограничен, поэтому я бы рекомендовал вообще его не использовать.Сам F3 подходит для простых проектов, и, к счастью, вы можете выбрать, какие компоненты вы хотите использовать.Простые шаблоны PHP по-прежнему превосходят любой шаблонный движок, и с помощью небольшой оболочки вы можете легко получить доступ к переменным F3 в них.Тогда ваш шаблон может выглядеть так:

<?= $this->getPrice($this->product->tax, $this->product->profile) ?>

Оболочка просто должна включить шаблон и реализовать подходящие __get и __call.

...