Quick dropdowns: selectRange, selectYear, selectMonth

Today I want to share a small trick which I've found out only recently. Let's say you need to have a select dropdown field with number range from X to Y - for example, birth year from 1900 to 2015. How would you do it?

In general PHP, you can write HTML and for loop:

<select name="year">
<? for ($year=1900; $year <= 2015; $year++): ?>
  <option value="<?=$year;?>"><?=$year;?></option>
<? endfor; ?>
</select>

Of course, in Laravel you have Form::select and you can pass array to it:
Controller:

$years = [];
for ($year=1900; $year <= 2015; $year++) $years[$year] = $year;

View:

{!! Form::select('year', $years) !!}

But seems also quite long for such a simple operation, right? Luckily, there is a better and more elegant way - meet function selectRange().

{!! Form::selectRange('year', 1900, 2015) !!}

And that's it, here's the dropdown result:

1228_laraveldaily_selectrange

As you probably understood, selectRange() has three parameters - field name, range start number and end number. Unfortunately, there's no parameter for step - so if you want to build a dropdown with numbers repeating every 2, every 5 or something - this function won't work for you, you have to build it manually.

Bonus: selectYear() and selectMonth()

Also there are two extra similar functions in illuminate/html package.

Actually, there's even shorter way to have a dropdown for years - with special function selectYear().

{!! Form::selectYear('year', 1900, 2015) !!}

It will produce the same result as the function selectRange() above.

And final tip - if you want to have dropdown of months - simple: selectMonth().

{!! Form::selectMonth('month') !!}

Here's how the result looks:

1228_laraveldaily_selectmonth

So there you go - a few sweet helpers to make your code prettier and shorter.

No comments or questions yet...

Like our articles?

Become a Premium Member for $129/year or $29/month
What else you will get:
  • 22 courses (477 lessons, total 38 h 20 min)
  • 2 long-form tutorials (one new every week)
  • access to project repositories
  • access to private Discord