В приложении у меня было поле выбора, которое выглядело так:
<select name="AgeGroup" class="form-control" id="AgeGroup">
<option value="18-24" selected=""18-24</option>
<option value="18-24">18-24 years</option>
<option value="25-34">25-34 years</option>
<option value="35-44">35-44 years</option>
<option value="45-54">45-54 years</option>
<option value="55-64">55-64 years</option>
<option value="65 Plus">65 years or over</option>
<option value="PTNA">Prefer not to answer</option>
</select>
В дополнение к этому я также спрашиваю дату рождения пользователя, но было бы глупо спрашивать пользователя о них обоих, так как вы наверняка могли бы определить данную возрастную группу с указанной даты рождения?
Поскольку я собираю дату рождения, у меня есть простой мутатор для получения возраста пользователя в годах, который выглядит следующим образом:
/**
* Calculate the user's age in years given their date of birth
*
* @return void
*/
public function getAgeAttribute()
{
$this->birth_date->diff(Carbon::now())->format('Y');
}
Затем я понял, что мне даже не нужно указывать возраст, чтобы определить возрастную группу, поэтому я сделал еще один метод доступа, подобный этому:
/**
* Infer the users age group given their date of birth
*
* @return void
*/
public function getAgeGroupAttribute()
{
$age = $this->birth_date->diff(Carbon::now())->format('Y');
switch($age){
case($age <= 24);
return "18 - 24";
break;
case ($age <= 34);
return "25 - 34";
break;
case ($age <= 44);
return "35 - 44";
break;
case ($age <= 54);
return "45 - 54";
break;
case ($age <= 64);
return "55 - 64";
break;
case ($age > 64);
return "Over 65";
break;
default:
return "Unspecified age group";
}
}
Но меня беспокоит, что, если они на самом деле не выбрали возраст? Поскольку эта форма поставляется с опцией предпочитать не говорить.
Могу ли я просто проверить, что это на самом деле дата, прежде чем я $user->age_group
?
Кроме того, я полагаю, что в первом случае переключателя должно быть или потому что вы можете быть моложе 18 лет.
Как это: case($age >= 18 && $age <= 24);