2013-12-11 4 views
2

Возможно ли использовать пользовательскую функцию Form::macro() с функцией Form::model()?Laravel 4: Форма :: макрос с формой :: модель

Когда я попробовал это на первый взгляд, я не мог получить данные модели, которые будут переданы методу макроса.

+0

вы утверждаете, что пытались создать функцию Form :: macro(), которая вызывает внутри нее форму :: model? – TonyArra

+0

Нет, если я использую 'Form :: model()' для формы редактирования, но внутри формы создается пользовательская 'Form :: macro()'. Когда внутри макрофункции я не могу получить доступ к данным из модели. Если я не пропущу что-то ... – cmfolio

+0

Если все, что вы делаете внутри макроса, выводит простой HTML, нет никакого способа взаимодействия поля с моделью. HTML напечатан как есть. Запрос атрибутов модели выполняется внутри функции Form :: input, которая вызывается в любое время, когда вы вызываете такую ​​функцию, как Form :: text. Таким образом, внутри вашего Macro, который является в основном просто настраиваемой функцией, вам нужно запросить атрибуты модели самостоятельно. – TonyArra

ответ

8

Только функции формы, такие как форма :: текст будут автоматически искать модель формы. Внутри вашего макроса вы можете сделать это несколькими способами. Самый простой способ - использовать 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

+0

Awesome. Только то, что я искал. Спасибо Тони. – cmfolio

Смежные вопросы