找不到类“ App \ Http \ Controllers \ App \ Model”

时间:2019-10-04 14:26:45

标签: php laravel laravel-5

我有一个CRUD应用程序,除了更新标签外,其他所有功能

这是我的控制器中的update函数

namespace App\Http\Controllers;

use App\Tag;
use App\PageList;
use App\PageListTag;
use Illuminate\Http\Request;

public function update(Request $request, $id)
{
    $pages = PageList::find($id);
    $pages->pagetitle =  $request->get('pagetitle');
    $pages->articlelist = $request->get('articlelist');
    $pages->status = $request->get('status');

    $pages->save();

    $pages->tags()->saveMany([
        new App\Tag(),
        new App\Tag(),
    ]);

    return redirect('/pages')->with('success', 'pages updated!');
}

这里是Tag模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    protected $fillable = ['page_list_id', 'page_list_tag_id'];

    protected $with = ['tag'];

    public function tag()
    {
        return $this->belongsTo('App\PageListTag', 'page_list_tag_id', 'id');
    }
}

运行我的应用程序时,出现以下错误

  

找不到类'App \ Http \ Controllers \ App \ Tag'

我的代码在做什么错了?

2 个答案:

答案 0 :(得分:3)

您以错误的方式解析了模型名称空间。请看看官方的PHP documentation

在您的代码中,您正在按以下方式解析Tag

use App\Tag; // <-- This is right

但是在您的方法中,您正在调用

$pages->tags()->saveMany([
    new App\Tag(), // <-- And this is wrong!
    new App\Tag(),
]);

您只需调用new Tag(),因为文件顶部的use已包含该类。

否则,PHP将尝试从当前名称空间解析该类。这就是为什么要扔

Class 'App\Http\Controllers\App\Tag' not found

正确的说,您应该在\之前添加App\Tag,这样PHP才能从根目录解析该类。在这种情况下,use语句将无用

答案 1 :(得分:2)

您的命名空间为App\Http\Controllers,因此,当您使用语法new App\Tag()创建标签时,确实将其翻译为App\Http\Controllers\App\Tag

因此,只需将您的说明new App\Tag()替换为new Tag()

或者,您也可以使用绝对符号:

new \App\Tag()