我有一个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'
我的代码在做什么错了?
答案 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()