【问题标题】:laravel5 controller issue. Undefined variable: filenamelaravel5 控制器问题。未定义变量:文件名
【发布时间】:2020-01-18 08:45:33
【问题描述】:

我想上传博主的个人资料图片,但出现错误:

未定义的变量:file_name。

我认为这是一个控制器问题。我不知道为什么没有定义变量,尽管我声明了相同的变量名。 我重新启动了服务器,但它没有工作。

所以请帮帮我。

BloggerController.php

public function store(Request $request, User $user_id)
{
    $user_id = DB::table('users')->where('id', $user_id)->get();

    if ($request->hasfile('image')) {
        $file = $request->file('image');
        $ext = $file->getClientOriginalExtension();
        $file_name = time() . '.' . $ext;
        $file->move('bloggers/', $file_name);
    }

    $blog = Blog::create(
        ['user_id' => $user_id],
        [
            'image'        => $file_name,
            'introduction' => $request->introduction,
        ]
    );

    return redirect(route('blogger'));
}

我也改变了存储方法。

if ($request->hasfile('image')) {
    $file_name = $request->file('image')->getClientOriginalName();
    $request->file('image')->storeAs('bloggers/', $file_name);
}

我的迁移

Schema::create('blogs', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('bloggers');
    $table->string('image');
    $table->string('introduction');
    $table->timestamps();
});

【问题讨论】:

  • 你确定它在这个条件下通过 $request->hasfile('image') 吗?是的,它将是未定义的,因为它没有通过您的条件。
  • 可以在没有图像的情况下创建Blog 吗??
  • @Rwd 不需要图像...
  • 在这种情况下,我建议您查看laravel.com/docs/master/validation,这样您就无需检查图像是否存在于代码中。
  • @Rwd 是的,我下次再做。

标签: laravel variables laravel-5 controller undefined


【解决方案1】:

为确保您的变量 $fillename 可用,然后将您的代码更改为此

if($request->hasfile('image')){
      $file = $request->file('image');
      $ext = $file->getClientOriginalExtension();
      $filename = time().'.'.$ext;
      $file->move('bloggers/', $filename);

      $blog = Blog::create(
            ['user_id' => $user_id],
            [
                'image'=>$filename,
                'introduction' => $request->introduction,
            ]
        );
}

【讨论】:

  • 但是当我转到页面时出现下一个错误,只是显示了链接...
  • 对不起,我的新错误是关于路线的,所以我会尝试自己修复!谢谢,
【解决方案2】:

您必须在上传器中返回文件地址和名称

public function store(Request $request, User $user_id){

        $user_id = DB::table('users')->where('id', $user_id)->get();
        if($request->hasfile('image')){
            $file = $request->file('image');
            $ext = $file->getClientOriginalExtension();
            $file_name = time().'.'.$ext;
            $file->move('bloggers/', $file_name);
        }


        $blog = Blog::create(
            ['user_id' => $user_id],
            [
                'image'=>"/bloggers/".$file_name,
                'introduction' => $request->introduction,
            ]
        );
        return redirect(route('blogger'));
    }

我认为它的工作

【讨论】:

  • 这将如何防止$file_name 未定义?
【解决方案3】:

您尝试访问超出范围的变量。通过在 if 函数中声明它使其成为外部变量,如下面的代码第 2 行所示。 ...

public function store(Request $request, User $user_id){
        $file_name="";
        $user_id = DB::table('users')->where('id', $user_id)->get();
        if($request->hasfile('image')){
            $file = $request->file('image');
            $ext = $file->getClientOriginalExtension();
            $file_name = time().'.'.$ext;
            $file->move('bloggers/', $file_name);
        }


        $blog = Blog::create(
            ['user_id' => $user_id],
            [
                'image'=>"/bloggers/".$file_name,
                'introduction' => $request->introduction,
            ]
        );
        return redirect(route('blogger'));
    }

...

【讨论】:

  • 对不起,我收到了一个新错误,SQLSTATE[23000]: Integrity constraint violation:.
  • 但是谢谢你的帮助!
猜你喜欢
  • 2015-10-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2019-09-21
  • 2018-08-26
  • 2017-04-21
相关资源
最近更新 更多