Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Variável $brand não é reconhecida no form.blade.php

Variável não é reconhecida no form.blade.php, sendo que está sendo enviada para edit.blade.php. Na Controller está sendo enviada conforme abaixo:

public function edit(Vehicle $vehicle){
    $brands = Brand::all();
    return view('vehicles.edit')->with('vehicle', $vehicle)->with('brand', $brands);
}

edit.blade.php

<x-layout title="Editar Veículo '{!!$vehicle->descricao!!}'">
    <x-vehicles.form :action="route('vehicles.update', $vehicle->id)" :descricao="$vehicle->descricao" :brand_id="$vehicle->brand_id"  :placa="$vehicle->placa" :update="true"/>
</x-layout>

form.blade.php

<form action="{{ $action }}" method="post">
        <div class="mb-3">
            <label for=placa class="form-label">Placa:</label>
            <input type="text" 
                   id="placa" 
                   autofocus
                   name="placa" 
                   class="form-control"
                   @isset($placa) value="{{ $placa }}"@endisset>
            <label for=descricao class="form-label">Descrição:</label>
            <input type="text" 
                   id="descricao" 
                   name="descricao" 
                   class="form-control"
                   @isset($descricao) value="{{ $descricao }}"@endisset>
            <label for=marca class="form-label">Marca:</label>

            <div class="form-control">
                   <strong>Marca</strong></br>
                   <select name="brand_id">
                   @foreach($brands as $brand)
                       <option value="{{ $brand->id }}"
                           @if($brand->id == $vehicle->brand_id)
                               selected="selected"
                           @endif>
                           {{ $brand->descricao }}
                       </option>
                   @endforeach
                   </select>
            </div>

            <label for=modelo class="form-label">Modelo:</label>
            <input type="text" 
                   id="modelo" 
                   name="modelo" 
                   class="form-control"
                   @isset($modelo) value="{{ $modelo }}"@endisset>
        </div>
        <button class="btn btn-primary">Adicionar</button>
</form>

Como fazer para que o escopo da variável também possa ser utilizada no form.blade.php?

4 respostas

Boa noite!!!

Não lembro muito do blade mas acho que o problema está aqui: ->with('brand', $brands); O primeiro parametro do with é o teu identificador no layout e o segundo os parametros, correto? Então acho que deveria estar no plural tb 'brands'

Veja se é isso, espero ter contribuído!!!! Abraços

Rodrigo, obrigado pela atenção. Fiz o que falou, coloquei no plural também, mas o mesmo erro persiste:

**ErrorException

Undefined variable $brands **

<div class="form-control">
         <strong>Marca</strong></br>
         <select name="brand_id">
                 @foreach($brands as $brand)  Erro nessa linha
                     <option value="{{ $brand->id }}"
                 @if($brand->id == $vehicle->brand_id)
                     selected="selected"
                 @endif>
                 {{ $brand->descricao }}
             </option>
         @endforeach
         </select>
  </div>

PHP 8.2.4 Laravel 10.34.2

solução!

Consegui resolver com a linha de código abaixo:

view::share('brands', $brands);

Documentação:

https://laravel.com/docs/10.x/views#sharing-data-with-all-views

PHP 8.2.4 Laravel 10.34.2

Entendi....

mas o que eu falei não era no form.blade, acho que a solução estava no código abaixo, sem precisar dessa nova alternativa:

return view('vehicles.edit')->with('vehicle', $vehicle)->with('brands', $brands);

No teu código está no singular e deveria ser no plural.