【问题标题】:Why the variable is undefined in the show?(Solved)为什么该变量在节目中未定义?(已解决)
【发布时间】:2021-10-29 09:00:16
【问题描述】:

当我点击进入音乐家的表演页面时,它给了我这个错误:

这是 Admin/MusicianController 中的表演功能

public function show(Musician $musician)

    {
        return view('admin.musicians.show', compact('musician')); 
    }

这些是管理员路由

Route::middleware('auth')
    ->namespace('Admin')
    ->name('admin.')
    ->prefix('admin')
    ->group(function() {

        Route::get('/', 'HomeController@index')->name('welcome');
        Route::resource('musicians', 'MusicianController'); 
    }); 

这是音乐家表演的链接

<a class="btn btn-warning" href="{{route('admin.musicians.show', $musician->id)}}">Vedi il profilo</a>

admin.welcome所在的地方

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Musician;

class HomeController extends Controller
{
    public function index(Musician $musician) {
        return view('admin.welcome', compact('musician')); 
    }
}

【问题讨论】:

  • 您的错误指向admin/welcome.blade.php,但您的代码不包括您调用view('admin.welcome') 的位置。
  • 你到底是什么意思?
  • @TimLewis like Tim 说你的admin/welcome.blade.php 没有变量$musician 所以你需要view('admin.welcome') => view('admin.welcome', compact('musician'))
  • 我的意思是你的调试工具准确地告诉你错误是什么。在您的admin/welcome.blade.php 中,您引用了$musician,但您可能没有将变量传递给该视图。您的问题中没有包含对该文件的任何引用,所以我们只能猜测。在您使用view('admin.welcome') 的任何地方更新您的问题,以便我们可以帮助您进一步调试,但除此之外,您需要学习如何阅读错误消息并适当地修复它。
  • 在答案中编辑,我也放入了紧凑的“音乐家”,现在我会尝试它是否有效

标签: laravel eloquent laravel-blade laravel-7


【解决方案1】:

已解决

Admin/HomeController 的变化

class HomeController extends Controller
{
    public function index() {
        $user = Auth::user();
        $musician = Musician::where('user_id', Auth::id())->get();

        return view('admin.musicians.index', compact('musician', 'user')); 
    }
}

Admin/MusicianController 的 index 函数,我为此创建了一个新视图(admin.musicians.index),它也可以是 admin.welcome 视图,但是在使用 index 的控制器中看起来更清晰

public function index()
    {
        return Musician::where('user_id', Auth::id())->with('user')->get();
    }

admin.musicians.index 视图,我使用 1 对 1 关系来捕捉音乐家->id,User 和 Musician 模型都有 hasOne() 函数相互指向

<div class="profile">
        <h2>Vedi il tuo profilo</h2>
        
        {{-- la rotta prende l'id del musicista legato all'utente autenticato --}}
        <a class="btn btn-warning" href="{{ route('admin.musicians.show', $user->musician->id) }}">Vedi il profilo</a>
        {{ $user->name }}
        {{$user->id}}

        {{-- questo è per capire se prendevo dati dalla relazione 1a1 --}}
        {{$user->musician->stagename}} 


        
</div>

admin.musicians.show 视图,现在我可以看到与注册用户关联的音乐家的名字,问题解决了。

@extends('layouts.app')

@section('content')
<div class="container">
    SHOW PROFILO
    
    <h1>Nome d'arte:</h1>
    <p>{{$musician->stagename}}</p>
    
</div>
@endsection

型号仅供参考

  1. 应用\用户
class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name','surname', 'email', 'password','address'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function musician() {
        return $this->hasOne('App\Musician'); 
    }
}
  1. 应用\音乐家
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Musician extends Model
{
    protected $fillable = [
        'user_id', 
        'stagename',
        'slug', 
        'description',
        'bio',
        'typology',
        'cover'
    ]; 

    public function user() {
        return $this->hasOne('App\User'); 
    }

    public function genres() {
        return $this->belongsToMany('App\Genre'); 
    }

    public function sponsorships() {
        return $this->belongsToMany('App\Sponsorship'); 
    }

    public function messages() {
        return $this->belongsToMany('App\Message'); 
    }

    public function reviews() {
        return $this->belongsToMany('App\Review'); 
    }
}

【讨论】:

    【解决方案2】:

    你可以做两件事:

    class HomeController extends Controller
    {
        public function index(Musician $musician) {
             dd($musician);
            return view('admin.welcome', compact('musician')); 
        }
    }
    

    如果 dd($musician);什么都不返回然后写

    class HomeController extends Controller
        {
            public function index() {
                 $musician= Musician::all();
                return view('admin.welcome', compact('musician')); 
            }
        }
    

    另一件事

    public function show(Musician $musician,$id)
    
        {
            $musician= Musician ::findOrFail($id);
            return view('admin.musicians.show', compact('musician')); 
        }
    

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多