1
votes

Les routes ne fonctionnent pas, la variable du contrôleur apparaît comme non définie

PostController

Route::get('/home', 'PostController@index');  

web.php

Facade\Ignition\Exceptions\ViewException

Undefined variable: posts (View: C:\xampp\htdocs\lts\resources\views\home.blade.php)

home

@foreach($posts as $post)
  <p>{{$post['content']}}</p>
@endforeach

I obtenir cette erreur

Route::get('/', function () {
  return view('welcome');
});

Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::resource('posts','PostController');

$ posts ne sont pas définis

Rendez la variable facultative dans le modèle de lame. Remplacez {{$ posts}} par {{$ posts ?? ''}}

Merci pour l'aide à tous. J'ai pu résoudre ce problème en ajoutant

public function index()
{
  $posts=Post::all();
  return view('home')->with('posts', $posts);
}

J'aimerais savoir pourquoi ce problème a été causé en premier lieu Route :: resource ('posts', 'PostController'); aurait dû le gérer.


13 commentaires

Êtes-vous sûr d'obtenir des variables de la table Posts ?


donc en ajoutant cette Route :: get ('/ home', 'PostController @ index'); avant Route :: resource ('posts', 'PostController'); La fonction d'index semble fonctionner. Cela ne devrait-il pas être géré avec Route :: resource ('posts', 'PostController');


obtenez-vous cette erreur? PostController @ index affiche home.blade , tout comme HomeController @ index . Avez-vous défini des $ posts dans votre HomeController ?


il n'y a rien dans le homecontroller


@HaseebAhmed Quel contrôleur utilisé pour récupérer le message? PostController ou HomeController.


@Amit Senjaliya j'ai créé un contrôleur de poste avec --resource et la méthode d'indexation avec le code est dans le contrôleur de poste.


@HaseebAhmed Quand cette erreur se produit? qu'est-ce qu'une URL? Veuillez partager avec nous.


l'URL est localhost / lts / public / home


@HaseebAhmed C'est pourquoi une erreur se produit. Je publierai la réponse.


Je récupère les messages sur la page d'accueil, l'URL ne change pas.


Vous voudrez peut-être également jeter un œil à l'installation / à la configuration de Laravel. / public doit être le DocumentRoot et ne pas apparaître dans vos URL.


je vais le réparer avant de le déployer sur un serveur en direct.


@HaseebAhmed Pouvez-vous lire ma réponse. Dites-moi n'importe quelle question.


4 Réponses :


0
votes

Essayez ceci au lieu de ce que vous avez donné pour la boucle

@foreach($posts as $post)
    {{ $post->content}}
@endforeach


0 commentaires

0
votes

Essayez de remplacer

<p>{{ optional($post)->content }}</p>

par

<p>{{$post['content']}}</p>

et

return view('home', ['posts' => $posts]);

par

return view('home')->with('posts', $posts);


1 commentaires

Pouvez-vous vérifier que vous frappez ce contrôleur? public function index () {dd ('Le contrôleur attendu est en cours d'exécution'); $ posts = Publier :: tout (); return view ('home') -> with ('posts', $ posts); }



1
votes

Changement dans votre contrôleur

@foreach($posts as $post)
    {{ $post['content'] }}
@endforeach

changement dans votre lame

public function index()
    {
      $posts=Post::all();
     return view('home')->with('posts', $posts);
    }


4 commentaires

{{$ post ['content']}} changez cela.


Comment cela aiderait-il lorsque " $ posts n'est pas défini "?


return view ('home') -> with ('posts', $ posts);


{{$ post ['content']}} ou {{$ post-> content}}



2
votes

Il existe deux façons de procéder:

Première:

Si vous souhaitez utiliser HomeController pour / home route puis ajoutez le code suivant dans le HomeController.

HomeController:

Route::get('/home', 'PostController@index')->name('home');
Route::resource('posts','PostController');

Second One

Vous avez utilisé la méthode resource dans web.php pour que votre URL 'PostController' commence à partir de posts Mais vous avez utilisé / home . Alors changez votre itinéraire comme ceci:

Dans web.php

public function index()
{
    $posts=Post::all();
    return view('home')->with('posts', $posts);
}


3 commentaires

@HaseebAhmed Quelle méthode utilisée pour vous? Premier ou deuxième.


on dirait que c'était le problème, mauvaise idée de récupérer les messages sur la page d'accueil?


@HaseebAhmed Vous avez raison, deuxième méthode plus précise.