Laravel 4 とその組み込みのフォーム コンポーネントを使用しています。フォームにデフォルト値のセットを与えることができるように設定しようとしていますが、ユーザーが送信してバリデーターが失敗した場合、前の入力の値が使用されます。ただし、以下のコードは常に失敗します。セッション値 'threw_error' は、フォームがエラーをスローした場合でも、何らかの理由で常に true です。
すべてがセッションで行われているようです。そのため、フォームが使用する内部キーである __old_input を設定しています。私は何を間違っていますか?このように __old_input を使用する必要がありますか、またはこの目標を達成するためのより良い方法はありますか?
私は機知に富んだコントローラーを使用しているので、以下の index() は GET / で、store() は POST / です。
class Admin_DetailsController extends Admin_BaseController
{
public function index()
{
$details = Detail::all();
// this is always true for some reason?
if(!Session::get('threw_error', false))
{
Session::put('__old_input', $details);
}
$data['message'] = Session::get('message');
$this->layout->nest('content', 'admin.details.index', $data);
}
public function store()
{
$validator = $this->makeValidator();
if($validator->fails())
{
return Redirect::to('/admin/details')->withErrors($validator)->withInput()->with('threw_error', 1);
}
// process normally
}
}
// in view
{{ Form::text('some_field') }}
編集:このコードは多かれ少なかれ期待どおりに機能しますが、Session::flashInput($details) は手動で __old_input を呼び出すよりも優れています。フォーム内のいくつかのフィールドを削除して、そこに何かがあるかどうかを確認しようとしましたが、これは実際に機能しました. 言い換えれば、それは私のローカル バージョンの PHP か、何らかの構成か何かの問題であり、Laravel の問題ではないと思います。