You probably need to initialize the variable in the constructor.
public function __construct($MaxMark)
{
$this->MaxMark = $MaxMark;
}
And then when you use the rule, you pass it the max mark as a parameter.
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
I have livewire component. In the rules need to create rule where i need to pass the value and validate. LiveWire
<?php
namespace App\Http\Livewire\Teacher;
use Livewire\Component;
use App\Models\InternalMark;
use App\Models\AssignTeacher;
use App\Models\InternalMarkEntry as IntenalMarkEntryModel;
use App\Models\MasterTables\InternalMarkEntryNo;
use App\Rules\Teacher\SecuredMarkRule;
class InternalMarkEntry extends Component
{
public bool $showStudents = false;
public $regulation;
public $batch;
public $section;
public $programme;
public $semester;
public $entry;
public $entries;
public $subject;
public $defaultTotalHour;
public $defaultMaxMark;
public $internalmarks;
public $internalmarksentries;
public AssignTeacher $assignteacher;
public function rules()
{
return [
'entry' => 'required',
'internalmarksentries.*.total_hours' => ['nullable', 'integer'],
'internalmarksentries.*.attended_hours' => ['nullable', 'regex:/^(100|[1-9][0-9]?|0)$|^A$/', 'lte:internalmarksentries.*.total_hours'],
'internalmarksentries.*.max_mark' => ['nullable', 'integer'],
'internalmarksentries.*.secured_mark' => ['nullable', new SecuredMarkRule()],
];
}
protected $messages = [
'internalmarksentries.*.total_hours.nullable' => 'Total Hours is required',
'internalmarksentries.*.total_hours.integer' => 'Must be Integer',
'internalmarksentries.*.attended_hours.nullable' => 'Total Hours is required.',
'internalmarksentries.*.attended_hours.regex' => 'A for Absent',
'internalmarksentries.*.attended_hours.lte' => 'Less than or Equal to Total Hours',
'internalmarksentries.*.max_mark.nullable' => 'Max Mark is required',
'internalmarksentries.*.max_mark.integer' => 'Must be Integer',
'internalmarksentries.*.secured_mark.nullable' => 'Secured Mark is required.',
'internalmarksentries.*.secured_mark.regex' => 'A for Absent',
];
}
SecuredMarkRule
<?php
namespace App\Rules\Teacher;
use Illuminate\Contracts\Validation\Rule;
class SecuredMarkRule implements Rule
{
public $MaxMark;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return ($value <= $this->MaxMark);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Less :attribute than or equal to Max Mark';
}
}
In this rule i need to send the max mark to compare. How to do that. Kindly help me.
Please or to participate in this conversation.