Laravel-Backpack / CRUD

Build custom admin panels. Fast!
https://backpackforlaravel.com
MIT License
3k stars 880 forks source link

[Bug] PHP Deprecated: Optional parameter HasForm #5458

Closed adriallongarriu closed 4 months ago

adriallongarriu commented 4 months ago

Bug report

What happened

I upload a new project to a new server with 8.2.11 On acces the admin created a error.log with the error:

PHP Deprecated:  Optional parameter $id declared before required parameter $formLogic is implicitly treated as a required parameter in .../vendor/backpack/crud/src/app/Http/Controllers/Operations/Concerns/HasForm.php on line 104

Line 104

public function formAction(?int $id = null, callable $formLogic)
{
//
}

What I've already tried to fix it

I followed https://php.watch/versions/8.0/deprecate-required-param-after-optional image

The error was reptining multiple times and for not create a larage log flies i temporary i changed vendor to:

public function formAction(?int $id, callable $formLogic)
{
//
}

Is it a bug in the latest version of Backpack?

Yes

Backpack, Laravel, PHP, DB version

LARAVEL VERSION:

10.43.0.0

BACKPACK PACKAGE VERSIONS:

backpack/basset: 1.2.2 backpack/crud: 6.6.2 backpack/generators: v4.0.3 backpack/permissionmanager: 7.1.1 backpack/pro: 2.1.2 backpack/settings: 3.1.0 backpack/theme-tabler: 1.2.0

jcastroa87 commented 4 months ago

Hello @adriallongarriu, thanks for reporting this. I will ask @pxpm to check on this situation.

Cheers.

pxpm commented 4 months ago

Hey @adriallongarriu thanks for the report.

Indeed we need to make a breaking change there to change the order of those parameters.

I've created #5459 to address that.

In preparation for that BC I've also created https://github.com/Laravel-Backpack/Generators/pull/204

The new generated FormOperations will now be using named parameters, so it will not be a breaking change if you generate your forms after I merge and tag that PR in a few moments. If you want to prepare yourself and avoid having a BC in forms that you already created, you can also use the named parameters in $this->formAction().

Thanks in advance for the report 🙏