无法访问控制器中的变量 (Laravel)

Can't access variable in controller (Laravel)

我正在使用 Laravel 5 和 Goutte 进行抓取,我正在尝试提取我需要的链接,而不是所有链接。所以,基本的正则表达式出现了。 Regex 没问题,已在线测试并且可以正常工作,但是当我尝试在控制器中应用该 regex 时出现错误。这是我尝试过的:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Goutte\Client;

class RvnController extends Controller
{
    public function index()
    {


        $client = new Client();

        $crawler = $client->request('GET', 'http://www.jgpnis.rs/index.php/red-voznje-preuzimanje-pregled.html');

        $regex_rvn_links = "/http:\/\/www.jgpnis.rs\/red_voznje\/([a-zA-Z0-9\-])+\/([a-zA-Z0-9\-\.])+/";
        $links_array = array();

        $crawler->filter('a')->each(function ($node) use($links_array) {

            if (preg_match($regex_rvn_links , $node->link()->getUri())) {
                $links_array[] = $node->link()->getUri();
            }


        });

        dd($links_array);
    }
}

错误如下:ErrorException in RvnController.php line 27: Undefined variable: regex_rvn_links.

好的,我试图通过直接在 preg_match 中应用正则表达式的错误,它正在工作,但我的 $links_array 是空的。不要混淆,如果我打印 $node->link()->getUri() 而不是将其推送到数组,我会得到大约 15 个链接,所以它可以工作。但是,我不能这样使用它,我需要那个数组。所以,我的问题是如何在这种情况下使用变量,因为它们都不起作用。我错过了什么?

您正在使用闭包,需要将变量正确传递到闭包中。

1) $regex_rvn_links 必须传递到闭包中。这是异常的原因。

2) $links_array 必须通过引用传递 (&$links_array)。这就是你得到空数组的原因。

$crawler->filter('a')->each(function ($node) use (&$links_array, $regex_rvn_links) {
    if (preg_match($regex_rvn_links , $node->link()->getUri())) {
        $links_array[] = $node->link()->getUri();
    }
});