Laravel — P6: Passing Arguments to Views

How to Pass Arguments to Views

We know how to grab URL parameters and return them from our route, but how do we pass arguments to the view?

Read the previous article to see how to pass arguments via the url.

It’s a pretty simple thing to implement. Before we look at our route, let’s create a new blade file in the resources/views/ directory called car.blade.php.

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Car</title>

    <!-- Fonts -->
    <link href="https://fonts.bunny.net/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">

    <!-- Styles -->
    <style>
        /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}a{background-color:transparent}[hidden]{display:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}a{color:inherit;text-decoration:inherit}svg,video{display:block;vertical-align:middle}video{max-width:100%;height:auto}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-t{border-top-width:1px}.flex{display:flex}.grid{display:grid}.hidden{display:none}.items-center{align-items:center}.justify-center{justify-content:center}.font-semibold{font-weight:600}.h-5{height:1.25rem}.h-8{height:2rem}.h-16{height:4rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.leading-7{line-height:1.75rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.ml-12{margin-left:3rem}.-mt-px{margin-top:-1px}.max-w-6xl{max-width:72rem}.min-h-screen{min-height:100vh}.overflow-hidden{overflow:hidden}.p-6{padding:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pt-8{padding-top:2rem}.fixed{position:fixed}.relative{position:relative}.top-0{top:0}.right-0{right:0}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.text-center{text-align:center}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-5{width:1.25rem}.w-8{width:2rem}.w-auto{width:auto}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:640px){.sm\:rounded-lg{border-radius:.5rem}.sm\:block{display:block}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:h-20{height:5rem}.sm\:ml-0{margin-left:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-0{padding-top:0}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width:768px){.md\:border-t-0{border-top-width:0}.md\:border-l{border-left-width:1px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\:bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.dark\:bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}.dark\:border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.dark\:text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}}
    </style>
</head>
<body class="p-6">
    <h1>Your Car is</h1>
    <h2>Make: <!-- Add Make --></h2>
    <h2>Model: <!-- Add Model --></h2>
    <h2>Option: <!-- Add Option --></h2>
</body>
</html>
What we’re trying to achieve is when we visit http://0.0.0.0/car/Nissan/GT-R/Nismo, we get to see the car that we just selected. We’ll setup the route like we normally would and pass the three arguments to the function. The function will then return the car view.
<?php
// ...
Route::get('/car/{make}/{model}/{option}', function($make, $model, $option) {
    return view('car');
});

When we visit the page, we get the following:

How can we get those arguments to display in our view? We have to first pass the arguments to the view. The view global helper has an optional second parameter declaration. It accepts an array of key/value pairs. So, let’s add that.

<?php
// ...
Route::get('/car/{make}/{model}/{option}', function($make, $model, $option) {
    return view('car', [
        'make' => $make,
        'model' => $model,
        'option' => $option,
    ]);
});

Our car.blade.php now has access to the arguments. The variable names will be the key names. Our first key is make so the variable that it’ll be bound to is $make within our car view. We can use plain PHP to display our arguments.

<body class="p-6">
    <h1>Your Car is</h1>
    <h2>Make: <?php echo $make; ?></h2>
    <h2>Model: <?php echo $model; ?></h2>
    <h2>Option: <?php echo $option; ?></h2>
</body>

When we visit our page again, we get the populated content.

It’s not ideal to use PHP directly in our views, but we haven’t learned about blade templating yet. That’s going to be the topic of the next article.

We’ll end this one with one more example, to make sure that this is solidified. Lets pass a user_type of admin key/value pair and display the $user_type within the view. A modification to the view, car.blade.php, needs to occur first.

<body class="p-6">
    <h1>Hello <?php echo $user_type; ?>. Your car is:</h1>
    <h2>Make: <?php echo $make; ?></h2>
    <h2>Model: <?php echo $model; ?></h2>
    <h2>Option: <?php echo $option; ?></h2>
</body>
</html>

Next, let’s pass the argument through our route.

Route::get('/car/{make}/{model}/{option}', function($make, $model, $option) {
    return view('car', [
        'make' => $make,
        'model' => $model,
        'option' => $option,
        'user_type' => "admin",
    ]);
});

Refreshing the page, we get the anticipated result.

Simple. See you in the next article when start looking through the blade syntax.

Laravel Series

Continue your Laravel Learning.

Pass Parameters to Your Laravel Route

Laravel – P5: Route Parameters

Frequently we need to pass arguments to our route file via URL parameters. You might know how to do it with PHP but it’s even easier with Laravel.

Laravel — P6: Passing Arguments to Views

How to Pass Arguments to Views

Laravel – P6: Passing Arguments to Views

We know how to grab URL parameters and return them from our route, but how do we pass arguments to the view?

Laravel — P7: View Subdirectories and Checks

Organize Your Views Better With Subdirectories

Laravel – P7: View Subdirectories and Checks

If you want to keep your Laravel views directory organized, we’ll need to look at subdirectories. There is a standard that we should strive to follow.

Leave a Reply