Используя Laravel 4, как мне пометить переключатель как проверенный, если ключ сеанса является указанным значением?

У меня есть многостраничная форма с двумя переключателями с одинаковым атрибутом имени. Когда я выбираю один и нажимаю кнопку «Следующий шаг», я сохраняю значение этого переключателя в массиве сеанса с именем поля формы и выбранным значением. Если пользователь возвращается на страницу, я хочу, чтобы ранее выбранный переключатель был проверен.

Вот что я придумал:

Просмотр: Choose-listing-type.blade.php

<div class="form-group">
  <?php $checked_status = Session::get('listing_form_data.type') === 'property' ? true : false; ?>
  {{ Form::radio('type', 'property', $checked_status) }} Create Property Listing
</div>

<div class="form-group">
  <?php $checked_status = Session::get('listing_form_data.type') === 'room' ? true : false; ?>
  {{ Form::radio('type', 'room', $checked_status) }} Create Room Listing
</div> 

Это работает, но выглядит неаккуратно. Во-первых, я не думаю, что оператор if, который проверяет значение сеанса, должен быть в представлении, и я хотел бы найти способ сделать это в лезвии.

Используя Laravel 4, как лучше всего пометить радиокнопку как проверенную в зависимости от значения указанного сеансового ключа?


person zeckdude    schedule 13.02.2015    source источник


Ответы (2)


Поскольку вы упомянули, что хотели сделать это в контроллере:

$type = Session::get('listing_form_data.type');
return View::make('view')->with('type', $type);

Вид:

{{ Form::radio('type', 'property', $type === 'property') }} Create Property Listing
{{ Form::radio('type', 'room', $type === 'room') }} Create Room Listing

Или даже:

$type = Session::get('listing_form_data.type');
$isProperty = ($type === 'property');
$isRoom = ($type === 'room');
return View::make('view')->with(compact('isProperty', 'isRoom'));

Вид:

{{ Form::radio('type', 'property', $isProperty) }} Create Property Listing
{{ Form::radio('type', 'room', $isRoom) }} Create Room Listing
person lukasgeiter    schedule 13.02.2015
comment
Это потрясающе! Согласны ли вы с тем, что такой код принадлежит контроллеру, или я слишком придирчив? - person zeckdude; 13.02.2015
comment
Нет, соглашусь (первая версия, вторая немного экстремальная). Преимущество в том, что представление должно знать, откуда именно берется этот тип. Поэтому, если бы вы переключились на файл cookie, вы бы изменили его в контроллере. Вид остался прежним :) - person lukasgeiter; 13.02.2015

Почему бы вам просто не поместить условное право в хелпер формы, например:

<div class="form-group">
  {{ Form::radio('type', 'room', (Session::get('listing_form_data.type') === 'room') ? true : false) }} Create Room Listing
</div>

Лично я не вижу ничего плохого в проверке настроек сеанса из представления...

person Jesse Schutt    schedule 13.02.2015
comment
Это хорошее предложение и один шаг в правильном направлении, но я искал какое-то решение, которое я могу обработать в контроллере, что кажется более подходящим решением. - person zeckdude; 13.02.2015