I am new to Laravel and have been trying to figure out the best way of handling a simple task. I have a View that has a form used to either add or edit an event (for this example). When the form will be used to add an event, all input fields are blank. When it is used to edit an event, the inputs are filled by columns from MySQL.
The tricky bit I have run into is figuring out the best way to tell the View that I want to either use the old form input if validation fails or to use the MySQL data if we're opening the form for the first time for an edit.
This is what I have for the moment in the Controller, it is very long and I am sure there is a better way, just not sure what it would be.
Essentially, I assign each form value to a multidimensional array and then return that array to the View. Each array value is conditional - if there is an old Input value, use that. Otherwise, use the value from the table.
public static function action_edit_event($id, $slug) {
$eventDetails = Calendar::find($id);
$event['id'] = $id;
$event['slug'] = $slug;
$event['title'] = (Input::old('admin_events-form-title')) ?
Input::old('admin_events-form-title') : $eventDetails->title;
$event['type'] = (Input::old('admin_events-form-type')) ?
Input::old('admin_events-form-type') : $eventDetails->calendartype_id;
$event['date_start'] = (Input::old('admin_events-form-date-start')) ?
Input::old('admin_events-form-date-start') : $eventDetails->start_date;
$event['allDay'] = (Input::old('admin_events-form-all-day')) ?
Input::old('admin_events-form-all-day') : $eventDetails->day;
$event['time-start_hour'] = (Input::old('admin_events-form-time-start_hour')) ?
Input::old('admin_events-form-time-start_hour') : (($eventDetails->start_time != null) ?
date("H", strtotime($eventDetails->start_time)) : '');
$event['time-start_minute'] = (Input::old('admin_events-form-time-start_minute')) ?
Input::old('admin_events-form-time-start_minute') : (($eventDetails->start_time != null) ?
date("i", strtotime($eventDetails->start_time)) : '');
$event['date_end'] = (Input::old('admin_events-form-date-end')) ?
Input::old('admin_events-form-date-end') : $eventDetails->end_date;
$event['time-end_hour'] = (Input::old('admin_events-form-time-end_hour')) ?
Input::old('admin_events-form-time-end_hour') : (($eventDetails->end_time != null) ?
date("H", strtotime($eventDetails->end_time)) : '');
$event['time-end_minute'] = (Input::old('admin_events-form-time-end_minute')) ?
Input::old('admin_events-form-time-end_minute') : (($eventDetails->end_time != null) ?
date("i", strtotime($eventDetails->end_time)) : '');
$event['description'] = (Input::old('admin_events-form-description')) ?
Input::old('admin_events-form-description') : $eventDetails->description;
return View::make('admin.event-post')->with('event', $event);
}
And the form in the View..
{{ Form::open('admin/events/event', 'POST', array('id' => 'admin_events-form')) }}
<fieldset>
<legend>Event Details</legend>
<p>
{{ Form::label('admin_events-form-title', 'Event Title:')}}
{{ Form::text('admin_events-form-title', isset($event) ? $event['title'] : '') }}
{{ $errors->first('title', '<span class="ui-state-error">:message</span>') }}
</p>
<p>
{{ Form::label('admin_events-form-type', 'Event Type:') }}
{{ Form::select('admin_events-form-type', $select_event_types, isset($event) ? $event['type'] : '') }}
</p>
<p>
{{ Form::label('admin_events-form-date-start', 'Start Date:') }}
{{ Form::text('admin_events-form-date-start', isset($event) ? $event['date_start'] : '', array('id' => 'date_start')) }}
{{ Form::checkbox('admin_events-form-all-day', '1', (isset($event) && $event['allDay'] == 1) ? true : false, array('id' => 'allDay')) }}
{{ $errors->first('start_date', '<span class="ui-state-error">:message</span>') }}
</p>
<p>
{{ Form::label('admin_events-form-time-start_hour', 'Start Time:') }}
{{ Form::select('admin_events-form-time-start_hour', $select_hours, (isset($event) && $event['time-start_hour'] != null) ? $event['time-start_hour'] : '', array('id' => 'start-time_hour')) }} :
{{ Form::select('admin_events-form-time-start_minute', $select_minutes, (isset($event) && $event['time-start_minute'] != null) ? $event['time-start_minute'] : '', array('id' => 'start-time_minute')) }}
{{ $errors->first('start-time-hour', '<span class="ui-state-error">:message</span>') }}
{{ $errors->first('start-time-minute', '<span class="ui-state-error">:message</span>') }}
</p>
<p>
{{ Form::label('admin_events-form-date-end', 'End Date:') }}
{{ Form::text('admin_events-form-date-end', isset($event) ? $event['date_end'] : '', array('id' => 'date_end')) }}
<a href="#" id="admin_events-clear-date-end" class="button" title="Clear End Date">X</a>
<span class="ui-state-highlight">(if different from start date)</span>
</p>
<p>
{{ Form::label('admin_events-form-time-end_hour', 'End Time:') }}
{{ Form::select('admin_events-form-time-end_hour', $select_hours, (isset($event) && $event['time-end_hour'] != null) ? $event['time-end_hour'] : '', array('id' => 'end-time_hour')) }} :
{{ Form::select('admin_events-form-time-end_minute', $select_minutes, (isset($event) && $event['time-end_minute'] != null) ? $event['time-end_minute'] : '', array('id' => 'end-time_minute')) }}
{{ $errors->first('end-time-hour', '<span class="ui-state-error">:message</span>') }}
{{ $errors->first('end-time-minute', '<span class="ui-state-error">:message</span>') }}
</p>
<p>
{{ Form::label('admin_events-form-description', 'Event Description:') }}
{{ Form::textarea('admin_events-form-description', isset($event) ? $event['description'] : '', array('rows' => '5')) }}
</p>
<p class="center">
{{ $errors->first('description', '<span class="ui-state-error">:message</span>') }}
</p>
</fieldset>
{{ Form::hidden('mode', isset($event) ? 'edit' : 'add') }}
@if (isset($event))
{{ Form::hidden('slug', $event['slug']) }}
{{ Form::hidden('id', $event['id']) }}
@endif
{{ Form::close() }}
Any advice would be greatly appreciated. Thanks!