簡體   English   中英

LARAVEL 7 - 如何將變量傳遞給視圖

[英]LARAVEL 7 - How to pass variables to views

我有兩張表,Company 和 Projects。 一個公司有很多項目,一個項目屬於一個公司。

公司.php model

protected $fillable = [
    'id', 'name', 'description'
];

public function projects()
{
    return $this->hasMany('App/Project');
}

項目.php model

protected $fillable = [
    'name', 'description', 'company_id', 'days'
];

public function company()
{
    return $this->belongsTo('App/Company');
}

從我的 index.blade.php 中,我只列出了這些公司,並且我讓它們可點擊,這樣當用戶點擊列出的公司時,它們會被帶到 show.blade.php,其中公司的名稱和所屬的項目到那家公司是這樣顯示的。

<div class="jumbotron">
     <h1>{{ $company->name }}</h1>
       <p class="lead">{{ $company->description }}</p>
    </div>

<div class="row">
    @foreach($company->projects as $project)
    <div class="col-lg-4">
        <h2>{{ $project->name }}</h2>
        <p class="text-danger">{{ $project->description }}</p>
        <p><a class="btn btn-primary" href="/projects/{{ $project->id }}" role="button">View Projects »</a></p>
    </div>
    @endforeach
</div>

現在我得到一個未定義的變量$project錯誤。 所以我決定在 CompaniesController.php 的 show() function 中聲明變量,就像這樣

public function show(Company $company)
{
    $company = Company::find($company->id);
    $projects = Company::find(1)->projects;

    return view('companies.show', ['company' => $company, 'projects' => $projects]);
}

並像這樣訪問 show.blade.php 中的變量

    <div class="jumbotron">

    <h1>{{ $company->name }}</h1>
    <p class="lead">{{ $company->description }}</p>
</div>
<div class="row">

    @foreach($projects as $project)
    <div class="col-lg-4">
        <h2>{{ $project->name }}</h2>
        <p class="text-danger">{{ $project->description }}</p>
        <p><a class="btn btn-primary" href="/projects/{{ $project->id }}" role="button">View Projects »</a></p>
    </div>
    @endforeach
</div>

現在,當我訪問 show.blade.php 時,出現Class 'App/Project' not found錯誤。 我在將公司項目傳遞給視圖時遇到了挑戰。 任何幫助將不勝感激。 這是我的路線;

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

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::resource('companies', 'CompaniesController');
Route::resource('projects', 'ProjectsController');

您必須正確命名Project class

  1. 確保文件名為Project.php
  2. 確保在Project.php命名空間聲明中是正確的: namespace App;
  3. 確保Project.php中的 class 名稱為“項目”: class Project extends Model {...
  4. 確保已將其導入 controller。 use App\Project

完成所有操作后,您將不會收到錯誤:

Class 'App/Project' not found

您已正確完成在視圖中傳遞變量,但請在此處查看傳遞它的其他示例和方法: https://laravel.com/docs/7.x/views

希望這可以幫助你

您已經在使用 model 綁定。 在你的show方法中,你不需要find。 只返回你需要的

public function show(Company $company)
{
    return view('companies.show', ['company' => $company];
}

在您看來,您可以執行以下操作:

@foreach($company->projects as $project)
...
@endforeach

如果我是對的,我會很搞笑......

在定義關系的模型中,將 App/Project 替換為 App\Project。 對公司做同樣的事情......將“/”替換為“\”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM