web-dev-qa-db-ja.com

Laravelフォームフィールドのデフォルト値を定義する

フォームフィールドに事前入力するには、create.blade.phpのフォームフィールドに「value」を追加します。

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

そのタスクを他の場所(おそらくモデルまたはコントローラーで)に実行する方法はありますか?作成ビューと編集ビューで同じフォームフィールドのコードが欲しいのですが。ありがとう!

8
my2c

さて、ここにあります...例では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>
15
Andreyco

はい、次の例を考えてみましょう。

見る:

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

コントローラ:

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

次に、Some default titlefalseと等しくない場合は、$articleまたは$ articleのタイトルのいずれかを含むテキスト入力があります。

5

必要なのは、ブレードテンプレートに条件を含めることだけです。

データベーステーブルにフィールドmyfieldがあり、デフォルトでmydefaultに設定するとします。

作成ビューと編集ビューによって呼び出される部分ビューに以下を含めるだけです。

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

他に何もする必要はありません。

3

プレースホルダーを意味する場合は、これを行うことができます

{{ Form::password('password', array('placeholder' => 'password'))}}
2
mahami

おそらく簡単です(Laravel 5):

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

これは、フォームをパーシャルとして使用していることを前提としています。フォームのモデルが存在する場合(レコードを編集またはパッチを適用している場合)は値を入力する必要があります。それ以外の場合は、希望するデフォルトが表示されます。

1
Jafo

スキーマビルダーを使用している場合(移行または他の場所):

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