当前位置: 首页 > 知识库问答 >
问题:

Laravel未定义变量:文件

郑和泰
2023-03-14

我有一个卖在线课程的小app。

每次我通过执行PHP artisan Migrate:reset重置迁移时,如果我试图更新Ecourses edit blade文件中的字段,就会出现这个错误。

这是我的控制器

public function update(Request $request, $id)
{
    $slugify = new Slugify();

    $this->validate($request, [
        'name' => 'required',
        'price' => 'nullable',
        'category_id' => 'required',
        'level_id' => 'required',
        'subtitle' => 'required',
        'description' => 'required',
        'video_link' => 'required',
        'document' => 'nullable|file',
        'status' => 'required|integer'

    ]);

    $ecourse = Ecourse::findOrFail($id);
    $ecourse->name = $request->name;
    $ecourse->slug = $slugify->slugify($request->name);
    $ecourse->price = $request->price;
    $ecourse->status = $request->status;
    $ecourse->description = $request->description;
    $ecourse->subtitle = $request->subtitle;
    $ecourse->video_link = $request->video_link;
    $ecourse->category_id = $request->category_id;
    $ecourse->level_id = $request->level_id;

    $document = $request->file('document');

    if ($request->hasFile('document')) {
        $documentFullname = $document->getClientOriginalName();
        $documentName = pathinfo($documentFullname, PATHINFO_FILENAME);
        $extension = $document->getClientOriginalExtension();
        $file = time() . '_' . $documentName . '.' . $extension;
        $document->storeAs('public/ecourses-files/', $file );

    }

    $fileToDelete = 'public/ecourses-files'. '/' . $ecourse->document;

    if (Storage::exists($fileToDelete)) {
        Storage::delete($fileToDelete);
    }

    $ecourse->document = $file;

    $ecourse->save();

    return redirect()->route('admin.ecourses.index')->with('success','Formation mise à jour');
}

错误是由于$ecourse->document=$file;这一行造成的,为了使它正常工作,我必须对它进行注释,更新我的Ecourse刀片,然后取消对它的注释。

我真的不知道这里发生了什么。。。

如有任何帮助或解释,将不胜感激。

谢谢,保重。

共有3个答案

左翰海
2023-03-14

这有一个操作符:

$course->document = $file ?? null;
徐奇
2023-03-14

替代解决方案,用Isset()检查$file,如果没有定义,则定义它,如下所示:

if(!isset($file)){
  $file = null;
}
$ecourse->document = $file;
冉永宁
2023-03-14

看起来$request->hasfile('document')返回false,在这种情况下,这段代码将永远不会运行

if ($request->hasFile('document')) {
    $documentFullname = $document->getClientOriginalName();
    $documentName = pathinfo($documentFullname, PATHINFO_FILENAME);
    $extension = $document->getClientOriginalExtension();
    $file = time() . '_' . $documentName . '.' . $extension;
    $document->storeAs('public/ecourses-files/', $file );
}

因此没有定义变量$file,要解决这个问题,您可以这样做

$file = null;

if ($request->hasFile('document')) {
    $documentFullname = $document->getClientOriginalName();
    $documentName = pathinfo($documentFullname, PATHINFO_FILENAME);
    $extension = $document->getClientOriginalExtension();
    $file = time() . '_' . $documentName . '.' . $extension;
    $document->storeAs('public/ecourses-files/', $file );
}

这将解决该问题,但如果列document不能为空,则会给您一个错误,因此您必须在验证规则中使它成为required,并检查$request->hasfile('document')返回false的原因

 类似资料:
  • 问题内容: 在jQuery的核心风格指南建议两种不同的方法来检查一个变量是否被定义。 全局变量: 局部变量: 特性: 为什么jQuery为什么对全局变量使用一种方法而对局部变量和属性使用另一种方法? 问题答案: 对于未声明的变量,将返回字符串文字,而身份检查将触发错误 “未定义foo” 。 对于局部变量(您 知道 已在某处声明),不会发生此类错误,因此进行身份检查。

  • 问题内容: 我知道这是一个基本问题,但是我很好奇下面的代码为什么不起作用。没有用例不会声明此变量。 我得到错误 我确定这只是我还在学习的基本GOLANG内容。 谢谢你的支持 问题答案: 块有自己的范围。在您的情况下,它们在外部不可见。 您可以在修复前声明。 文件:https://golang.org/ref/spec#Declarations_and_scope 您可能还需要阅读:Go中的声明范围

  • 我试图在MySQL中创建一个过程。这是正文: 但是当我保存它时,我得到这个错误: 处理您的请求时发生了一个或多个错误: 以下查询失败:“创建定义器”=root@localhost过程getAutoFinishTimeRemaining(按_order_id INT,按_Hoursint)非确定性读取SQL数据SQL安全定义器开始声明_date_delivered datetime;声明_date_

  • This sets the value of $undefined for Smarty, default is null. Currently this is only used to set undefined variables in $global_assign to a default value. 该变量为Smarty设定没有得到定义的变量的值,默认为空.当前仅用来设定全局配置中的未定

  • 问题内容: 作为Go“ newb”,我 不确定 在编译程序时为什么会在控制台中收到 未定义err 和 未定义用户 的错误。 我有: 我意识到我可以在条件块之前声明and 变量,但是我想知道为什么这不起作用。与一次性创建两个新变量有关吗? UDPATE 对此有些混乱。 我现在有: 和我的错误现在是 用户声明的,不使用 。目前,我还没有解决 错误的 部分,但是我不确定为什么会遇到用户错误。 问题答案:

  • 我是Reactjs新手,对未定义的变量有问题。在控制台日志中,我从以下React页面获得“未捕获引用错误:drawResults未定义app.js:116002”: 也许有人会建议如何修正这个错误。我在构造函数中声明了state变量,并尝试在fetchResults()方法中为其赋值,但脚本失败,变量未定义。

  • 问题内容: 当我尝试引用永不设置或未设置的会话()时,我在核心CakePHP文件中出现错误: 我已经搜索了我的代码(在app /目录中),但是找不到对或的引用。我有什么想念的吗? 当我尝试运行任何单元测试时,都会显示此错误。这是正常的吗?我已经清除了目录,并用另一个目录(相同版本)替换了该目录,以确保我没有无意间修改了核心文件中的任何内容,但是仍然出现相同的错误。我不确定这是否只是框架中的缺陷或其

  • 我正在尝试使用HTML、CSS和Javascript制作一个简单的哑巴井字游戏。 在下面的播放器移动函数中,由于JSON对象中存在Typeerror,因此无法调用ComputerMove函数。 下面是JSON对象:- 检查功能始终有效,控制台响应如下 调试时,我发现在此错误之后,计算机移动()函数永远不会被调用。所以请帮忙。