Как отправить данные с блейд-контроллера на компонент livewire

Люди, которые знают LIVEWIRE-LARAVEL ‼ Мне нужно, чтобы код работал на livewire (обновление формы) Я пытаюсь передать данные (продукты) :От контроллера (содержимое макета) К компоненту livewire (обновление продукта)

Но это не работает, иногда не распознает "$products", иногда отправляет формы не работает из компонента livewire

Так что же такое хорошая практика? Чтобы получить данные о продукте и заставить работать обновление формы из livewire

заранее спасибо

контроллер, который вызывает компонент livewire (как предложил KeyvanGholami):

public function editProduit($idsscatg, $idprd){

    $ss_catg = SousCategorie::find($idsscatg);

    $idsscatgg = $idsscatg;
    $idprdd = $idprd;

    $nom_catg = $ss_catg->nom_catg;

    if( $ss_catg->nom_catg == 'Consommable médico-chirurgical')
    {
        $produit = ProduitConsommable::find($idprdd);
        
        return view('livewire.update-produit',compact('produit', 'idsscatgg', 'nom_catg'));

    }

мой компонент (update-produit) для проверки отправки, НО ФОРМА НЕ ОТПРАВЛЯЕТСЯ!!! он перезагружается и возвращает форму с токеном в URL:

@extends('Admin.layoutAdmin')
@section('content')
{{-- <livewire:update-produit :produits="$produits")> --}}
<div>
    <div class="container-fluid mb-5">
        <div class="row mb-4">
            <div class="col-lg-10">
                <h3> Modifier Produit </h3>
            </div>   
        </div>
        <div class="container">
            <form class="contact-form row" wire:submit.prevent="oui" enctype = "multipart/form-data">                       
                @csrf
                <input type="text" wire:model="oui">
                <div class="container-fluid d-flex align-items-center justify-content-center" >                         
                    <button wire:click="submit" type="submit" class="btn btn-primary">Enregistrer</button>

                </div>
            </form>

        </div>
    </div>
</div>

отправить тестовую форму функции livewire:

public function mount(){

        $cons = SousCategorie::where('nom_catg', 'Consommable médico-chirurgical')->get();
        $equips = SousCategorie::where('nom_catg', 'Equipements')->get();
        $mobs = SousCategorie::where('nom_catg', 'Mobilier médical')->get();
        $landangers = SousCategorie::where('nom_catg', 'Landanger')->get();
        $delacroixs = SousCategorie::where('nom_catg', 'Delacroix-chevalier')->get();
        $divs = SousCategorie::where('nom_catg', 'Divers')->get();

                 
        View::share('cons', $cons);
        View::share('equips', $equips);
        View::share('mobs', $mobs);
        View::share('landangers', $landangers);
        View::share('delacroixs', $delacroixs);
        View::share('divs', $divs);

    }
    public function render($produits)
    {
        return view('livewire.update-produit');   
    }


    public function oui(){

        $oui = $this->oui;
        dd($oui);

    }

Помоги мне, пожалуйста !

Можете ли вы предоставить свой код?

Localhousee 23.04.2022 05:40

Я добавил код к вопросу, пожалуйста, помогите мне. Спасибо

Garèche Siham 23.04.2022 10:55
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
102
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны вызывать компонент LiveWire в представлении контроллера (blade-файл) и передавать данные (продукты) через него.

Привет, я сделал это, но форма не отправляется (она перезагружается и возвращается обратно)

Garèche Siham 23.04.2022 10:46

Я добавил код к вопросу, пожалуйста, помогите мне. Спасибо

Garèche Siham 23.04.2022 10:54

Вы указали здесь wire:submit.prevent="oui", что зарегистрированная форма должна называться , where is this method? You also wrote here wire:click="submit"`, что кнопка формы вызывает метод отправки, где этот метод? Коды несовместимы.

Keyvan Gholami 23.04.2022 14:37

коды лучше рефакторить таким образом: <form class="contact-form row" wire:submit.prevent="submit" enctype = "multipart/form-data"> @csrf <input type="text" wire:model="oui"> <div class="container-fluid d-flex align-items-center justify-content-center" > <button type="submit" class="btn btn-primary">Enregistrer</button> </div> </form> но не забудьте написать метод отправки

Keyvan Gholami 23.04.2022 14:40

метод oui находится в компоненте livewire, сразу после рендеринга(). публичная функция oui(){ $oui = $this->oui; дд ($ уи); } Я думал, что : wire:submit.prevent="oui" вызывает метод "oui" в livewire ?!

Garèche Siham 23.04.2022 14:58

Хорошо. Но до сих пор нет метода отправки! wire:click="submit"

Keyvan Gholami 23.04.2022 15:00

да, я должен поставить type="submit".

Garèche Siham 23.04.2022 15:04

когда вы сказали вызвать компонент LiveWire в представлении контроллера (файл блейда) и передать через него данные (продукты). Это то, что я сделал здесь, верно? return view('livewire.update-produit',compact('produit', 'idsscatgg', 'nom_catg'));

Garèche Siham 23.04.2022 15:06

Даже с кнопкой juste type='submit' тот же самый мысли даже не обнаруживает метод 'oui', который находится в livewire :(

Garèche Siham 23.04.2022 15:23

Видите ли, самый простой способ, который я могу вам сказать, — это вызвать livewire напрямую через маршрут вместо вызова контроллера. ОК?

Keyvan Gholami 23.04.2022 15:26

В предыдущем случае вы должны изменить эту часть:` return view('livewire.update-produit',compact('produit', 'idsscatgg', 'nom_catg')); ` и в файле лезвия представления, который принадлежит контроллеру, вызовите компонент живой проволоки следующим образом:<livewire:update-produit .....">

Keyvan Gholami 23.04.2022 15:30

Хорошо, извини, но я не понимаю, что ты имеешь в виду, я знаю, что сложно понять, что я хочу сделать. у меня есть layoutAdmin с @yield('content') , в этом контенте я хочу использовать компонент livewire. как я могу получить этот компонент livewire здесь!? Очень жаль за беспокойство

Garèche Siham 23.04.2022 15:42
Ответ принят как подходящий

Я никогда не прикасаюсь к контроллеру laravel при использовании livewire, поскольку для этого у него есть собственный класс. Если вы хотите получить данные о продукте, просто создайте компонент livewire и передайте его через представление. Что-то вроде этого (извините, это ужасно)

ProductIndex.php

...
protected $listeners = ['productUpdated'];

public function productUpdated() {
  // Just Blank
}

public function render() {
  return view('your-livewire-product-index', ['products' => Product::all());
}

Индекс продукта лезвия

<div>
  <ul>
     @foreach($products as $product) {
       <li>{{ $product->name }} | <a href="{{ route('products.edit', ['product' => $product->id]) }}">Edit</a></li>
     @endforeach
  </ul>
</div>

Это для обновления

ProductEdit.php

...
public $name, $product_id;
public Product $product;

public function mount() {
  $getProductID = explode('/', url()->current());
  $this->product_id = end($getProductID);
}

public function update() {
   // For simplicity i just update product name
   Product::find($this->product_id)->update(['name' => $this->name]);

   // I call event so ProductIndex listen it and it will auto update the productIndex list
   $this->emit('productUpdated');
}

public function render() {
   return view('livewire-edit-product', ['product' => Product::find($this->product_id)]);
}

Продукт Blade Править

<div>
  <form wire:submit.prevent="update">
    <input type="hidden" wire:model="product_id">
    <input type="text" wire:model="name">
    <input type="submit" value="save">
  </form>
</div>

Другие вопросы по теме