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 Réponses :
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]);
return var_dump($node->text());
avant de return $this->test
pour être sûr que test () renvoie la valeur attendue.
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;
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 classeAmazon
et vous ne l'appelez pas réellement. Vous voudrez peut-êtrereturn $this->test->index()
place, dansScraperController#index
. Avoir une méthode d'index
dans votre classe personnalisée (sans contrôleur) est cependant un peu étrange.