Vahid Amiri
Vahid Amiri

Reputation: 11117

Laravel 5.1 - Undefined variable in view

I have this controller:

<?php

namespace App\Http\Controllers;

class TestController extends Controller
{
    public function index()
    {
        $html = file_get_html('http://www.somesite.com/');
        $html->getElementsByTagName('article');
        $anc = $html->find('a');

        return view('welcome', compact($anc));
    }
}

and this view :

<!DOCTYPE html>
<html>
    <head>
        <title>Laravel</title>
    </head>
    <body>
        <div class="container">
            <div class="content">
                @foreach($anc as $item)
                    {{ $item }} <br>
                @endforeach
            </div>
        </div>
    </body>
</html>

Very simple and nothing special. just getting contents of a url and parsing it with a simple library and returning variable anc to the welcome view and then in the view i'm trying to echo each element. it gives me:

ErrorException in 051dd3929cf86b31dbaacb340018a3c5 line 9:
Undefined variable: anc (View: C:\Users\User\Desktop\Project\resources\views\welcome.blade.php)

Upvotes: 0

Views: 1295

Answers (2)

RCrowt
RCrowt

Reputation: 961

You are using the compact() function in your first block of code incorectly. Try this...

class TestController extends Controller
{
    public function index()
        {
            $html = file_get_html('http://www.somesite.com/');
            $html->getElementsByTagName('article');
            $anc = $html->find('a');

            return view('welcome', compact('anc'));
        }
 }

The compact function requires the name of the variable, not the variable itself.

Upvotes: 1

mopo922
mopo922

Reputation: 6381

You're using compact() improperly. Correct usage is this:

return view('welcome', compact('anc'));

Pass the names of the variables you want compacted, as strings.

PHP doc: http://php.net/manual/en/function.compact.php

Upvotes: 3

Related Questions