【问题标题】:LARAVEL 7 - How to pass variables to viewsLARAVEL 7 - 如何将变量传递给视图
【发布时间】:2023-03-14 02:39:06
【问题描述】:

我有两张表,Company 和 Projects。一家公司有许多项目,而一个项目属于一家公司。

Company.php 模型

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

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

Project.php 模型

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() 函数中声明变量

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');

【问题讨论】:

    标签: php laravel eloquent laravel-blade


    【解决方案1】:

    如果我是对的,我会很搞笑....

    在定义关系的模型中,将 App/Project 替换为 App\Project。对公司做同样的事情......将“/”替换为“\”。

    【讨论】:

    • 哈哈哈谢谢谢谢谢谢谢谢,成功了,难以置信
    • 大声笑...为此付出了很多努力。我关注了你一个小时的问题....我刚才看到了问题。
    • 哈哈哈。多么想念。我想为了避免这种情况,下次你可以尝试使用Model::class
    【解决方案2】:

    您必须正确命名Project

    1. 确保文件名是Project.php
    2. 确保Project.php 命名空间内声明正确:namespace App;
    3. 确保Project.php 中的类名是“项目”:class Project extends Model { ...
    4. 确保已将其导入控制器。 use App\Project

    完成所有操作后,您将不会收到错误:

    Class 'App/Project' not found

    您已经正确地完成了在视图中传递变量,但请在此处查看传递它的其他示例和方法: https://laravel.com/docs/7.x/views

    希望对你有帮助

    【讨论】:

    • 嗯,没什么,我仍然收到Error Class 'App/Project' not found http://127.0.0.1:8000/companies/1 在完成您的建议之后。我已经在我的 CompaniesController.php 中添加了 use App\Project
    • 当我将鼠标悬停在use App\Project;上时显示Symbol 'App\Http\Controllers\Project' is declared but not used.
    • 您的 App\Project 类是否满足其他条件?它必须在app/ 文件夹内
    【解决方案3】:

    您已经在使用模型绑定。在你的show方法中,你不需要find。只返回你需要的东西

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

    在您看来,您可以这样做:

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

    【讨论】:

    • 试过了,但现在出现这个错误Facade\Ignition\Exceptions\ViewExceptionClass 'App/Project' not found (View: /home/tazho/projects_html/laravel-blog/resources/views/companies/show.blade.php)http://127.0.0.1:8000/companies/1我错过了吗?
    猜你喜欢
    • 2015-01-11
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2016-11-20
    • 2022-07-08
    相关资源
    最近更新 更多