Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

sanne_v_leeuwen's avatar

Rules shows only required

I have a form in livewire and i have a RequestForm. The rules display well in the dd. but he only shows the requires rules and not other rules.

<?php

namespace Modules\Webshop\Http\Livewire;

use Livewire\Component;
use Modules\Webshop\Http\Requests\DataRequest;
use Auth;

class CartData extends Component{

    public $name;
    public $street;
    public $housenumber;
    public $addition;
    public $postal_code;
    public $city;
    public $country;
	
	public $bill_name;
    public $bill_street;
    public $bill_number;
    public $bill_addition;
    public $bill_postal_code;
    public $bill_city;
    public $bill_country;
	
	
	public $username;
	public $email;
	public $password;
	public $password_confirmation;
	
	protected $listeners = ['information' => 'information'];
	
    public function submit(DataRequest $req){	

		dd('no rules');
    }

    public function render(){
        return view('webshop::livewire.cart.data');
    }
}

namespace Modules\Webshop\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Auth;

class DataRequest extends FormRequest{
    public function rules(){
		$rules = [];
		if(!Auth::check()){
				$rules['name'] = 'required';
				$rules['street'] = 'required';
				$rules['housenumber'] = 'required|numeric';
				$rules['postal_code'] = 'required';
				$rules['city'] = 'required';
				$rules['country'] = 'required|not_in:select';
			
			if(isset($_COOKIE['account'])){
				$rules['username'] = 'required|min:6|unique:users,username';
				$rules['password'] = 'required|min:8';
				$rules['password_confirmation'] = 'required|same:password';
			}
		}
		if(isset($_COOKIE['bill'])){
			$rules['bill_name'] = 'required';
			$rules['bill_street'] = 'required';
			$rules['bill_housenumber'] = 'required|numeric';
			$rules['bill_postal_code'] = 'required';
			$rules['bill_city'] = 'required';
			$rules['bill_country'] = 'required|not_in:select';

		}
		//dd($rules);
		return $rules;
    }
    public function attributes(){
        return [
            'postal_code' => __('Zip Code'),
            'housenumber' => __('Housenumber'),
			
			'bill_name' => __('Name'),
			'bill_street' => __('Street'),
			'bill_housenumber' => __('Housenumber'),
			'bill_postal_code' => __('Zip Code'),
			'bill_city' => __('City'),
			'bill_city' => __('Country'),
        ];
    }
}
<div>
<form wire:submit.prevent="submit">
<div class="h4 text-primary">{{__('Delivery address')}}</div><hr></hr>
	@if(Auth::check())
		@if(!empty($info))
			{{$info->street}} {{$info->number}}{{$info->addition}}<br/>
			{{$info->postal_code}} {!!$info->city!!}<br/>
			{{__($info->coun->country)}}
		@else
			{{__('No delivery address has been selected')}}
		@endif

		<br/><br/>
		@if($showCheck)
			<input type="checkbox" wire:model="changeInfo" wire:click="openInfo" id="address"> {{__('Change')}}<br/><br/>
		@endif
	@endif
	@if($showInfo)
	<select class="form-control" wire:click="changeInfo($event.target.value)">
		<option value="0">{{__('Select ...')}}</option>
			@foreach($address as $add)
				<option value="{{$add->id}}">{!!$add->street!!} {{$add->number}}{{$add->addition}}, {{$add->postal_code}}, {!!$add->city!!}, {{$add->coun->country}}</option>
			@endforeach
			<option value="other">{{__('Other ...')}}</option>
	</select>
	@endif
	@if($addInfo)
	<div class="row mt-3">
			<div class="col-md-12">
				<label>{{__('Name')}}</label>
				<input type="text" wire:model="name" class="form-control">
				@error('name') <span class="text-danger small">{{ $message }}</span> @enderror
			</div>
	</div>
		<div class="row">
			<div class="col-md-6">
				<label>{{__('Street')}}</label>
				<input type="text" wire:model="street" class="form-control">
				@error('street') <span class="text-danger small">{{ $message }}</span> @enderror
			</div>
			<div class="col-md-3">
			<label>{{__('Housenumber')}}</label>
				<input type="text" wire:model="housenumber" class="form-control">
				@error('housenumber') <span class="text-danger small">{{ $message }}</span> @enderror
			</div>
			<div class="col-md-3">
			<label>{{__('Addition')}}</label>
				<input type="text" wire:model="addition" class="form-control">
				@error('addition') <span class="text-danger small">{{ $message }}</span> @enderror
			</div>
		</div>
		<div class="row">
			<div class="col-md-4">
				<label>{{__('Postal Code')}}</label>
				<input type="text" wire:model="postal_code" class="form-control">
				@error('postal_code') <span class="text-danger small">{{ $message }}</span> @enderror
			</div>
			<div class="col-md-4">
			<label>{{__('City')}}</label>
				<input type="text" wire:model="city" class="form-control">
				@error('city') <span class="text-danger small">{{ $message }}</span> @enderror
			</div>
			<div class="col-md-4">
			<label>{{__('Country')}}</label>
				<select class="form-control" wire:model="country" wire:click="changeCountry($event.target.value)">
					<option value="select">{{__('Select ...')}}</option>
					@foreach($options as $key => $val)
						<option value="{{$key}}">{{$val}}</option>
					@endforeach
				</select>
				@error('country') <span class="text-danger small">{{ $message }}</span> @enderror
			</div>
		</div>
	@endif
	@if(env('WS_INVOICE') == 1)
