[英](1/1) ErrorException Undefined offset: 1
我试图用以下控制器更新用户配置文件,但问题是如果我仅更新配置文件图片,则显示上述错误。但是,如果我更新每个值,则更新成功。 如何更新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");
}
我不认为使用这样的位置数组是不明智的,正如您所发现的,如果有人只想更新其头像,该怎么办。 我觉得您在$files[]
分配是多余的,您可以直接进入处理代码。
基本上,您当前的实现方式意味着$files
长度可以可变,您如何知道0、1或2等?
使用我的方法,代码现在遍历每种类型的图片,并通过相同的匹配type属性将其直接分配给具有$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;
}
}
我终于想出了一个解决方案的伴侣。
您可以尝试包含$ filenames的var_dump。 我想$ filenames [1]根本不存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.