访问讲师面板打款设置页报Illegal string offset 'paytm_enable'错误原因
错误原因
Illegal string offset 'paytm_enable' 错误的本质是:代码尝试用数组键的方式访问字符串类型的变量,PHP不支持该操作所以抛出异常。结合你的代码具体原因如下:
- 你的控制器
instructor方法仅向视图传递了$user变量,没有查询、赋值并传递视图中用到的$isetting变量。未定义的变量在PHP中会被默认识别为空字符串,你用数组键访问空字符串就会触发该报错。 - 即使你通过视图共享、全局中间件等方式提前传递了
$isetting,也大概率是$isetting的赋值逻辑有误,本应为数组的变量被赋值为字符串(比如配置存在JSON字段中,取出后未解码就直接使用)。
解决方案
- 首先在控制器中补充支付配置的查询逻辑,将正确的
$isetting变量传递到视图,示例代码如下(请根据你项目实际的配置存储逻辑调整):
public function instructor() { $user = User::where('id', Auth::User()->id)->first(); // 补充获取站点支付配置的逻辑,以下为示例,替换为你项目的配置查询代码 $isetting = \App\Models\Setting::first()->toArray(); return view('instructor.settings.pay_settings', compact('user', 'isetting')); }
- 确认
$isetting的类型为数组:如果你的配置存储在JSON字段中,取出后需要调用json_decode($配置值, true)转为关联数组后再使用。 - 可在视图层增加容错判断,避免后续逻辑变动再次触发同类报错,推荐使用Laravel自带的
data_get辅助函数,写法如下:
@if(data_get($isetting, 'paytm_enable') == 1) <option {{ $user->prefer_pay_method == 'paytm' ? 'selected' : ''}} value="paytm">{{ __('adminstaticword.Paytm') }}</option> @endif @if(data_get($isetting, 'paypal_enable') == 1) <option {{ $user->prefer_pay_method == 'paypal' ? 'selected' : ''}} value="paypal">{{ __('adminstaticword.Paypal') }}</option> @endif @if(data_get($isetting, 'bank_enable') == 1) <option {{ $user->prefer_pay_method == 'banktransfer' ? 'selected' : ''}} value="bank">{{ __('adminstaticword.BankTransfer') }}</option> @endif
data_get会自动处理变量非数组、指定键不存在的场景,直接返回null,不会抛出异常。
内容的提问来源于stack exchange,提问作者imonDev
相关产品推荐
相关产品推荐

