如何将数据从控制器 blade 发送到组件 livewire
How to send data from controller blade to component livewire
知道的人 LIVEWIRE-LARAVEL ‼我需要一些在 livewire 上工作的代码(表格更新)
我正在尝试传递数据(产品)
:来自控制器(布局内容)
到 livewire 组件 (product-update)
但它不起作用,有时它无法识别“$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) 为了测试提交,
但是表格没有提交!!!它重新加载并 return 使用 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);
}
请帮帮我!
您应该在控制器视图(blade 文件)中调用 LiveWire 组件并通过它传递数据(产品)。
我从不在使用 livewire 时接触 laravel 控制器,因为它有自己的 Class。如果您想检索产品数据,只需制作一个 livewire 组件并将其传递给视图即可。像这样的东西(抱歉太可怕了)
ProductIndex.php
...
protected $listeners = ['productUpdated'];
public function productUpdated() {
// Just Blank
}
public function render() {
return view('your-livewire-product-index', ['products' => Product::all());
}
Blade产品索引
<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>
知道的人 LIVEWIRE-LARAVEL ‼我需要一些在 livewire 上工作的代码(表格更新) 我正在尝试传递数据(产品) :来自控制器(布局内容) 到 livewire 组件 (product-update)
但它不起作用,有时它无法识别“$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) 为了测试提交, 但是表格没有提交!!!它重新加载并 return 使用 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);
}
请帮帮我!
您应该在控制器视图(blade 文件)中调用 LiveWire 组件并通过它传递数据(产品)。
我从不在使用 livewire 时接触 laravel 控制器,因为它有自己的 Class。如果您想检索产品数据,只需制作一个 livewire 组件并将其传递给视图即可。像这样的东西(抱歉太可怕了)
ProductIndex.php
...
protected $listeners = ['productUpdated'];
public function productUpdated() {
// Just Blank
}
public function render() {
return view('your-livewire-product-index', ['products' => Product::all());
}
Blade产品索引
<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>