フォームフィールドに事前入力するには、create.blade.phpのフォームフィールドに「value」を追加します。
{{ Form::text('title', 'Some default title') }}
そのタスクを他の場所(おそらくモデルまたはコントローラーで)に実行する方法はありますか?作成ビューと編集ビューで同じフォームフィールドのコードが欲しいのですが。ありがとう!
さて、ここにあります...例ではLaravelのフォームモデルバインディングを使用しました。 (私はユーザーモデル/データベーステーブルで作業します)。このトピックが明確でない場合は、これを見てください 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>
はい、次の例を考えてみましょう。
見る:
{{ Form::text('title', $title) }}
コントローラ:
$title = 'Some default title';
if($article) {
$title = $article->title;
}
return View::make('user.login')->with('title', $title)
次に、Some default title
がfalse
と等しくない場合は、$article
または$ articleのタイトルのいずれかを含むテキスト入力があります。
必要なのは、ブレードテンプレートに条件を含めることだけです。
データベーステーブルにフィールドmyfieldがあり、デフォルトでmydefaultに設定するとします。
作成ビューと編集ビューによって呼び出される部分ビューに以下を含めるだけです。
@if(isset($myfield))
{{ Form::input('text','myfield') }}
@else
{{ Form::input('text','myfield','mydefault') }}
@endif
他に何もする必要はありません。
プレースホルダーを意味する場合は、これを行うことができます
{{ Form::password('password', array('placeholder' => 'password'))}}
おそらく簡単です(Laravel 5):
{{ Form::text('title', isset($yourModel) ? null : 'Some default title') }}
これは、フォームをパーシャルとして使用していることを前提としています。フォームのモデルが存在する場合(レコードを編集またはパッチを適用している場合)は値を入力する必要があります。それ以外の場合は、希望するデフォルトが表示されます。
スキーマビルダーを使用している場合(移行または他の場所):
Schema::create(
'posts', function($table) {
$table->string('title', 30)->default('New post');
}
);