Laravel 4表单构建器自定义字段宏

时间:2013-04-28 04:04:51

标签: php frameworks laravel php-5.3 laravel-4

我正在尝试创建一个自定义HTML 5日期字段,以便在laravel 4框架视图中使用。

{{
    Form::macro('datetime', function($field_name)
    { 
        return '';
    });         
}}

{{ Form::label('event_start', 'Event Date', array('class' => 'control-label')) }}
{{ Form::datetime('event_start') }}

唯一的问题是价值没有被填充,我不知道该怎么做。

我正在使用此表单来创建和编辑名为Event的模型。

如何填充此字段的值?

5 个答案:

答案 0 :(得分:10)

我在app / start / global.php中添加了以下内容:

Form::macro('date', function($name, $value = null, $options = array()) {
    $input =  '<input type="date" name="' . $name . '" value="' . $value . '"';

    foreach ($options as $key => $value) {
        $input .= ' ' . $key . '="' . $value . '"';
    }

    $input .= '>';

    return $input;
});

但“好方法”是扩展Form类并实现你的方法。

答案 1 :(得分:6)

这就是我的所作所为:

在我看来,我添加了以下宏

<?php
Form::macro('datetime', function($value) {
    return '<input type="datetime" name="my_custom_datetime_field" value="'.$value.'"/>';
});
...
...
// here's how I use the macro and pass a value to it
{{ Form::datetime($datetime) }}

答案 2 :(得分:4)

不需要使用宏。只需使用Laravel的内置Form::input方法定义date作为您所需的输入类型:

{{ Form::label('event_start', 'Event Date', array('class' => 'control-label')) }}
{{ Form::input('date', 'event_start', $default_value, array('class'=>'form-control')) }}

这似乎不在主要文档中,而是在上面链接的API文档中。

答案 3 :(得分:3)

我找到了另一种方法,即将我的宏放在名为macros.php的文件中,然后将其放在app/目录下以及filters.phprouts.php,然后在app/start/global.php我在最后添加了以下行

require app_path().'/macros.php'; 

这将在应用程序启动后和构建视图之前加载宏。 它接近整理并遵循Laravel的约定,因为这与Laravel用于加载filters.php文件的方式相同。

答案 4 :(得分:2)

这对我有用:

Form::macro('date', function($name, $value = null, $options = array()) {
$attributes = HTML::attributes($options);
$input =  '<input type="date" name="' . $name . '" value="' . $value . '"'. $attributes.'>';
return $input;
});

而不是

    foreach($options)

你可以使用

    HTML::attributes($options)