Laravel-Backpack / CRUD

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

fix: getCurrentEntryId() should return null instead of false #5416

Open MikeyBeLike opened 7 months ago

MikeyBeLike commented 7 months ago

WHY

BEFORE - What was wrong? What was happening before this PR?

getCurrentEntryId() returns false, but ideally it should be returning null if unable to retrieve a value.

There are also several places in the codebase that use this line to get the crud ID:

$id = $this->crud->getCurrentEntryId() ?? $id;

A few files: src/app/Http/Controllers/Operations/DeleteOperation.php src/app/Http/Controllers/Operations/ListOperation.php src/app/Http/Controllers/Operations/ShowOperation.php src/app/Http/Controllers/Operations/UpdateOperation.php

This will never allow you to fallback to $id using null coalescing since it returns false and doesn't return null.

AFTER - What is happening after this PR?

change the return type from false to null, so that we can make use of fallbacks via null coalescing

HOW

How did you achieve that, in technical terms?

update the return type from false -> null

Is it a breaking change?

potentially if people are strictly checking for FALSE but if loosely null is falsy so should be fine

How can we test the before & after?

??

If the PR has changes in multiple repos please provide the command to checkout all branches, eg.:

git checkout "dev-branch-name" &&
cd vendor/backpack/crud && git checkout crud-branch-name &&
cd ../pro && git checkout pro-branch-name &&
cd ../../..
jcastroa87 commented 7 months ago

hi @MikeyBeLike

Since this change could break some compatibility, we will add it to our to-do list for v7. However, we see it as feasible to apply this modification for that version. Thank you for your contribution.

Cheers.

MikeyBeLike commented 7 months ago

hi @MikeyBeLike

Since this change could break some compatibility, we will add it to our to-do list for v7. However, we see it as feasible to apply this modification for that version. Thank you for your contribution.

Cheers.

would it make more sense to update the files that are using nullish coalescing (??) instead? as the current implementation is broken anyway:

e.g instead of

 $id = $this->crud->getCurrentEntryId() ?? $id;

do this:

 $id = $this->crud->getCurrentEntryId() === FALSE ?: $id;
pxpm commented 7 months ago

Hey @MikeyBeLike it would still a BC, because previously if the entry was not found with getCurrentEntry() it wouldn't use the $id, it would be false.

If now we return the $id, people with checks in place for if($entry) would have a BC in their packages. v7 is around the corner, we will def. do this. Either make it return properly null (and keep the calls as they are with the ??), or keep it false but change the calls in our operations, we need to think of the benefits/implications of the change in both sides.

Thanks for your patience 🙏