开发者问题收集

Laravel 传递参数

2020-08-08
31053

我的 Laravel 应用程序出现了一些问题。我尝试制作 scraper,它看起来像这样。

<?php

namespace App\Http\Controllers;

use App\Scraper\Amazon;
use Illuminate\Http\Request;

class ScraperController extends Controller
{
    public $test;

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $this->test = new Amazon();
       
        return $this->test;
    }

如您所见,我在应用程序内创建了名为 Scraper 的新文件夹,并且我有一个 Amazon.php 文件,如下所示:

<?php

namespace App\Scraper;

use Goutte\Client;

class Amazon
{
    public string $test = ''; 

    public function __construct()
    {
        return "test";
    }

    public function index()
    {
        $client = new Client();
        
        $crawler = $client->request('GET', 'https://www.amazon.co.uk/dp/B002SZEOLG/');

        $crawler->filter('#productTitle')->each(function ($node) {
            $this->test = $node->text()."\n";
        });

        return $this->test;
    }
}

并且它总是返回类似这样的错误

TypeError: Argument 1 passed to Symfony\Component\HttpFoundation\Response::setContent() must be of the type string or null, object given,

我做错了什么?

3个回答

我认为问题在于返回对象本身 (return $this->test), 您应该使用 return response()->json([$this->test]);

sromeu
2020-08-08

return $this->test 之前返回 var_dump($node->text()); ,以确保 test() 返回预期值。

Igiri David
2020-08-08

就我而言,我有一个对函数的发布请求

$contest =  Contest::with('contestRatings')->where('id', '=', $contest_id);
return $contest;

我需要 get() 才能使其工作

$contest =  Contest::with('contestRatings')->where('id', '=', $contest_id)->get();
Mihai
2020-11-25