محمد معین بابائی
3 سال پیش توسط محمد معین بابائی مطرح شد
5 پاسخ

چرا می نویسه Undefined variable .articles

سلام من تازه شروع به یادگیری لاراول کردم و دارم دوره ای از نسخه قبلی لاراول رو از همین سایت مشاهده می کنم و هر جایی که همخونی با لاارول 8 نداره رو عوض می کنم
وقتی به روت اصلی میرم برای مشاهده مقالات می نویسه
ErrorException
Undefined variable $articles (View: C:\Users\User\Desktop\hesammousavi\resources\views\index.blade.php)
http://localhost:8000/
$$articles is undefined


کد های فایل index.blade.php

@extends('layouts.master')

@section('content')
<h1 class="my-4">Page Heading
    <small>Secondary Text</small>
</h1>
<!-- Blog Post -->
@foreach ($articles as $article)
    <div class="card mb-4">
        <img class="card-img-top" src="http://placehold.it/750x300" alt="Card image cap">
        <div class="card-body">
            <h2 class="card-title">{{ $article->title }}</h2>
            <p class="card-text">{{ $article->body }}</p>
            <a href="/articles/{{ $article->slug }}" class="btn btn-primary">Read More &rarr;</a>
        </div>
        <div class="card-footer text-muted">
            Posted on January 1, 2017 by
            <a href="#">Start Bootstrap</a>
        </div>
    </div>
@endforeach

<!-- Pagination -->
<ul class="pagination justify-content-center mb-4">
    <li class="page-item">
        <a class="page-link" href="#">&larr; Older</a>
    </li>
    <li class="page-item disabled">
        <a class="page-link" href="#">Newer &rarr;</a>
    </li>
</ul>
@endsection

@section('sidebar')
@parent

<!-- Side Widget -->
<div class="card my-4">
    <h5 class="card-header">Side Bar Widget</h5>
    <div class="card-body">
        You can put anything you want inside of these side widgets. They are easy to use, and feature the new Bootstrap
        4 card containers!
    </div>
</div>
@endsection

کد های HomeController

<?php

namespace App\Http\Controllers;

use App\Models\Article;
use Illuminate\Http\Request;

class HomeController extends Controller
{
public function home()
{
    $articles = Article::orderBy('id', 'desc')->get();
    return view('index', compact($articles));
}

public function about()
{
    return view('about');
}

public function contact()
{
    return view('contact');
}
}

اگر دوستی می تونه بهم کمک کنه خیلی ممنون :)))
@nimageneral
@hesammousavi
@milad
@endworld
@mhyeganeh


ثبت پرسش جدید
سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 3 سال پیش مطرح شد
4

@moeinbabaei
سلام. دو روش برای پاس دادن اطلاعات به ویوو ها توضیح میدم هرکدوم راحت بودین استفاده کنید.
اولی: ( متغیر ها بصورت آرایه key value ارسال میشن و شما میتونید key رو در ویوو دریافت کنید.

public function home()
{
    $articles = Article::orderBy('id', 'desc')->get();
    return view('index', ['articles' => $articles]);
}

دومی: ( روش خودتون. دقت کنید داخل compact باید آرگومانتون که همون اسم مغیر هست بدون $ بصورت استرینگ پاس داده باشه.

public function home()
{
    $articles = Article::orderBy('id', 'desc')->get();
    return view('index', compact('articles'));
}

موفق باشید


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
1

@SobhanDadkhah
خیلی ممنون از شما دوست عزیز مشکل من بر طرف شد .


موقع compact کردن اشتباه کرده بودم


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

@SobhanDadkhah
@endworld
@hesammousavi
یه سوال دارم چه شکلی میشه همزمان دو تا use هم نام داشته باشیم ؟

use App\Http\Controllers\ArticleController;
use App\Http\Controllers\Admin\ArticleController;

محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
2

@moeinbabaei
در خصوص سوال دومتون استفاده دو تا کلاس با نام یکسان می‌تونید موقع use کردن با استفاده از as براشون نام مستعار متفاوت ایجاد کنید و از این به بعد در اون فایل از این نام مستعار متفاوت استفاده کنید. مثلا اینجوری:

use App\Http\Controllers\ArticleController;
use App\Http\Controllers\Admin\ArticleController as AdminArticleController;

محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

@mhyeganeh
خیلی ممنون


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام