1
votes

Laravel a passé l'argumentation

J'ai des problèmes avec mon application Laravel. J'essaye de faire un grattoir et ça ressemble à ça.

<?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;
    }
}

Comme vous pouvez le voir, j'ai créé un nouveau dossier dans l'application qui s'appelle Scraper, et j'ai un fichier Amazon.php qui ressemble à:

<?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;
    }

Et cela renvoie toujours une erreur comme

TypeError: l'argument 1 passé à Symfony \ Component \ HttpFoundation \ Response :: setContent () doit être du type string ou null, objet donné,

Qu'est-ce que je fais mal?


3 commentaires

Quelle ligne de code provoque cette erreur?


Il indique uniquement TypeError: l'argument 1 passé à Symfony \ Component \ HttpFoundation \ Response :: setContent () doit être du type string ou null, objet donné, appelé dans C: \ Users \ Rade \ Desktop \ eComet \ vendor \ laravel \ framework \ src \ Il‌ luminate \ Http \ Respon‌ se.php à la ligne 65 dans le fichier C: \ Users \ Rade \ Desktop \ eComet \ vendor \ symfony \ http-foundation \ ‌ Response.php à la ligne 412


Vous n'êtes pas très familier avec Laravel, mais vous définissez une méthode d' index dans votre classe Amazon et vous ne l'appelez pas réellement. Vous voudrez peut-être return $this->test->index() place, dans ScraperController#index . Avoir une méthode d' index dans votre classe personnalisée (sans contrôleur) est cependant un peu étrange.


3 Réponses :


1
votes

Je crois que le problème est de renvoyer l'objet lui-même (return $ this-> test), vous devriez utiliser return response () -> json ([$ this-> test]);


0 commentaires

1
votes

return var_dump($node->text()); avant de return $this->test pour être sûr que test () renvoie la valeur attendue.


0 commentaires

0
votes

Dans mon cas, j'ai eu une demande de publication pour une fonction

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

J'avais besoin de () travailler

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


0 commentaires