Только функции формы, такие как форма :: текст будут автоматически искать модель формы. Внутри вашего макроса вы можете сделать это несколькими способами. Самый простой способ - использовать 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();
?>
Вы можете найти все доступные функции формы в исходном коде здесь: https://github.com/laravel/framework/blob/master/src/Illuminate/Html/FormBuilder.php
вы утверждаете, что пытались создать функцию Form :: macro(), которая вызывает внутри нее форму :: model? – TonyArra
Нет, если я использую 'Form :: model()' для формы редактирования, но внутри формы создается пользовательская 'Form :: macro()'. Когда внутри макрофункции я не могу получить доступ к данным из модели. Если я не пропущу что-то ... – cmfolio
Если все, что вы делаете внутри макроса, выводит простой HTML, нет никакого способа взаимодействия поля с моделью. HTML напечатан как есть. Запрос атрибутов модели выполняется внутри функции Form :: input, которая вызывается в любое время, когда вы вызываете такую функцию, как Form :: text. Таким образом, внутри вашего Macro, который является в основном просто настраиваемой функцией, вам нужно запросить атрибуты модели самостоятельно. – TonyArra