Laravel Typer错误:传递的参数1必须是一个实例.字符串给定



我正在尝试更新客户电话号码的值,客户有很多电话,但是当我尝试更新电话号码时,我会收到此错误:

类型错误:参数1传递给 app repositories backend cliente clienterepository :: updatetelefono(( 必须是app models cliente clible,字符串给定的实例, 被称为 /applications/mamp/htdocs/sgc18/app/http/controllers/backend/cliente/clientee/clientecontroller.php 在第159行

在我的clientererepository上,我有此代码:

public function updateTelefono(Cliente $cliente, Telefono $telefono, array $data) : Telefono
{
    return DB::transaction(function () use ($cliente, $telefono, $data) {
        if ($telefono->update([
            'telefono' => $data['telefono'],
            'tipo_telefono_id' => $data['tipo_telefono_id'],
            'comentario' => $data['comentario']
        ])) {
            event(new ClienteTelefonoUpdated($telefono));
            return $telefono;
        }
        throw new GeneralException(__('Hubo un problema al actualizar el teléfono. Intentelo de nuevo.'));
    });
}

在我的客户端控制器中,我有此代码:

public function updateTelefono(ClienteRequest $request, $cliente_id, $telefono_id)
{
    $cliente = Cliente::findOrfail($cliente_id);
    $telefono = Telefono::findOrFail($telefono_id);
    $this->clienteRepository->updateTelefono($cliente, $telefono, $request->only(
        'telefono',
        'tipo_telefono_id',
        'comentario'
    ));
    return redirect()->to(route('admin.clientes.show', $cliente_id) . '#telefonos')->withFlashSuccess(__('Teléfono actualizado correctamente.'));
}

这是更新的途径:

Route::patch('{id}/telefono/{tid}/update', 'ClienteController@updateTelefono')->name('telefono.update');

admin/cliberes/{id}/telefono/{tid}/update |admin.clientes.telefono.update |App http Controllers Backend Cliente Clientecontroller@UpdateTeTelefono

这是我的编辑视图:

@extends('backend.layouts.app')
@section('title', __('Administración de Clientes') . ' | ' . __('Editando Teléfono de Cliente') . ' ' . $cliente->nombre_completo . ' | ' . app_name())
@section('breadcrumb-links')
    @include('backend.clientes.includes.breadcrumb-links')
@endsection
@section('content')
<div class="card">
    <div class="card-body">
        <div class="row">
            <div class="col">
                <h4 class="card-title mb-0">
                    {{ __('Administración de Clientes') }}
                    <small class="text-muted">({{ __('Editando Teléfono de Cliente') }} <b>{{ $cliente->nombre_completo }}</b>)</small>
                </h4>
            </div>
        </div>
        <hr />
        {{ html()->modelForm($tel, 'PATCH', route('admin.clientes.telefono.update', [$cliente->id, $tel->id]))->open() }}
        <div class="row mt-4 mb-4">
            <div class="col">
                {{ html()->label(__('Número de Teléfono'))->for('telefono') }}
                {{ html()->text('telefono')
                ->class('form-control')
                ->attribute('maxlength', 191) }}
            </div>
        </div>
        <div class="row mt-4 mb-4">
            <div class="col">
                {{ html()->label(__('Tipo Teléfono'))->for('tipo_telefono_id') }}
                {{ html()->hidden('cliente_id')->value($cliente->id) }}
                <select class="form-control tipoTelefono" name="tipo_telefono_id">
                    @if(isset($tipo_telefonos) && $tipo_telefonos->count() > 0)
                        @foreach($tipo_telefonos as $i)
                            <option value="{{ $i->id }}" @if($i->id == old('tipo_telefono_id', $tel->tipo_telefono_id)) selected @endif>{{ $i->descripcion }}</option>
                        @endforeach
                    @endif
                </select>
            </div>
        </div>
        <div class="row mt-4 mb-4">
            <div class="col">
                {{ html()->label(__('Comentario'))->for('comentario') }}
                {{ html()->textarea('comentario')->class('form-control')->attribute('rows', 4)->attribute('noresize') }}
            </div>
        </div>
    </div>
    <div class="card-footer">
        <div class="row">
            <div class="col">
                {{ form_cancel(route('admin.clientes.show', $cliente->id) . '#telefonos', __('Cancelar')) }}
            </div><!--col-->
            <div class="col text-right">
                {{ form_submit(__('Actualizar')) }}
            </div><!--row-->
        </div><!--row-->
    </div><!--card-footer-->
</div>
{{ html()->closeModelForm() }}
@endsection
@push('after-scripts')
    <script type="text/javascript">
        $(document).ready(function(){
            $('.tipoTelefono').select2();
        });
    </script>
@endpush

看来,您将$cliente_id作为客户端的ID传递,而不是作为客户端的实例。

尝试首先找到客户:

public function updateTelefono(ClienteRequest $request, $cliente_id, $telefono_id)
{
    $cliente = AppModelsClienteCliente::find($cliente_id);
    $telefono = AppModelsClienteTelefono::find($telefono_id);
    $this->clienteRepository->updateTelefono($cliente, $telefono, $request->only(
        'telefono',
        'tipo_telefono_id',
        'comentario'
    ));
    return redirect()->to(route('admin.clientes.show', $cliente_id) . '#telefonos')->withFlashSuccess(__('Teléfono actualizado correctamente.'));
}

相关内容

  • 没有找到相关文章

最新更新