2013-07-07 2 views
7

для предварительного заполнения поля формы, мы можем добавить «значения» для формирования поля в create.blade.php:Определить значения по умолчанию для полой формы Laravel

{{ Form::text('title', 'Some default title') }} 

Есть ли способ, чтобы сделать эту задачу в другом месте (возможно, в модели или контроллере?). Я бы хотел иметь код для полей формы, идентичный в представлении редактирования &. Благодаря!

+0

Почему бы не поместить только код формы в отдельный частичный вид, а затем включить его в оба, создать и изменить представления? – Andreyco

+0

Привет, Андрей! Я намереваюсь попробовать этот раздел или переменную для полей формы с инструкцией if (если режим создается, использовать значение по умолчанию или использовать значение null, если режим редактируется). Я хотел бы также установить его в другом месте для таких случаев, как: настройка категории для нового элемента (чтобы быть такой же, как «текущая» категория). – my2c

+0

Возможно, вы захотите изучить «шаблон» использования ViewModel. ** ** здесь ** (http://fuelphp.com/docs/general/viewmodels.html) ** примечание: ** Прочитайте, что для концепции, не пытайтесь использовать FuelPHP в своем проекте Laravel. [Здесь] (http://techportal.inviqa.com/2010/11/02/creative-mvc-meet-the-viewmodel-pattern/) пример в Zend. – fideloper

ответ

12

Итак, вот мы ... Я использовал привязку модели формы Laravel в примере. (Я работаю с таблицей User model/db). Если эта тема не ясно для вас, взгляните на этот http://laravel.com/docs/html#form-model-binding

// Controller 

class UsersController extends BaseController 
{ 

    ... 

    // Method to show 'create' form & initialize 'blank' user's object 
    public function create() 
    { 
     $user = new User; 
     return View::make('users.form', compact('user')); 
    } 

    // This method should store data sent form form (for new user) 
    public function store() 
    { 
     print_r(Input::all()); 
    } 

    // Retrieve user's data from DB by given ID & show 'edit' form 
    public function edit($id) 
    { 
     $user = User::find($id); 
     return View::make('users.form', compact('user')); 
    } 

    // Here you should process form data for user that exists already. 
    // Modify/convert some input data maybe, save it then... 
    public function update($id) 
    { 
     $user = User::find($id); 
     print_r($user->toArray()); 
    } 

    ... 

} 

И вот пришел файл представления, обслуживаемый контроллером.

// The view file - self describing I think 
<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
<body> 
    @if(!$user->id) 
    {{ Form::model($user, ['route' => 'admin.users.store']) }} 
    @else 
    {{ Form::model($user, ['route' => ['admin.users.update', $user->id], 'method' => 'put']) }} 
    @endif 
     {{ Form::text('firstName') }} 

     {{ Form::text('lastName') }} 

     {{ Form::submit() }} 
    {{ Form::close() }} 
</body> 
</html> 
+0

Один файл с представлением намного лучше, проще в обслуживании, чем то, что я хотел попробовать (два файла вида и общий файл formfields :)); ВЕЛИКИЙ!!! Благодаря! Единственное изменение, в котором я нуждался, было в том случае, если выражение ---> @if (! Isset ($ user-> id)) – my2c

0

, если вы имеете в виду заполнитель вы можете сделать это

{{ Form::password('password', array('placeholder' => 'password'))}} 
+0

Спасибо, махами, это не про местозаполнитель. – my2c

5

Да, давайте рассмотрим следующий пример:

Вид:

{{ Form::text('title', $title) }} 

Контроллер:

$title = 'Some default title'; 
if($article) { 
    $title = $article->title; 
} 
return View::make('user.login')->with('title', $title) 

Тогда у вас будет текстовый ввод с Some default title или заголовок из статьи $, если $article не равен false

+0

Спасибо, Виктор! Добавляем переменную $ title для просмотра, а затем добавляем 'with' part (s): -> with ('title', 'Some default ttle') . Если у меня есть идентичный код просмотра для редактирования, он будет жаловаться на отсутствующую переменную заголовка, поэтому я добавляю: -> с ('title', null) – my2c

+0

Как-то это было отменено как принятый ответ, когда я выбрал ответ Андрея. Оба дают полезный ответ на мой вопрос «Есть ли способ» :) Спасибо, все! – my2c

0

При использовании схемы строитель (в Миграции или где-то еще):

Schema::create( 
     'posts', function($table) { 
      $table->string('title', 30)->default('New post'); 
     } 
); 
+0

Привет, Иван, который работает по умолчанию для базы данных, ничего не изменит в модели или других модулях. – my2c

1

Все, что вам нужно сделать, это включить условное в шаблоне лезвия.

Предположим, что в вашей таблице базы данных есть поле myfield, для которого вы хотите по умолчанию использовать mydefault.

Просто включите следующее частичный вид, который вызывается создавать и редактировать просмотров:

@if(isset($myfield)) 
{{ Form::input('text','myfield') }} 
@else 
{{ Form::input('text','myfield','mydefault') }} 
@endif 

Вам не нужно ничего другого.

1

Вероятно, проще (Laravel 5):

{{ Form::text('title', isset($yourModel) ? null : 'Some default title') }} 

То, что вы используете форму как частичный. Он должен заполнить значение, если модель для формы существует (вы редактируете или исправляете запись), иначе она должна показать вам по умолчанию.

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