(1/1)ErrorException未定义的偏移量:1

时间:2017-08-13 06:10:00

标签: php laravel laravel-5

我试图用以下控制器更新我的userprofile,但问题是如果我只更新配置文件图片它显示上述错误..但是如果我更新它成功更新的每个值。如何在不更新每个值的情况下更新userProfile:

public function updateUser(Request $request)
{
    $this->validate($request, [
        'profile_picture' => 'dimensions:width=400,height=400',
        'cover_picture' => 'dimensions:width=800,height=400',
        'avatar' => 'dimensions:width=80,height=80',            
        ]);

if (\Auth::check())
{
    $user= User::find(\Auth::id());
}

$files= [];
if($request->file('profile_picture'))   $files[] = $request->file('profile_picture');
if($request->file('cover_picture'))   $files[] = $request->file('cover_picture');
if($request->file('avatar'))   $files[] = $request->file('avatar');

foreach($files as $file)
    {
        if(!empty($file))
        {
            $filename = time().str_random(20). '.' . $file->getClientOriginalExtension();
            $file->move('users/',$filename);      
            $filenames[]=$filename;
        }
    }

$user->profile_picture = $filenames[0];
$user->cover_picture = $filenames[1];
$user->avatar = $filenames[2];

$user->save();
return redirect::back()->with('Warning',"Profile Updated Successfully");

}

2 个答案:

答案 0 :(得分:1)

我不认为使用像这样的位置阵列是明智的,正如你已经发现的那样,如果有人只想更新他们的头像会怎么样。我觉得您对$files[]的分配是多余的,您可以直接进入处理代码。

基本上你当前的实现意味着$files可以是一个可变长度,你怎么知道哪个是0,1或2等?

通过我的方法,代码现在循环遍历每种类型的图片,并使用$user->$type直接通过相同的匹配类型属性将其分配给用户。

foreach( array( 'profile_picture', 'cover_picture', 'avatar' ) as $type)
{
    if( $request->file( $type ) )
    {
        $filename = time() . str_random(20) . '.' . $request->file( $type )->getClientOriginalExtension();
        $request->file( $type )->move( 'users/', $filename );      
        $user->$type = $filename;
    }
}

如果您发现需要将不同的$ source映射到$ type变量,则可以使用其他数组索引执行此操作...

foreach( array(
  'profile_picture' => 'profile_picture',
  'cover_picture' => 'cover_picture',
  'avatar' => 'avatar'
  ) as $source => $type)
{
    if( $request->file( $source ) )
    {
        $filename = time() . str_random(20) . '.' . $request->file( $source )->getClientOriginalExtension();
        $request->file( $source )->move( 'users/', $filename );      
        $user->$type = $filename;
    }
}

答案 1 :(得分:-4)

我终于想出了一个解决方案配偶。

您可以尝试包含$ filenames的var_dump。我想$ filenames [1]根本不存在。