无法访问控制器中的变量 (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();
}
});
我正在使用 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();
}
});