You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel条件调用视图报错:htmlspecialchars()期望字符串而非对象

问题排查与解决方案

错误原因分析

  1. 查询返回对象而非字符串:视图第一行使用{{$contract_type = \App\Contract::where(['location_type' => $contract->location_type])}},where方法返回的是Eloquent查询构建器对象,而非预期的字符串类型;同时{{ }}会将变量内容输出到页面,当尝试输出对象时,htmlspecialchars()函数无法处理对象,直接抛出错误。
  2. 字段名拼写错误:模型中存储合同类型的字段是type_location,但视图中误写为location_type,导致查询逻辑无效。
  3. 条件判断语法错误:@if ($contract_type == contract_1)中contract_1未加引号,会被PHP解析为常量而非字符串,导致判断逻辑失效。
  4. Blade指令缺失:else分支中extends('layouts.contract_2')缺少@符号,不符合Blade语法规范。

修正后的getpdf.blade.php代码

{{-- 直接使用当前$contract对象的type_location字段,无需重复查询数据库 --}}
@extends('layouts.' . $contract->type_location)

@section('content')
<div class="content">
    <div class="row">
        <div class="col-lg-12">
            <div class="panel panel-default">
                <div class="panel-heading">
                    {{ trans('global.show') }} {{ trans('cruds.contract.title') }}
                </div>
                <div class="panel-body">
                    <div class="form-group">
                        <div class="form-group">
                            <a class="btn btn-default" href="{{ route('admin.contracts.index') }}">
                                {{ trans('global.back_to_list') }}
                            </a>
                            <a class="btn btn-default" href="{{ route('admin.contracts.getpdf', $contract->id) }}">
                                {{ trans('global.datatables.pdf') }}
                            </a>
                        </div>
                        <table class="table table-bordered table-striped">
                            <tbody>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.id') }}
                                    </th>
                                    <td>
                                        {{ $contract->id }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.user') }}
                                    </th>
                                    <td>
                                        {{ $contract->user }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.type_location') }}
                                    </th>
                                    <td>
                                        {{ App\Contract::TYPE_LOCATION_SELECT[$contract->type_location] ?? '' }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.full_name') }}
                                    </th>
                                    <td>
                                        {{ $contract->full_name }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.dob') }}
                                    </th>
                                    <td>
                                        {{ $contract->dob }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.identity') }}
                                    </th>
                                    <td>
                                        {{ $contract->identity }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.address') }}
                                    </th>
                                    <td>
                                        {{ $contract->address }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.estate_type') }}
                                    </th>
                                    <td>
                                        {{ $contract->estate_type->estate_type ?? '' }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.estate_location') }}
                                    </th>
                                    <td>
                                        {{ $contract->estate_location }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.rent_period') }}
                                    </th>
                                    <td>
                                        {{ $contract->rent_period }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.start_rent_date') }}
                                    </th>
                                    <td>
                                        {{ $contract->start_rent_date }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.end_rent_date') }}
                                    </th>
                                    <td>
                                        {{ $contract->end_rent_date }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.equipments') }}
                                    </th>
                                    <td>
                                        {{ $contract->equipments }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.superficie') }}
                                    </th>
                                    <td>
                                        {{ $contract->superficie }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.etage') }}
                                    </th>
                                    <td>
                                        {{ $contract->etage }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.porte') }}
                                    </th>
                                    <td>
                                        {{ $contract->porte }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.charges') }}
                                    </th>
                                    <td>
                                        {{ $contract->charges }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.garantie') }}
                                    </th>
                                    <td>
                                        {{ $contract->garantie }}
                                    </td>
                                </tr>
                                <tr>
                                    <th>
                                        {{ trans('cruds.contract.fields.attachment') }}
                                    </th>
                                    <td>
                                        @foreach($contract->attachment as $key => $media)
                                            <a href="{{ $media->getUrl() }}" target="_blank">
                                                {{ trans('global.view_file') }}
                                            </a>
                                        @endforeach
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        <div class="form-group">
                            <a class="btn btn-default" href="{{ route('admin.contracts.index') }}">
                                {{ trans('global.back_to_list') }}
                            </a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

关键修改说明

  1. 直接使用现有对象字段:删除无效的数据库查询,直接通过$contract->type_location获取合同类型,拼接成对应的布局视图路径,简化逻辑同时避免对象输出错误。
  2. 修复字段名拼写:将所有误写的location_type修正为模型中定义的type_location。
  3. 简化视图继承逻辑:通过字符串拼接直接动态加载对应布局,替代冗余的if-else判断,代码更简洁高效。
  4. 修正Blade语法:确保所有指令符合Blade规范,避免语法错误。

内容的提问来源于stack exchange,提问作者Zack Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:10:30