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'
indexdans votre classeAmazonet vous ne l'appelez pas réellement. Vous voudrez peut-êtrereturn $this->test->index()place, dansScraperController#index. Avoir une méthode d'indexdans votre classe personnalisée (sans contrôleur) est cependant un peu étrange.