Filament session key improvement #15785
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
In some scenarios, the default behavior of the table session, which keeps track of enabled and disabled columns, does not work as expected.
Issue
In our use case, we have multiple Livewire components in different directories with the same class name, for example:
App\Livewire\Admin\ManualDeployment\Index.php
App\Livewire\Admin\Users\Index.php
App\Livewire\Admin\ExposureRequests\Index.php
Each of these classes has its own Filament table and uses the
InteractsWithForms
trait. However, they all share the same session key from thegetTableColumnToggleFormStateSessionKey
function.Cause
This happens because
class_basename($this::class);
returns"Index"
for all three classes. As a result, when an ID column is marked as->toggable()
, its visibility state is shared across all tables.For example:
This unintended behavior causes inconsistencies when toggling columns across different tables.
Solution
To resolve this, the session key should be based on the fully qualified class name rather than just the basename. However, to prevent overly long session keys—especially in projects with deeply nested directories—we apply hashing.
Previous Implementation
Updated Implementation
By using a SHA-256 hash of the full class name, we ensure that each table gets a unique session key while keeping it manageable in length.
Functional Changes
composer cs
.Let me know if any additional details are needed! 😊