<div class="h4 mt-3 text-primary">{{__('Billing address')}}</div><hr></hr>
<input type="checkbox" id="same" wire:click="openBill" wire:model="same"> {{__('Different as delivery address')}}<br/><br/>

		@if($showBill)
			@auth
				@if(!empty($invoice))
						{{$invoice->street}} {{$invoice->number}}{{$invoice->addition}}<br/>
						{{$invoice->postal_code}} {!!$invoice->city!!}<br/>
						{{__($invoice->coun->country)}}
				@else
					{{__('No billing address has been selected')}}
				@endif
				<br/><br/>
				@if($showBillCheck)
					<input type="checkbox" wire:model="openBillInfo" wire:click="openBillInfo" id="address"> {{__('Change')}}<br/><br/>
				@endif
			@endauth
		@if($showBillInfo)
		<select class="form-control" wire:click="changeBill($event.target.value)">
			<option value="0">{{__('Select ...')}}</option>
				@foreach($invoices as $inv)
					<option value="{{$inv->id}}">{!!$inv->street!!} {{$inv->number}}{{$inv->addition}}, {{$inv->postal_code}}, {!!$inv->city!!}, {{$inv->coun->country}}</option>
				@endforeach
				<option value="other">{{__('Other ...')}}</option>
		</select>
		@endif
		@if($addBill)
			<div class="row  mt-3">
				<div class="col-md-12">
					<label>{{__('Name')}}</label>
					<input type="text" wire:model="bill_name" class="form-control">
					@error('bill_name') <span class="text-danger small">{{ $message }}</span> @enderror
				</div>
			</div>
			<div class="row">
				<div class="col-md-6">
					<label>{{__('Street')}}</label>
					<input type="text" wire:model="bill_street" class="form-control">
					@error('bill_street') <span class="text-danger small">{{ $message }}</span> @enderror
				</div>
				<div class="col-md-3">
				<label>{{__('Housenumber')}}</label>
					<input type="text" wire:model="bill_housenumber" class="form-control">
					@error('bill_housenumber') <span class="text-danger small">{{ $message }}</span> @enderror
				</div>
				<div class="col-md-3">
				<label>{{__('Addition')}}</label>
					<input type="text" wire:model="bill_addition" class="form-control">
					@error('bill_addition') <span class="text-danger small">{{ $message }}</span> @enderror
				</div>
			</div>
			<div class="row">
				<div class="col-md-4">
					<label>{{__('Postal Code')}}</label>
					<input type="text" wire:model="bill_postal_code" class="form-control">
					@error('bill_postal_code') <span class="text-danger small">{{ $message }}</span> @enderror
				</div>
				<div class="col-md-4">
				<label>{{__('City')}}</label>
					<input type="text" wire:model="bill_city" class="form-control">
					@error('bill_city') <span class="text-danger small">{{ $message }}</span> @enderror
				</div>
				<div class="col-md-4">
				<label>{{__('Country')}}</label>
					<select class="form-control" wire:model="bill_country">
						<option>{{__('Select ...')}}</option>
						@foreach($options as $key => $val)
							<option value="{{$key}}">{{$val}}</option>
						@endforeach
					</select>
					@error('bill_country') <span class="text-danger small">{{ $message }}</span> @enderror
				</div>
			</div>
		@endif
		@endif
