web-dev-qa-db-ja.com

Laravel送信フォームの日付形式(d-M-Y)

ブレードテンプレートの送信フォームには、次の日付フォームがあり、Y-m-dのようなデフォルトの日付で正常に機能します。

しかし、私はd-M-Yのような日付を表示したいので、運がなくても使用可能な解決策を見つけようとしました

デフォルトの日付で機能するコードは次のとおりです。

これがモデルです

public static $rules = [
    'birthday'   => 'date'
];

protected $fillable = ['birthday'];

これがControllerメソッドです

public function update($id)
{
    $kid = Kid::findOrFail($id);

    $validator = Validator::make($data = Input::all(), Kid::$rules);

    if ($validator->fails())
    {
        return Redirect::back()->withErrors($validator)->withInput();
    }

    $kid->update($data);
    return Redirect::to('kids/list');
}

これがBladeテンプレートです

{{ Form::model($kid, ['method' => 'PATCH', 'route' => ['kids.update', $kid->id], 'files' => true], ['class' => 'form-horizontal']) }}
{{ Form::text('birthday', null, ['class' => 'form-control']) }}
{{ Form::submit('Confirm update', ['class' => 'btn btn-primary']) }}
{{ Form::close() }}

[〜#〜]更新[〜#〜]

これは、4.2以降のすべてのLaravelバージョンで機能します。

Laravel 5.1以降の場合、Laravel 5の一部ではなくなったため、 個別のパッケージ としてインストールする必要があります芯。

Html/form Builderはフレームワークのコア要件ではないと判断されたため、コアから削除されました。私がリンクしたパッケージは、L4コアに含まれていて、L5の互換性と使用法のために別個のパッケージとして維持されているパッケージなので、必要に応じて安全に使用できます。

このアップデートをしてくれた@Bogdanに感謝します。

データベースストレージ用とユーザーインタラクション用に1つの日付形式が必要な場合は、表示する前とデータベースに保存する前に処理する必要があります。したがって、次のようなことを行う必要があります。

1。フォーム入力の日付値を変換します:

{{ Form::text('birthday', date('d-M-Y', strtotime($kid->birthday)), ['class' => 'form-control']) }}

2。保存する前に、データベースに必要な形式に変換してください:

public function update($id)
{
    $kid = Kid::findOrFail($id);

    // Convert birthday format to be compatible with database ISO 8601 format
    $data = Input::all();
    $data['birthday'] = date('Y-m-d', strtotime($data['birthday']));

    $validator = Validator::make($data, Kid::$rules);

    if ($validator->fails())
    {
        return Redirect::back()->withErrors($validator)->withInput();
    }

    $kid->update($data);
    return Redirect::to('kids/list');
}

よりオブジェクト指向の日付処理方法が必要な場合は、Laravelにすでに含まれている Carbon を使用できます。

13
Bogdan