不能访问控制器(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();
    }
});