我正在嘗試學習 Laravel Livewire,并且我在引導模式中有一個表單,我正在嘗試通過 livewire 進行更新。我只是在驗證步驟之后添加資料,甚至沒有注冊我正在發送資料中的任何更改。當我查看網路請求時,它是相同的。除了發送表單中已經填充的內容之外,就好像沒有表單資料一樣。我瀏覽了檔案,但我無法弄清楚我做錯了什么。這應該是 Livewire 中最簡單的事情,但它不起作用。
這是我的組件:
class LocationInfo extends Component
{
public $states;
public Location $location;
protected $rules = [
'location.name' => ['required', 'string', 'max:150'],
'location.client_id' => ['required', 'integer', 'exists:clients,id'],
'location.email' => ['required', 'string', 'email', 'max:255'],
'location.phone' => 'required|string|min:12|max:12|regex:/^\d{3}\-\d{3}\-\d{4}$/|',
'location.address' => ['required', 'string', 'max:150'],
'location.city' => ['required', 'string', 'max:150'],
'location.state' => ['required', 'string', 'max:2'],
'location.zip_code' => ['required', 'string', 'max:5'],
'location.website_url' => ['required', 'url'],
];
public function mount($location)
{
$this->location = $location;
$this->states = USState::all();
}
public function render()
{
return view('livewire.location-info');
}
public function save()
{
$validatedData = $this->validate();
dd($validatedData);
$this->location->save($validatedData);
}
}
這是我的表格(為簡潔起見):
<div class="modal fade" id="location_info_modal" tabindex="-1" aria-labelledby="location_info_modal" aria-hidden="true">
<div class="modal-dialog modal-lg">
<form wire:submit.prevent="save" id="location_info_form"> {{-- class="" action="/locations/{{ $location->id }}"> --}}
<div hljs-string">">
<div hljs-string">">
<div id="modal_header" hljs-string">">
<h5 hljs-number">3">Edit Location Info</h5>
</div>
<button type="button" hljs-string">" data-bs-dismiss="modal"
aria-label="btn-close"></button>
</div>
<div hljs-string">">
<div hljs-string">">
@csrf
<div hljs-number">3 col-md-8">
<label for="location.name" hljs-string">">Location Name</label>
<input wire:model="location.name" type="text" hljs-string">" id="name" placeholder="name" name="name" data-inputmask-regex="[A-Za-z0-9#.,''-() &] ">
@error('location.name') <span class="error">{{ $message }}</span> @enderror
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-primary save_btn" id="location_info_save">Save</button>
</div>
</div>
</form>
</div>
</div>
這里是我呼叫組件的地方:
<livewire:location-info :location="$location"/>
請幫助我了解這里發生了什么。我已經嘗試洗掉Location屬性宣告中的型別提示,但這并沒有改變任何東西。
dd() 中顯示的資料實際上是我的模型記錄,沒有任何更改。它還反映了當前甚至不在表單中的所有其他模型欄位,因此有些地方不對勁。
我嘗試將Request $request作為引數添加到save()方法簽名中,然后將值轉儲到那里,它也只是模型值,而不是表單提交。
這是引導程式嗎?我假設我正在使用引導程式,在這種情況下,引導程式模式與 Livewire 無關,但我不知道為什么這不起作用。
uj5u.com熱心網友回復:
您沒有正確設定 $rules?嘗試從 location.name 更新到 location_name,然后確保這些與輸入上的名稱屬性匹配。目前您的輸入有 name="name" 這是不正確的。
應該是這樣的??
public $location_name;
public $location_client_name;
public $location_email;
public $location_phone;
public $location_address;
public $location_city;
public $location_state;
public $location_zip_code;
public $location_website_url
public $states;
public Location $location;
protected $rules = [
'location_name' => ['required', 'string', 'max:150'],
'location_client_id' => ['required', 'integer', 'exists:clients,id'],
'location_email' => ['required', 'string', 'email', 'max:255'],
'location_phone' => 'required|string|min:12|max:12|regex:/^\d{3}\-\d{3}\-\d{4}$/|',
'location_address' => ['required', 'string', 'max:150'],
'location_city' => ['required', 'string', 'max:150'],
'location_state' => ['required', 'string', 'max:2'],
'location_zip_code' => ['required', 'string', 'max:5'],
'location_website_url' => ['required', 'url'],
];
public function mount($location)
{
$this->location = $location;
$this->states = USState::all();
}
public function render()
{
return view('livewire.location-info');
}
public function save()
{
$validatedData = $this->validate();
dd($validatedData);
$this->location->save($validatedData);
}
}
然后視圖更新輸入為:等...
<label for="location_name" class="form-label">Location Name</label>
<input wire:model="location_name" type="text" class="form-control" id="location_name" placeholder="name" name="location_name" data-inputmask-regex="[A-Za-z0-9#.,''-() &] ">
@error('location_name') <span class="error">{{ $message }}</span> @enderror
uj5u.com熱心網友回復:
您需要添加wire:click="save"到您的提交按鈕。
<button wire:click="save" type="submit" class="btn btn-primary save_btn" id="location_info_save">Save</button>
uj5u.com熱心網友回復:
在嘗試了我能想到的所有基本方法之后,我終于嘗試洗掉我在輸入欄位上使用的掩碼,這顯然導致了一些沖突,因為一旦我洗掉它,它就可以正常作業。顯然 Livewire 不能很好地與 javascript 庫配合使用。
從我的輸入欄位中洗掉它后,它可以作業:
data-inputmask-regex="[A-Za-z0-9#.,''-() &] "
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432547.html
標籤:拉拉维尔 laravel-8 laravel-livewire
上一篇:LaravelSpatie/Laravel-Permission獲取角色資料失敗
下一篇:會話在PHP中無法正常作業
