Pergunta

Alguém sabe como atribuir e usar um fechamento em um modelo/visualização usando F3::set?Ou oferecer uma solução para o seguinte cenário?

Estou usando a versão 1.4.4

Aqui está o que estou tentando fazer:

//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)}

Mas os fechamentos não parecem ser suportados...Se eu carregar o modelo usando require/include, definir a função sem F3::set e habilitar funções definidas pelo usuário na visualização, posso fazê-lo funcionar.Mas eu esperava manter o nível de separação proporcionado pelo uso de F3::call/F3::set.

Obrigado!

Foi útil?

Solução 2

Ok, então a versão 1.4.4 não suportava isso, mas a versão 2.0 sim.Obrigado pelas ótimas atualizações no 2.0!Aqui está o suporte à função anônima:

Controlador-

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

Modelo-

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

E aqui está o suporte ao objeto:

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

{{@myvar->phrase}}

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

Outras dicas

Talvez não seja a resposta que você gostaria de ouvir, mas:O mecanismo de template do F3 é horrivelmente restritivo, então eu recomendo não usá-lo.O próprio F3 é adequado para projetos simples e, felizmente, você pode escolher quais componentes deseja usar.Modelos PHP simples ainda superam qualquer mecanismo de modelo e com um pequeno wrapper você pode acessar facilmente variáveis ​​F3 neles.Seu modelo então poderia ser assim:

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

O wrapper só precisa incluir o modelo e implementar __get e __call apropriadamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top