Lumen - FatalThrowableError 在 null 上调用成员函数 file()

Posted

技术标签:

【中文标题】Lumen - FatalThrowableError 在 null 上调用成员函数 file()【英文标题】:Lumen - FatalThrowableError Call to a member function file() on null 【发布时间】:2018-08-08 10:48:02 【问题描述】:

我正在尝试将值插入到我的文件表中,但出现错误。 FatalThrowableError 在 null 上调用成员函数 file()。

Inset.php 模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class Inset extends Model

    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'insets';

    public function file()
    
        return $this->hasMany('App\File');
    

File.php 模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class File extends Model

    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'files';
    protected $fillable = ['file_name','file_content', 'insets_post'];

    public $timestamps = false;

    public function inpost()
    
        return $this->belongsTo('App\Inpost');
    

FilesController.php 控制器

<?php
/**
 * Created by PhpStorm.
 * User: Kacper
 * Date: 28.02.2018
 * Time: 14:00
 */

namespace App\Http\Controllers;

use App\File;
use App\Inset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;

class FilesController

    public function showAll(Request $request)
    
        return File::all();
    

    public function show($ID_inset)
    
        return File::findOrFail($ID_inset);
    

    public function insert(Request $request)
    
        $inset = Inset::find($request->input('inset_id'));
        $file =$inset ->file()->create([
            'file_name' => $request->input('file_name'),
            'file_content' => Crypt::encrypt($request->input('file_content'))
        ]);
        $file->save();
    

错误:

(1/1) FatalThrowableError 在 null 上调用成员函数 file()

在 FilesController.php(第 31 行)中 文件控制器->插入(对象(请求))在 call_user_func_array(array(object(FilesController), 'insert'), BoundMethod.php(第 29 行)中的数组(对象(请求))) BoundMethod::Illuminate\Containerclosure() 在 BoundMethod.php (行 87) 在 BoundMethod::callBoundMethod(object(Application), 数组(对象(FilesController),“插入”),对象(闭包)) BoundMethod.php(第 31 行)在 BoundMethod::call(object(Application), 数组(对象(文件控制器),“插入”),数组(),空)在 Container.php(第 564 行)位于 容器->调用(array(object(FilesController), 'insert'), array()) in RoutesRequests.php(第 373 行)位于 应用程序->callControllerCallable(array(object(FilesController), 'insert'), array()) 在 RoutesRequests.php(第 316 行)中 应用程序->callControllerAction(array(true, array('uses' => 'App\Http\Controllers\FilesController@insert'), array())) 在 RoutesRequests.php(第 275 行)位于 应用程序->callActionOnArrayBasedRoute(array(true, array('uses' => 'App\Http\Controllers\FilesController@insert'), array())) 在 RoutesRequests.php(第 260 行)位于 应用程序->handleFoundRoute(array(true, array('uses' => 'App\Http\Controllers\FilesController@insert'), array())) 在 RoutesRequests.php(第 160 行)位于 RoutesRequests.php 中的应用程序->Laravel\Lumen\Concernsclosure() (第 413 行)在 Application->sendThroughPipeline(array(), RoutesRequests.php(第 166 行)中的 object(Closure)) RoutesRequests.php(第 107 行)中的 Application->dispatch(null) index.php 中的 Application->run()(第 28 行)

【问题讨论】:

在执行file 函数之前,你必须检查$inset 是否为空。 感谢它的工作:) 【参考方案1】:

你的代码

$inset = Inset::find($request->input('inset_id'));

返回 null 这就是引发此错误的原因。

如果你想避免错误,你可以这样做

$inset = Inset::find($request->input('inset_id'));

 if($inset)
    $file =$inset ->file()->create([
        'file_name' => $request->input('file_name'),
        'file_content' => Crypt::encrypt($request->input('file_content'))
    ]);
    $file->save();
 

希望对你有帮助

【讨论】:

以上是关于Lumen - FatalThrowableError 在 null 上调用成员函数 file()的主要内容,如果未能解决你的问题,请参考以下文章

Lumen:刚刚安装了lumen,无法从公用文件夹中获取资源

Lumen Passport (dustrio/lumen-passport) - 使登录变得可访问

在没有 Lumen/Laravel 会话的情况下使用 Lumen + Dingo + JWT

lumen 6:如何在 lumen 上重构响应分页的数据?

Lumen:在 routes.php 第 17 行:升级到 5.5 后调用未定义的方法 Laravel\Lumen\Application::post()。*

Lumen + ReactJS 路由。分配路径