Я пытаюсь создать пользовательское поле даты 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.
как я могу заполнить значение этого поля?
Вот что я сделал:
на мой взгляд, я добавил следующий макрос
<?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) }}
Я добавил в 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 и реализация ваших методов.
Использование макроса не требуется. Просто используйте встроенный метод Form::input
Laravel, определяющий date
как желаемый тип ввода:
{{ Form::label('event_start', 'Event Date', array('class' => 'control-label')) }} {{ Form::input('date', 'event_start', $default_value, array('class'=>'form-control')) }}
Как представляется, это не относится к основным документам, но находится в документах API, как указано выше.
Я нашел другой способ сделать это, который помещает мои макросы в файл с именем macros.php
затем помещает его в каталог app/
вместе с routs.php
и routs.php
, затем в app/start/global.php
я добавил следующая строка в конце
require app_path().'/macros.php';
это загрузит ваши макросы после того, как приложение запустится и до того, как будет построено представление. он сглаживается аккуратно и следует за соглашением Ларавеля, потому что это тот же самый способ, который использует Laravel для загрузки файла filters.php
.
это работает для меня:
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)