【问题标题】:Laravel 5.6 Reflection Exeption - Class App\Providers\App\Campaign does not existLaravel 5.6 Reflectionexception - 类 App\Providers\App\Campaign 不存在
【发布时间】:2018-09-27 23:13:51
【问题描述】:

这件事让我很难过。

我收到此错误/反射异常 -> Class App\Providers\App\Campaign 不存在

Campaign 是为应用创建的类。

奇怪的是,这个错误只在我使用“显示”资源路由时出现。当我使用“索引”路线列出它时。我没有收到任何错误。

课程如下:


namespace App;

use Illuminate\Database\Eloquent\Model;

class Campaign extends Model
{
protected $table='campaigns';
protected $primaryKey = 'campaignID';
protected $fillable = [
    'campaignID',
    'campaignName',
    'shortDescription',
    'longDescription',
];

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

    public function person(){
    return $this->belongsTo('App\Person','campaignID','campaignID');
    }
}

这是控制器的“显示”功能


public function show(Campaign $campaign)
{
    $campaign = Campaign::find($campaign->campaignID);
    return view('campaigns.show', ['campaign'=>$campaign]);
}

编辑 - 这是整个控制器

<?php

namespace App\Http\Controllers;

use App\Campaign;
use App\User;
use App\Company;
use App\Lead;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;

class CampaignsController extends Controller
{
    /**
    * Display a listing of the resource.
    *
    * @return \Illuminate\Http\Response
    */
    public function index()
    {
        $campaigns=Campaign::get();
        return view('campaigns.index', ['campaigns'=> $campaigns]);
    }

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
        return view('campaigns.create');
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
    {
        $coID = Auth::user()->companyID;
        $uID = Auth::user()->id;


        $campaign = Campaign::create([
            'campaignName' => $request->input('campaignName'),
            'shortDescription' => $request->input('shortDescription'),
            'longDescription' => $request->input('longDescription'),
        ]);


        if($campaign){
            $campaigns=Campaign::where('companyID',Auth::User()->companyID)->get();
            return view('campaigns.index', ['campaigns'=> $campaigns])
                ->with('success' , 'Campaign created successfully');
        }
        return back()->withInput()->with('errors', 'Error creating new campaign');
    }    

/**
 * Display the specified resource.
 *
 * @param  \App\Campaign  $campaign
 * @return \Illuminate\Http\Response
 */

public function show(Campaign $campaign)
{
    $campaign = Campaign::find($campaign->campaignID);
    return view('campaigns.show', ['campaign'=>$campaign]);
}
/**
 * Show the form for editing the specified resource.
 *
 * @param  \App\Campaign  $campaign
 * @return \Illuminate\Http\Response
 */
public function edit(Campaign $campaign)
{
    $campaign = Campaign::find($campaign->campaignID)->toSQL();
    dd($campaign);
    return view('campaigns.edit', ['campaign'=>$campaign]);
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \App\Campaign  $campaign
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, Campaign $campaign)
{
    //
}

/**
 * Remove the specified resource from storage.
 *
 * @param  \App\Campaign  $campaign
 * @return \Illuminate\Http\Response
 */
public function destroy(Campaign $campaign)
{
    //
}

public function listcompanycampaigns()
{
    $campaigns=Campaign::where('companyID',Auth::User()->companyID)->get();
    return view('campaigns.index', ['campaigns'=> $campaigns]);
}

public function listambassadorcampaigns()
{
    $campaigns = Campaign::get();
    return view('campaigns.ambassadorindex', ['campaigns'=> $campaigns]);
}

}

我已经清除缓存和“composer dump-autoload”无济于事。

感谢你们提供的任何帮助。

吉夫斯

【问题讨论】:

  • 你展示控制器的全部代码
  • 控制器中有use App\Providers\Campaign吗?
  • 请注意,“App”在此命名空间“App\Providers\App\Campaign”中出现了两次。检查所有命名空间。确保控制器的 show() 方法正在注入 App\Campaign 而不仅仅是 Campaign。
  • 是的。这是应用程序显示两次的奇怪之处。我已经验证 App/Providers 不在控制器中。我认为它甚至没有进入 show 函数,因为我试图添加一个中断来显示生成的 SQL 并且没有显示。

标签: php laravel reflection


【解决方案1】:

您的路线是什么样的?你在使用路由模型绑定吗?

如果你是,那么你应该先了解它是如何工作的:

https://laravel.com/docs/5.6/routing#route-model-binding

否则,请删除 show 方法中的类型提示,并在 find 方法中使用实际整数查找模型。

【讨论】:

  • 谢谢。我认为在 RouteServiceProvider 中添加模型会起作用。但仍然有同样的问题。但是您的提示增加了对可能出现问题的一些见解。
猜你喜欢
  • 2022-01-13
  • 2015-10-20
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多