当我在(管理/设置)中进行保存时,出现了(local.ERROR:未定义索引:utubelink)错误 它只是在(管理/设置)其他管理页面工作正常。 我无法进行任何更改,例如更改网站的徽标或名称。
laravel.log
[2022-01-08 15:46:38] local.ERROR: Undefined index: utubelink {"exception":"[object] (ErrorException(code: 0): Undefined index: utubelink at /home/u0462672/new.maxtella.net/app/Http/Controllers/Admin/Settings.php:44)
设置.php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Model\Setting;
use Storage;
class Settings extends Controller {
public function setting() {
return view('admin.settings.settings', ['title' => trans('admin.settings')]);
}
public function setting_save() {
$date=$this->validate(request(), [
'logo'=>v_image(),
],[],
[
'logo'=>trans('admin.logo'),
'icon'=>trans('admin.icon')
]);
$data = request()->except(['_token', '_method']);
if(request()->hasFile('logo')) {
$file = request()->file('logo');
$name = str_random(21) . time() . '.' . $file->getClientOriginalExtension();
$ext = $file->getClientOriginalExtension();
$size = $file->getSize();
$mim = $file->getMimeType();
$realpath = $file->getRealPath();
$file->move(public_path('upload/settings/'), $name);
$data['logo'] = $name;
}
if(request()->hasFile('imgindex')) {
$file = request()->file('imgindex');
$name = str_random(21) . time() . '.' . $file->getClientOriginalExtension();
$ext = $file->getClientOriginalExtension();
$size = $file->getSize();
$mim = $file->getMimeType();
$realpath = $file->getRealPath();
$file->move(public_path('upload/settings/'), $name);
$data['imgindex'] = $name;
}
$data['utubelink'] = $data['utubelink'] != '' ? str_replace("watch?v=", "embed/", $data['utubelink']) : '';
Setting::orderBy('id', 'desc')->update($data);
session()->flash('success', trans('admin.updated_record'));
return redirect(aurl('settings'));
}
}
请问如何解决它?
好的,这就是问题所在。 错误日志明确指出第 44 行有问题。您正在尝试从不存在的 $data 数组访问 utubelink。
$data['utubelink'] = $data['utubelink'] != '' ? str_replace("watch?v=", "embed/", $data['utubelink']) : '';
替换为
$data['utubelink'] = ($data['utubelink'] ?? null) ? str_replace("watch?v=", "embed/", $data['utubelink']) : '';
我希望您使用的是 PHP 7.0 或更高版本。阅读有关 PHP 中的 Null Coalescing Operator 的更多信息,或者直接使用
isset()
。
您可以使用
optional
Laravel 辅助方法来防止此类错误。
$data['utubelink'] = ! blank(optional($data)['utubelink']) ? str_replace("watch?v=", "embed/", $data['utubelink']) : '';