Class 关于 laravel 5.8 的请求-> 输入的名称问题

Class name problem on laravel 5.8 with Request->input

我正在尝试按照教程使用 Laravel 创建一个简单的网络抓取工具 here,但是 symfony 在第 49 行抛出了一个 "Class name must be a valid object or string" 错误。在 phpstorm 它确实给了我一个关于在 $website->title

上使用魔术方法访问的字段的轻微警告

我试图在我的 App/Website.php 中将 $title 声明为 public 变量,但它仍然给我这个错误。

这是有错误的代码片段

    public function store(Request $request)
    {
        $this->validate($request,[
            'title'=>'required',
            'url'=>'required',
            'logo'=>'required'
        ]);

        $website = new Website();

        $website->title = new $request->input('title');

        $website->url = $request->input('url');

        $website->logo = $this->uploadFile('logo', public_path('uploads/'), $request)["filename"];

        $website->save();

        return redirect()->route('websites.index');
    }

    /**
     * Display the specified resource.
     *

这是我的 App/Website Class:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Website extends Model
{
    protected $table = "website";
    public $title;
    /**
     * @var array|string|null
     */
    public $url;
    public $logo;

}

它应该将标题、url 和徽标保存到我命名为 scraper 的 sql 数据库,但它一直抛出此错误。请帮忙。

编辑 2:抱歉,我似乎复制了 symfony 显示的代码,我实际的 WebsiteController 是这样的 再次复制了错误的代码,这是实际的实际代码:

public function store(Request $request)
    {
        $this->validate($request,[
            'title'=>'required',
            'url'=>'required',
            'logo'=>'required'
        ]);

        $website = new Website();

        $website->title = new $request->input('title');

        $website->url = $request->input('url');

        $website->logo = $this->uploadFile('logo', public_path('uploads/'), $request)["filename"];

        $website->save();

        return redirect()->route('websites.index');
    }

这里 new 不应该在那里,$website->title = new $request->input('title');,你没有从任何 class 制作对象。我猜你想念类型。

而且你仍然可以通过 $request->title; 获取你的数据我更喜欢这个因为它缩短了你的代码并且仍然可读。

像下面那样做

$website->title = $request->input('title');

$website->title = $request->title; 以及将数据保存到数据库中,您不需要声明变量。

只需在模型中添加保护$fillable=['title','url','logo'];

或者如果您使用 save() 方法,您甚至不需要添加 $fillable