@endif
@if(env('WS_GIFT') == 1)
	<div class="h4 mt-3 text-primary">{{__('Gift')}}</div><hr></hr>
	<input type="checkbox" wire:model="gift" id="gift" wire:click="openGift"> {{__('I would like to have the items wrapped in gift wrap for free.')}}<br/><br/>
	@if($showGift)
	{{__('Personal message:')}}
		<textarea wire:model="message" class="form-control" maxlength="140"></textarea>
		<small>{{__('max 140 characters')}}</small>
	@endif
@endif
<div class="h4 text-primary mt-3">{{__('Remark')}}</div><hr></hr>
	<textarea wire:model="comment" class="form-control" maxlength="140"></textarea>
	<small>{{__('max 140 characters')}}</small>
@guest
<div class="h4 mt-3 text-primary">{{__('Account')}}</div><hr></hr>
<div class="row">
	<div class="col-md-12">
		<label>{{__('Email')}}</label>
		<input type="text" wire:model="email" class="form-control">
		@error('email') <span class="text-danger small">{{ $message }}</span> @enderror
	</div>
</div>
<div class="mt-3">
	<input type="checkbox" wire:model="account" id="account" wire:click="openAccount"> {{__('Create account.')}}
</div>
@if($showAccount)
	<div class="row mt-3">
		<div class="col-md-6">
			<label>{{__('Username')}}</label>
			<input type="text" wire:model="username" class="form-control">
			@error('username') <span class="text-danger small">{{ $message }}</span> @enderror
		</div>
		<div class="col-md-3">
		<label>{{__('Password')}}</label>
			<input type="password" wire:model="password" class="form-control">
			@error('password') <span class="text-danger small">{{ $message }}</span> @enderror
		</div>
		<div class="col-md-3">
		<label>{{__('Confirm password')}}</label>
			<input type="password" wire:model="password_confirmation" class="form-control @error('password_confirmation') is-invalid @enderror" >
			
		</div>
	</div>
@endif
@endguest
<button type="submit" class="btn btn-primary mt-3 mb-3 float-end">{{__('Next')}}</button>
</form>
</div>

0 likes
8 replies
sanne_v_leeuwen's avatar

An example: If i type in the field housenumber "A". I got the messages: The housenumber field is required. But he has to display: The housenumber field must be a number.

Snapey's avatar

from the Livewire docs;

You might be wondering if you can use Laravel's "FormRequest"s. Due to the nature of Livewire, hooking into the http request wouldn't make sense. For now, this functionality is not possible or recommended.

Just move rules to a rules function directly in the component

sanne_v_leeuwen's avatar

Oke thats works better. But now I have a translation issue

I have put the code inside CartData

protected $validationAttributes = [
        'bill_name' => __("name"),
    ];

	public function rules(){
		$rules = [];
		if(!Auth::check()){
				$rules['name'] = 'required';
				$rules['street'] = 'required';
				$rules['housenumber'] = 'required|numeric';
				$rules['postal_code'] = 'required';
				$rules['city'] = 'required';
				$rules['country'] = 'required|not_in:select';
			
			if(isset($_COOKIE['account'])){
				$rules['username'] = 'required|min:6|unique:users';
				$rules['password'] = 'required|min:8';
				$rules['password_confirmation'] = 'required|same:password';
			}
		}
		if(isset($_COOKIE['bill'])){
			$rules['bill_name'] = 'required';
			$rules['bill_street'] = 'required';
			$rules['bill_housenumber'] = 'required|numeric';
			$rules['bill_postal_code'] = 'required';
			$rules['bill_city'] = 'required';
			$rules['bill_country'] = 'required|not_in:select';

		}
		//dd($rules);
		return $rules;
    }

He gives the error message: Constant expression contains invalid operations

Snapey's avatar

you cant have an expression when declaring property

protected $validationAttributes = [
    'bill_name' => __("name"),
];

you need to set the attribute in a function such as mount

sanne_v_leeuwen's avatar

I have put

public $name;

in the top of my script, but it still not working. I have livewire version: 2.12.3

Snapey's avatar
Snapey
Best Answer
Level 122

@sannevanleeuwen why?

protected $validationAttributes;

public function mount() 
{
    $this->$validationAttributes = [
        'bill_name' => __("name"),
    ];
}

Please or to participate in this conversation.