2013-12-11 67 views
2

是否可以使用自定义Form::macro()Form::model()功能?Laravel 4:Form :: macro with Form :: model

当我第一眼看到它时,我无法将模型数据传递给宏方法。

+0

你是说你试图制作一个Form :: macro()函数来调用它内部的Form :: model吗? – TonyArra

+0

不,如果我使用'Form :: model()'编辑表单,但表单内部是一个自定义的'Form :: macro()'。在宏函数内部时,我无法访问模型中的数据。除非我错过了某些东西...... – cmfolio

+0

如果您在宏内部所做的只是输出纯HTML,那么该领域实际上无法与模型进行交互。 HTML按原样打印。对于模型属性的请求是在Form :: input函数内部完成的,每次调用Form :: text函数时都会调用它。因此,在您的Macro内部,基本上只是一个自定义函数,您需要自己请求模型属性。 – TonyArra

回答

8

只有Form :: text这样的函数会自动寻找表单模型。在你的宏里面,你可以通过几种方法做到这一点。最简单的就是使用Form::getValueAttribute($name)。例如:

Form::macro('myField', function() { 
    $value = Form::getValueAttribute('username'); 
    return "<input type='text' name='username' value=$value >"; 
}); 

然后你会在刀片模板像这样使用它:

<?php 
    $user = new User; 
    $user->username = "bob"; 
    echo Form::model($user); 
    echo Form::myField(); 
    echo Form::close(); 
?> 

你可以找到所有可用的形式功能的源代码在这里:​​

+0

太棒了。正是我在找的东西。谢谢托尼。 – cmfolio