Hi,
With the polyfill, var_dump(mb_strlen(chr(254))) return 0.
With the php8.0-mbstring extension, var_dump(mb_strlen(chr(254))) return 1;
versions : * v1.26.0
Thanks, Alex
Repositories:
(840)
Labels:
(5)
Found 57 issues
First time here? 👋
Welcome to Find a PR.
Find a PR is an open-source site that is built to help developers find projects so that they can submit their very first pull request.
If you're a contributor looking to find a project to contribute to, feel free to browse through the list below.
If you're a maintainer looking to list your project on Find a PR, you can read how to do this in the documentation.
Hi,
With the polyfill, var_dump(mb_strlen(chr(254))) return 0.
With the php8.0-mbstring extension, var_dump(mb_strlen(chr(254))) return 1;
versions : * v1.26.0
Thanks, Alex
alexchuin
18th Oct 2022 @ 12:51
filament/filament
v4.2.2
v12.38.1
v3.6.4
8.4.14
I am filtering widget data by following this guide: https://filamentphp.com/docs/4.x/widgets/overview#filtering-widget-data. The widget data is reloaded before even selecting an option.
I have a Dashboard page with filters form. When opening the select dropdown, it reloads all the widgets available on page and runs all the queries even before showing the select drop down. This delays the select drop down options until all the widget data is reloaded. Once all the queries are run and the request finishes, thats when it populates the options for select field.
I have also tried Filtering widget data using an action modal But same problem with Modal as well, even clicking the Modal action button reloads the data and runs all the queries before even opening the Modal.
Discord Discussion URL: https://discord.com/channels/883083792112300104/1440212167616892999
Clicking on select field should not reload the widget data unless an option selected.
https://github.com/mansoorkhan96/filament-widget-issue
mansoorkhan96
18th Nov 2025 @ 11:03
This will probably be a component to search and select an image from unsplash.
joedixon
12th Oct 2021 @ 19:59
Dashboard showing Operational
Front end showing no issues, but the status seems to still be linked to the incident even if it's closed as fixed
glipschitz
25th Jan 2025 @ 11:01
The goal is to make abstract code based on the package notorm to build a new orm system
ambroisehdn
15th Jun 2022 @ 12:34
What about allowing displaying post-install messages again, eg when running this?
composer recipes the/package
nicolas-grekas
1st Jun 2022 @ 09:13
filament/filament
v3.2.130
v.11.35.0
No response
PHP 8.3
When you have an attribute named length in the database and you use the ->searchable(isIndividual: true) in the tables of filament you get a zero in the search field and the search field is not working. When deleting the zero to filter, the zero keeps coming back.
That the zero is not there and that I am able to filter individual on an attribute named length.
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('id')
->label('ID'),
Tables\Columns\TextColumn::make('length')
->suffix(' mm')
->searchable(isIndividual: true)
->sortable(),
Tables\Columns\TextColumn::make('total_meters')
->suffix(' m')
->sortable(),
Tables\Columns\TextColumn::make('supplier_reference')
->label('Reference')
->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
https://github.com/Geoffry304/filament-length-attribute-issue
No response
Geoffry304
12th Dec 2024 @ 14:30
These messages aren't displayed: https://github.com/symfony/flex/blob/1.x/src/Configurator/DockerComposeConfigurator.php#L51
dunglas
7th Aug 2022 @ 09:33
Hello,
I noticed that there is an incompatibility with the mbstring polyfill and PHP 8.1 / Alpine Linux, which breaks a lot of my projects as soon as the php81-mbstring is not installed, but php81-iconv is installed:
Example:
Warning: iconv(): Wrong encoding, conversion from "ASCII" to "UTF-8//IGNORE" is not allowed in phar:///var/www/localhost/htdocs/phpstan.phar/vendor/symfony/polyfill-mbstring/Mbstring.php on line 736
It looks like //IGNORE is not accepted since echo iconv('UTF-8', 'UTF-8', 'test'); works, while echo iconv('UTF-8', 'UTF-8//IGNORE', 'test'); doesn't
danielmarschall
7th Jan 2022 @ 00:12
There's no Expectation to expect a class to use HasRequestPagination rather than HasPagination.
JonPurvis
28th May 2025 @ 18:02
Hi Developer,
I appreciate your work on this project—it's really well-built and helpful for developers like me. I recently implemented it and found it working great.
However, I noticed that the .fl-wrappe class currently has z-index: 10, which causes it to appear under the header when using a fixed or sticky header. I suggest updating it to z-index: 99999 to ensure proper visibility.
Thanks for your efforts and for sharing this project!
Best regards, Md. Jahangir Alam Rohan.
rohan9222
18th Feb 2025 @ 04:20
using prompt engineering techniques provide enhancement to the Claude service class in the Claude prompt class, creating functions commonly used in Laravel applications. For example, brand builder, seo product optimizer, video and or image captioner, automated chatbots #goodfirstissue
kwakuOfosuAgyeman
5th Jan 2025 @ 05:38
Calling for help from Docker experts. We need to create the best possible docker-compose.yml file for this project. The application requirements are well defined (we use env vars, Webpack Encore, PHP 7.1, Symfony 4.1, SQLite database, etc.) so it should be possible to create that file.
javiereguiluz
21st May 2018 @ 09:37
filament/filament
3
11
V3
php 8
When I upload multiple files, some of the files are missing.
All the files should be present in the desired folder.
Section::make('') ->relationship('result_files') ->schema([ FileUpload::make('attachments') ->columnSpan(12) ->multiple() ->maxSize(100000) ->disk('uploads') ->directory('result_files') ->acceptedFileTypes(["application/pdf"]) ->getUploadedFileNameForStorageUsing(function ($file): string { $fileName = str($file->getClientOriginalName()); $fileName_str = preg_replace('/[^a-zA-Z0-9.]/','',iconv('UTF-8', 'ASCII//TRANSLIT', $fileName)); return (string) str($fileName_str)->prepend(now() . '-'); }) ->downloadable() ->rules([ new MalwareFile] ) ->label(__('application.resource.result_documents')) ]),
FileUpload::make('attachments') ->columnSpan(12) ->multiple() ->maxSize(100000) ->disk('uploads') ->visibility('private') ->directory('application_files') ->getUploadedFileNameForStorageUsing(function ($file): string { $fileName = str($file->getClientOriginalName()); $fileName_str = preg_replace('/[^a-zA-Z0-9.]/','',iconv('UTF-8', 'ASCII//TRANSLIT', $fileName)); return (string) str($fileName_str)->prepend(now() . '-'); }) ->downloadable() ->rules([ new MalwareFile] ) ->label(__('application.resource.application_documents')),
livewire.php
'temporary_file_upload' => [ 'disk' => 'tmp', // Example: 'local', 's3' | Default: 'default' "rules" => "file|mimes:pdf,jpg,jpeg,png,doc,docx,svg,mp4,mp3 | max:100000", // 'rules' => 'max:100000', // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB) 'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp' 'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1' 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs... 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', 'mov', 'avi', 'wmv', 'mp3', 'm4a', 'jpg', 'jpeg', 'mpga', 'webp', 'wma', 'pdf' ], 'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated... ],
https://github.com/guma-005/Filament-issue.git
No response
uma-ac
18th Jun 2024 @ 09:17
Currently, for plural rules, the MessageFormatter polyfills uses the English rules for all locales (it ignores the locale).
To be consistent with what we do in symfony/intl (used by symfony/polyfill-intl-icu to implement NumberFormatter and DateFormatter), we should rather fail explicitly here (using the English rules for a different locale would not give the right result anyway)
stof
23rd Oct 2018 @ 15:34
2.13.1
12.38.1
8.4.14
Swoole
nginx
No response
When registering a singleton via AppServiceProvider, the constructor is triggered only once per worker, as expected. However, when using the attribute-based singleton registration (https://laravel.com/docs/12.x/container#singleton-attribute ), the constructor appears to be triggered once per request scope, behaving more like a scoped service. This may be due to the sandbox being registered earlier.
Check running this part
namespace App\TestService;
use Illuminate\Container\Attributes\Singleton;
#[Singleton]
class TestService
{
public function __construct()
{
echo("__construct TestService");
echo(spl_object_id($this));
}
}
in some controler use
app(\App\TestService\TestService::class);
app(\App\TestService\TestService::class);
app(\App\TestService\TestService::class);
kamil-michalak
15th Nov 2025 @ 10:56
This polyfill should be implemented in 2 places:
symfony/polyfill-intl-graphemesymfony/polyfill-php85, only when the intl extension is loaded (to cover the case of using intl on older PHP versions that won't have this function)stof
19th Nov 2025 @ 16:44
12.43
8.3
No response
When using Redis-native rate limiting (via ThrottleRequestsWithRedis), the throttle middleware generates Redis keys without a stable namespace.
The key generation logic lives in ThrottleRequests::handle() and produces keys based on the request signature (hashed identifier), which results in raw, unhaspaced Redis keys (e.g. SHA-1 hashes).
While this works in unrestricted Redis environments, it breaks in Redis installations where ACLs are enforced using key patterns (common in managed Redis / Valkey services).
In such environments, Redis-native throttling fails with:
NOPERM No permissions to access a key
even when all required Redis commands (including EVAL) are explicitly allowed.
This behavior is inconsistent with other Redis-backed features in Laravel (cache, queue, session), which always use namespaced keys (laravel:, queues:*).
The throttle middleware already supports a $prefix argument, which is concatenated to the generated key in ThrottleRequests::handle().
However, this prefix is designed for logical separation of rate limiters at the route level (e.g. distinguishing different limits on the same endpoint), not as a stable infrastructure-level namespace.
Because the prefix is optional, route-specific, and user-provided, it cannot be reliably used to ensure compatibility with Redis ACLs based on key patterns.
For comparison, using the cache-based throttle middleware (ThrottleRequests) with Redis configured as the cache driver works correctly in the same ACL-restricted Redis environments, as cache keys are properly namespaced via the cache prefix.
Providing a stable, overrideable namespace for Redis-based rate limiter keys would make the middleware compatible with Redis ACLs while preserving backward compatibility.
For example, this could be achieved by introducing a protected method that returns an optional infrastructure-level key prefix (defaulting to an empty string), which would be prepended to the generated throttle key.
This approach would preserve existing behavior by default, while allowing applications running in ACL-restricted Redis environments to safely namespace rate limiter keys.
Create a new Laravel application.
Configure Redis as the backend for rate limiting and enable Redis-native throttling
(i.e. use ThrottleRequestsWithRedis).
Configure Redis/Valkey with ACLs that restrict access by key pattern, for example:
EVAL).throttle:* or laravel:*).Apply the throttle middleware to a route:
Route::middleware('throttle:5,1')->get('/test', fn () => 'ok');
Send a request to the route.
Observe that Redis immediately returns the following error:
NOPERM No permissions to access a key
Inspect the Redis key used by the throttle middleware: it is a raw hash without a namespace and therefore does not match the allowed ACL key patterns.
lordcoste
5th Jan 2026 @ 18:11
12.41.1
8.5.0
PostgreSQL 18.1 (pdo_pgsql, libpq 18.1) on ARM64 Docker
Laravel crashes with SIGSEGV (exit code 139) when using SESSION_DRIVER=database with PostgreSQL on PHP 8.5. The crash occurs during session regeneration after Auth::attempt() or
Auth::login().
Important: A standalone custom PDO session handler does NOT crash. The issue is specific to Illuminate\Session\DatabaseSessionHandler.
laravel.test-1 | WARN exited: php (exit status 139; not expected) laravel.test-1 | INFO reaped unknown pid 228 (terminated by SIGSEGV)
SESSION_DRIVER=redis with PostgreSQLSESSION_DRIVER=file with PostgreSQLIlluminate\Session\DatabaseSessionHandler with PostgreSQL on PHP 8.5In DatabaseSessionHandler::getDefaultPayload(), the handler resolves Guard::class to get user_id. During session regeneration after auth, this may create a problematic interaction that
triggers segfault in PHP 8.5's pdo_pgsql.
.env:
DB_CONNECTION=pgsql
SESSION_DRIVER=databasephp artisan session:table && php artisan migrateif (Auth::attempt($credentials)) {
session()->regenerate(); // SIGSEGV here
return redirect('/dashboard');
}
6. Submit login form → PHP crashes with exit code 139
Workaround: Use SESSION_DRIVER=redis
serdardb
5th Dec 2025 @ 22:44
filament/filament
4-beta6
12
3
8.4
Not sure if I'm doing something wrong, but I can't get charts in nested non-active tabs to render properly on page load, or update properly. The video shows the problem using the reproduction repo.
I'm using this to render the chart in 3 places:
Livewire::make(StatChartWidget::class, fn ($record) => [
'record' => $record,
])
->key(Str::random(10))
In the video, the following happens:
1. Page load
2. "Refresh data" to update the model's data attribute while the 'Data' tab is not active
2. "Refresh data" to update the model's data attribute while the 'Data' tab is active
I'm using #[Reactive] but I also tried refreshing via an event, and tried ->lazy(). Neither helped.
https://github.com/user-attachments/assets/6cb1cb43-8c9b-4f3e-ab62-face3931473a
Charts / Livewire components in a page should render and update correctly regardless of what tab they're in.
migrate:fresh --seed to seed statistics tablehttps://github.com/binaryfire/filament-bug-reproduction
binaryfire
19th Jun 2025 @ 09:21
filament/filament
v3.2.86
v11.10.0
v3.5.0
PHP 8.3.11
Hi,
I've got a Filament resource, and in the create page I have a form with some reactive text fields that perform calculations, and update values on the form. For a little while I was getting odd behaviour like characters being removed, and other 'glitches' as I typed, esp. typing quickly, or deleting characters quickly. I managed to get this under control by using a debounce value of circa 1000ms. This makes sense to me, given the possible clashing of state updates coming from the server if the debounce is too low.
However I've now noticed if I change a reactive text field with the debounce set to 1000ms, and then hit the 'create' or 'save changes' buttons very quickly - as in during that debounce period, I end up not saving the latest data / state. It's fine if I wait over the 1000ms and save but obviously a user will expect to just hit save and all be well.
Is there a way to either force the state on the server to get the latest user entered data and perform any recalculations (things in afterStateUpdated for e.g.) before saving to DB? Or even temp disable the 'create' / 'save changes' buttons on forms until the latest server state is calculated and in the form thus ensuring I always capture the most up-to-date state?
Many thanks!
Lots of love for Filament by the way ❤️
Always re-calculate the latest state the user can see or disable saving until the state is recalculated.
Here's a little resource form example showing the issue (from the example repo here). The debounce is increased to 10 seconds to more easily show the problem. If you change the text in field 'test' and press save in a FilamentPHP resource before 10 seconds elapse, you will notice no values are saved. If you try again and wait 10 seconds this time, both 'test' and 'test2' fields are saved as expected with 'test2' being a simple copy of 'test' produced from the code in afterStateUpdated.
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('test')
->afterStateUpdated(fn(Set $set, $state) => $set('test2',$state))
->live(debounce: 10000),
Forms\Components\TextInput::make('test2'),
]);
}
https://github.com/appymedia/filament-issue
appymedia
16th Jan 2025 @ 17:50
filament/filament
v4.0.7
v12.28.1
^3.5
PHP 8.4
Describe the bug unsavedChangesAlerts() not triggered when reordering a Repeater component. See animated Gif as it shows exactly the issue.
Screenshots ANIMATED GIF
Desktop (please complete the following information): I'm using Desktop
Additional context Need more context, just ask, but you'd probably be able to find it in the linked repository.
Expected behavior Expecting the warning to pop-up saying that you will lose changes made in the form when leaving the page without saving first.
To Reproduce Steps to reproduce the behavior:
https://github.com/christoferd/filament-bug-demo-2025
->unsavedChangesAlerts() to the Panelhttps://github.com/christoferd/filament-bug-demo-2025
**Logs**
I didn't see anything in the Browser Console Log, and there are no Laravel error logs.
If there are logs to produce then let me know.
christoferd
8th Sep 2025 @ 13:06
2.11.0
12.20.0
8.3.23
FrankenPHP
1.8.0
No response
I have an octane app running inside a docker container and use a bind mount for the application code. When editing files, fs events are not sent across the bind mount to the container, so the watcher does not detect them. I have the same issue reported in #487. There is also an open issue on the frankenphp repository https://github.com/php/frankenphp/issues/1616.
A potential solution would be to add an option to octane:frankenphp, like --chokidar to use chokidar instead of frankenphp's watcher.
Same as #487, but using frankenphp.
rty765
14th Jul 2025 @ 19:46
Description: I am using Flasher 2.0.1 in my Laravel 11 project and would like to know how to properly use the Flasher library in JavaScript. Additionally, I want to ensure that the JavaScript configuration is consistent with the settings defined in the flasher.php configuration file.
Details: Flasher Version: 2.0.1 Laravel Version: 11 Problem: Need guidance on using the Flasher library with JavaScript in a way that mirrors the configuration set in flasher.php.
raseldev99
16th Sep 2024 @ 04:50
Provide updates to new functionalities in the v2 of the package.
kwakuOfosuAgyeman
5th Jan 2025 @ 05:45
While working on the new version of https://github.com/symfony/stimulus-bridge, I noticed some dead code from https://github.com/symfony/webpack-encore/pull/1062:
Kocal
28th Jan 2025 @ 21:55
Is LDAP support planned? I saw there was a lot of interest in this with version 2. Would be nice to have this onboard for v3. There is a package available https://github.com/DirectoryTree/LdapRecord-Laravel https://chrispian.com/laravel-filament-tutorial-customize-login-to-use-ldap
julianstolp
11th Mar 2025 @ 14:11
filament/filament
^3.0-stable
^10.10
^3.0
8.2.6
Hi,
First and foremost, I just wanted to say what an impressive package this is! As a blind person, this is the easiest way I've found so far to develop UIs without having to worry too much about what it looks like.
I have come across a couple of accessibility issues however. One has to do with form labels and the other involves modals.
When using a screen reader to interact with a Filament form, the screen reader sometimes fails to pick up the label. This is incredibly strange as usually an element is either accessible or it isn't, but here, every time you refresh the exact same form, it appears completely random whether a given form label will be readable or not. Though this might be due at least in part to a bug in either Chromium and/or Microsoft's accessibility stack, the issue appears to stem from the fact that the text of a label is not a direct child of the element itself.
This can be solved either by adding aria-label="{{$label}}" to the element directly, or by rendering the "hidden" label unconditionally. In either case, you would then want to mark the visual label aria-hidden="true" to avoid any conflicts.
The other issue has to do with modals. When a modal is opened, the rest of the page contents should be marked using the aria-hidden attribute. It should also have either role="dialog" or role="alertdialog" which cause screen readers to issue a special notification that a dialog has opened. Otherwise, the user can interact with page contents that are supposed to be hidden by the modal. We also don't realize that a modal has opened up unless we manually scroll to the bottom of the page. Please note: I am providing the live demo as a repository link as all of this is demonstrable using the demo.
Thank you for your attention to this.
Kind regards,
Jordan.
Screen readers should always be able to identify form labels. Screen readers should not be able to see content that's supposed to be hidden by modal dialogs, and should notify users when a dialog has appeared.
https://github.com/filamentphp/demo
No response
caturria
7th Oct 2023 @ 23:43
Hello,
if you plan an scheduled maintenance with an START and END date it will never appear on the dashboard. Only if you create them with an START date only it will appear. I think this is a bit confusing, because if i plan an schedule an weekly update, i want to declare an timeslot and dont want to enter again the cachet-scheduled-maintenance to enter an date at the end of my maintenance.
Can this function be controlled or changed?
Thanks
kash1983
27th Jan 2025 @ 09:33
The friendly-errors-webpack-plugin has a built-in transformer/formatter for when a module is missing. To see the behavior, try (in any JavaScript file):
require('foo'); // foo is not a module that is installed
The error is:
This dependency was not found:
- foo in ./app/Resources/assets/js/app.js To install it, you can run: npm install --save foo
The problem is the npm install part... which should be yarn add to avoid confusion with our users. There is an issue about this: https://github.com/geowarin/friendly-errors-webpack-plugin/issues/33
weaverryan
25th Jun 2017 @ 23:10
When you install a UX package, if you have AssetMapper installed, we importmap:require the packages you need. We should also importmap:remove those when the package is uninstalled.
https://github.com/symfony/recipes/issues/1089#issuecomment-1885459144
weaverryan
10th Jan 2024 @ 19:05
filament/forms
3.2.80
11.7.0
3.4.12
8.2.18
The behavior of clicking on submit vs pressing the registered keyBinding() is different.
Clicking will clear the form. (correct)
Pressing the shortcut key does not. (incorrect)
Pressing the shortcut key should also clear the form.
/admin/issuectrl + enterhttps://github.com/bilogic/filament-issue/tree/click-different-from-keyBindings
https://github.com/filamentphp/filament/assets/946010/fb144bf9-802f-4003-8dcd-ec4c2148e742
No response
bilogic
19th May 2024 @ 07:38
12.40.2
8.3.25
Microsoft SQL Server 2025 for MacOS Tahoe (26.1) (using Orbstack's Rosetta and Docker platform settings to emulate Intel)
There is a problem with Laravel's Schema Builder when creating JSON columns on SQL Server 2025. Although SQL Server 2025 introduces native JSON datatype support, the ->json() method still creates nvarchar(max) columns instead of using the new native JSON datatype. This results in underutilization of important database features and may negatively impact performance and validation.
Moreover, there is no mechanism to detect the SQL Server version and conditionally use the native JSON datatype only when supported. For older SQL Server versions, the current fallback to nvarchar(max) should of course remain for backwards compatibility.
Schema::create('example_table', function (Blueprint $table) {
$table->json('data');
});
nvarchar datatype instead of jsonmartijnvt1981
28th Nov 2025 @ 15:05
filament/filament
v3.3.4
v11.44.2
v3.6.2
PHP 8.3.17
Since release 3.2.134 the datepicker in TextInputColumn stopped working when used as TextInputColumn::make('load_date')->type('date'). The datepicker doesn't open.
It is caused by https://github.com/filamentphp/filament/pull/15340, specifically this change, when reverted, the column works fine.
When user clicks on the calendar icon, a datepicker should open.
TextInputColumn::make('date')->type('date') to your Filament tablecomposer require filament/filament:3.2.133 -Wcomposer require filament/filament:3.2.134 -Whttps://github.com/jvitasek/app-filament-issue-3.x
jvitasek
19th Mar 2025 @ 11:29
2.8.1
10.48.28
8.3.16
Swoole
6.0.1
No response
I'm using Envoyer to deploy a Laravel Octane application, taking advantage of its zero-downtime deployment features.
However, Octane currently does not support zero-downtime deployment because it does not follow symlink directories. It always remains in the actual directory (instead of the symlinked one) where the Octane server was initially started. When the outdated release directory is deleted, Octane continues running in that location, causing errors on every request and resulting in 500 response codes on the live application.
Error thrown:
Warning: require(/var/www/domain.com/releases/202502010200023/vendor/laravel/octane/bin/bootstrap.php): Failed to open stream: No such file or directory in /var/www/domain.com/releases/202502010200023/vendor/laravel/octane/bin/swoole-server on line 18
Fatal error: Uncaught Error: Failed opening required '/var/www/domain.com/releases/202502010200023/vendor/laravel/octane/bin/bootstrap.php' (include_path='.:/usr/bin/[email protected]/8.3.16/share/[email protected]/pear') in /var/www/domain.com/releases/202502010200023/vendor/laravel/octane/bin/swoole-server:18
Stack trace:
#0 /var/www/domain.com/releases/202502010200023/vendor/laravel/octane/bin/swoole-server(95): {closure}(Array)
#1 [internal function]: {closure}(Object(Swoole\Http\Server), 0)
#2 /var/www/domain.com/releases/202502010200023/vendor/laravel/octane/bin/swoole-server(170): Swoole\Server->start()
#3 {main}
thrown in /var/www/domain.com/releases/202502010200023/vendor/laravel/octane/bin/swoole-server on line 18
#1 [internal function]: {closure}(Object(Swoole\Http\Server), 1)
#1 [internal function]: {closure}(Object(Swoole\Http\Server), 3)
#1 [internal function]: {closure}(Object(Swoole\Http\Server), 2)
#1 [internal function]: {closure}(Object(Swoole\Http\Server), 4)
#1 [internal function]: {closure}(Object(Swoole\Http\Server), 5)
Use any 0-downtime deployment or test it manually using the following instructions:
cd one directory up from the project's base path.current symlink directory for your project using the command: ln -nsf ./octane-project-test ./currentphp ./current/artisan octane:startcp -R ./octane-project-test ./octane-project-test-newln -nsf ./octane-project-test-new ./currentphp ./current/artisan octane:reloadrm -rf ./octane-project-testmikkpokk
2nd Mar 2025 @ 01:35
filament/filament
v3.2.93
v10.48.16
v3.5.2
v8.2.12
When a column in the database is of type geometry, the Filament panel feature breaks (it's not possible to visualize the record).
When I fill the column with NULL value, it works fine, but when I fill it with the POINT value containing Latitude and Longitude, it stops working.
I expected to be able to visualize the record.
php82 artisan make:model Coleta --migration
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('coletas', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->geometry('geo')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('coletas');
}
};
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Coleta extends Model
{
use HasFactory;
protected $table = 'coletas';
protected $fillable = [
'id',
'name',
'geo'
];
}
$coleta = new \App\Models\Coleta();
$coleta->name = 'Test';
$coleta->geo = \Illuminate\Support\Facades\DB::raw('POINT(46.646748, 24.562727)');
$coleta->save();
php artisan make:filament-resource Coleta --generate
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\ColetaResource\Pages;
use App\Filament\Resources\ColetaResource\RelationManagers;
use App\Models\Coleta;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class ColetaResource extends Resource
{
protected static ?string $model = Coleta::class;
protected static ?string $navigationIcon = 'heroicon-o-chevron-double-right';
protected static ?string $navigationLabel = 'Coletas';
protected static ?string $navigationGroup = 'Reciclagem';
protected static ?string $modelLabel = 'Coleta';
protected static ?string $pluralModelLabel = 'Coletas';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('name')
->label('Name')
->required(),
])->columns(1);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('id')
->label("#")
->sortable(),
Tables\Columns\TextColumn::make('name')
->label('name'),
Tables\Columns\TextColumn::make('created_at')
->label("Criado em")
->dateTime("d/m/Y H:i:s")
->sortable()
->toggleable(isToggledHiddenByDefault: false),
Tables\Columns\TextColumn::make('updated_at')
->label("Atualizado em")
->dateTime("d/m/Y H:i:s")
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
//
])
->actions([
Tables\Actions\ActionGroup::make([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
//Tables\Actions\DeleteAction::make(),
]),
])
->bulkActions([
/*Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),*/]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListColetas::route('/'),
'create' => Pages\CreateColeta::route('/create'),
'edit' => Pages\EditColeta::route('/{record}/edit'),
];
}
}
https://github.com/matheusjohannaraujo/bug-template-laravel-filament/
No error appears in laravel.log
matheusjohannaraujo
13th Jul 2024 @ 18:38
I tried the example config from the docs to a Laravel/Inertia/Vue app, and it don't work.
If use the code (HandleInertiaRequests.php): 'messages' => flash()->render([], 'array'),
Error: Flasher\Prime\Flasher::render(): Argument #1 ($presenter) must be of type string, array given, called in D:\Laragon6\www\mobi-care\app\Http\Middleware\HandleInertiaRequests.php on line 36
And changing it to: 'messages' => flash()->render('array'), it loads the page, but, I only see the notifications if i press F5, with its not the desired state.
brunonetadmin
18th Mar 2025 @ 17:16
Hello,
Is it possible to close a flash message by clicking on it and not just on clicking on the cross? If so, how to achieve it?
Regards, Fred
frdemoulin
13th Aug 2025 @ 20:21
v2.3.10
v11.6.0
v8.3.6
FrankenPHP
v1.1.4 PHP 8.3.6 Caddy v2.7.6
Postgress
Last week we updated our app previously using php-fpm running on Forge to use Laravel Octane with FrankenPHP. Our site is mostly an API that handles analytics events (Like google analytics). It uses the default Laravel api throttling.
In staging our app worked fine (30 req/sec same IP), but when deploying to production (1400 req/sec, different IPs) it started to fail, giving a lot of 429 Too Many Requests.
I quickly rolled back to php-fpm and after a few hours tried again with the same problem. Rolled back and the next day I switched to Swoole and it worked perfectly without changing a single line of code nor having to redeploy anything. So I can confidently say that is NOT a bug in my code, but rather a bug with FrankenPHP or the Octane integration with FrankenPHP.
My theory is that the RateLimiter is not reseting between requests so it's shared between different users. So multiple different users trigger the rate limiter:
This is my Rate limiter configuration:
// AppServiceProvider
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
our production CACHE_STORE is redis. Throttling worked perfectly fine without octane and with octane but using Swoole. It failed with hundred of 429 Too Many Requests after installing FrankenPHP.
This is our bootstrap/app.php:
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Support\Facades\App;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
commands: __DIR__.'/../routes/console.php',
health: '/up',
then: function () {
Route::middleware('api')
->prefix('api')
->as('api.')
->domain(config('app.domain'))
->group(base_path('routes/api.php'));
Route::middleware('web')
->domain(config('app.domain'))
->group(base_path('routes/web.php'));
Route::middleware('web')
->domain(config('playsaurus.ads.domain'))
->group(base_path('routes/ads.php'));
}
)
->withMiddleware(function (Middleware $middleware) {
$middleware->throttleApi();
$middleware->redirectTo(
guests: '/login',
users: '/',
);
$middleware->web(append: [
\App\Http\Middleware\HandleInertiaRequests::class,
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
]);
$middleware->api(append: [
\App\Http\Middleware\ConfigureLocale::class,
]);
$middleware->alias([
'localize' => \App\Http\Middleware\ConfigureLocale::class,
'embed' => \App\Http\Middleware\AllowsEmbeding::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
$exceptions->dontReport([
\App\Services\Announcements\InvalidVariantKey::class,
\App\Exceptions\CouponRedeemException::class,
]);
})->create();
It's difficult to reproduce. Because I can't test it in production because that would mean a lot of downtime for our users.
My theory is that it would be possible to reproduce from multiple different IPs. But since I don't have the means to test it, I don't know.
jhm-ciberman
14th May 2024 @ 00:15
Hello, When using php-flasher-toastr with Laravel 11, I encounter a TypeError: array_replace_recursive(): Argument #2 must be of type array, int given error in Illuminate\Translation\FileLoader at line 130. My environment:
Gnoth2n5
27th Mar 2025 @ 17:30
When calling mb_convert_encoding() with $fromEncoding === 'HTML-ENTITIES', the polyfill does not return functionally equivalent strings to the native function. This is because mb_convert_encoding() uses html_entity_decode() when $fromEncoding === 'HTML-ENTITIES' and that function does not return characters for many numeric entities 0-31 and 127-159. For example:
<?php
require "vendor/symfony/polyfill-mbstring/Mbstring.php";
use Symfony\Polyfill\Mbstring as p;
for($i = 0; $i < 1024; $i++) {
$string = "&#" . $i . ";";
$mbstring = mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
$polyfill = p\Mbstring::mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
if($mbstring != $polyfill) {
echo "Mismatch: $string - mbstring: $mbstring; polyfill: $polyfill\n";
}
}
outputs:
Mismatch: � - mbstring: ; polyfill: �
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring:; polyfill: 
Mismatch:  - mbstring:
; polyfill: 
Mismatch:  - mbstring:
; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch: ' - mbstring: '; polyfill: '
Mismatch:  - mbstring: ; polyfill: 
Mismatch: € - mbstring: ; polyfill: €
Mismatch:  - mbstring: ; polyfill: 
Mismatch: ‚ - mbstring: ; polyfill: ‚
Mismatch: ƒ - mbstring: ; polyfill: ƒ
Mismatch: „ - mbstring: ; polyfill: „
Mismatch: … - mbstring:
; polyfill: …
Mismatch: † - mbstring: ; polyfill: †
Mismatch: ‡ - mbstring: ; polyfill: ‡
Mismatch: ˆ - mbstring: ; polyfill: ˆ
Mismatch: ‰ - mbstring: ; polyfill: ‰
Mismatch: Š - mbstring: ; polyfill: Š
Mismatch: ‹ - mbstring: ; polyfill: ‹
Mismatch: Œ - mbstring: ; polyfill: Œ
Mismatch:  - mbstring: ; polyfill: 
Mismatch: Ž - mbstring: ; polyfill: Ž
Mismatch:  - mbstring: ; polyfill: 
Mismatch:  - mbstring: ; polyfill: 
Mismatch: ‘ - mbstring: ; polyfill: ‘
Mismatch: ’ - mbstring: ; polyfill: ’
Mismatch: “ - mbstring: ; polyfill: “
Mismatch: ” - mbstring: ; polyfill: ”
Mismatch: • - mbstring: ; polyfill: •
Mismatch: – - mbstring: ; polyfill: –
Mismatch: — - mbstring: ; polyfill: —
Mismatch: ˜ - mbstring: ; polyfill: ˜
Mismatch: ™ - mbstring: ; polyfill: ™
Mismatch: š - mbstring: ; polyfill: š
Mismatch: › - mbstring: ; polyfill: ›
Mismatch: œ - mbstring: ; polyfill: œ
Mismatch:  - mbstring: ; polyfill: 
Mismatch: ž - mbstring: ; polyfill: ž
Mismatch: Ÿ - mbstring: ; polyfill: Ÿ
While many of these are control characters (and the native function does return them), the single quote (dec 39) is particularly problematic.
cpeel
18th Mar 2021 @ 04:11
Add in PHP 7.3 as Normalizer::normalize() argument for NFKC_Casefold normalization.
nicolas-grekas
7th Feb 2019 @ 10:11
2.6.1
11.41.3
8.3
Roadrunner
2024.3.2
No response
ok this is in the borderline to be a bug but i write it anyway.
i am deploying using deployer , i suppose will happen for any Zero Downtime Deployments.
/releases/99/
/releases/100/
/releases/101/
and then a symbolic link from the latest release to /current , all pretty standard.
the problem come when running artisan octane:start
vendor/laravel/octane/src/Commands/StartRoadRunnerCommand.php
will set roadrunner server with
'-o', 'server.command='.(new PhpExecutableFinder)->find().','.base_path(config('octane.roadrunner.command', 'vendor/bin/roadrunner-worker')),
where base_path(...) will resolve to /releases/101/ not to /current
so in next deployment e.g. (/releases/102/) , when we run artisan octane:reload it will still use old /releases/101/ source code
(i checked and yes if i go back to /releases/101/ and make a change it will be present after artisan octane:reload).
the solution is very simple, in config/octane.php
you just need to add:
'roadrunner'=>[
'command' => env('OCTANE_ROADRUNNER_WORKER_PATH', base_path('vendor/bin/roadrunner-worker')),
]
OCTANE_ROADRUNNER_WORKER_PATH=../../current
would be nice is this added to config/octane.php , and maybe don't use base_path
or even better a option to provide the path in octane:start
deploy a octane laravel app using deployer , octane:reload will not work as expected
inikoo
13th Feb 2025 @ 14:32
Not PHPUnit 11 because we still need to support for PHP 8.1
e.g. at the moment we have stuff like:
- Symfony\Flex\Tests\Configurator\CopyFromPackageConfiguratorTest::testConfigureAndOverwriteFiles The at() matcher has been deprecated. It will be removed in PHPUnit 10. Please refactor your test to not rely on the order in which methods are invoked.
Help wanted 🙏
nicolas-grekas
23rd May 2025 @ 10:13
Immediately after installing php-flasher/flasher-laravel, the application breaks with the following error:
foreach() argument must be of type array|object, bool given
Simply installing the package causes this fatal error.
Steps to Reproduce:
Create a fresh Laravel app.
Run:
composer require php-flasher/flasher-laravel
Load any page in the app — no usage of flasher() or flasher_render() yet.
Laravel crashes with a foreach() error.
dlopez525
11th Apr 2025 @ 18:20
Sulu CMS separates its assets into assets/admin and assets/website, this means when installing Encore within a Sulu CMS install you will have to change a bunch of paths: https://docs.sulu.io/en/latest/cookbook/webpack-encore.html
This isn't my main issue, I think this is acceptable for an initial setup. But I do think we can improve what happens when you composer require a symfony bundle that provides stimulus controllers.
In the Sulu + Encore setup, the controllers.json file lives in assets/website/controllers.json. But since this path is hardcoded here:
The controllers.json is not updated automatically and there's no output telling you to manually do this either. So you're left a little lost in what is still missing. Also, figuring out what to manually add in controllers.json is quite tricky since most existing UX bundles don't document this manual setup.
Before I start hacking away at a PR, any suggestions how we can solve this properly? Or do we accept that this is not configurable and those who use custom paths just have to deal with it?
Thank you in advance.
rskuipers
27th Dec 2022 @ 21:16
filament/filament
3.0.60
10.2.6
No response
8.2
The tooltips for the dark / light mode switcher stay on screen on mobile.
They shouldn’t stay on screen after the switcher has closed.
Visit https://demo.filamentphp.com/ on a mobile device. I’m using an iPhone X.
https://github.com/filamentphp/demo
No response
binaryfire
24th Sep 2023 @ 19:14
If a pack lists things in its "replace" section, unpacking this pack should copy these rules into the "replace" section of the root composer.json.
I think that implementing this requires patching the Unpacker class only.
Anyone up to give it a try?
nicolas-grekas
8th Jul 2020 @ 18:35
filament/filament
3.3.28
12.19.3
3.6.3
8.4.8
For a Filament Panel Page that includes a child Livewire component, a Filament Notification fired by that child component is rendered twice by Filament's notifications.blade.php if a Livewire event is fired at the same time. If an event is not fired, the notification renders only once.
The Filament Notification blade should be rendered only once for any call to the Notification object.
Given the provided repo.
composer install
php artisan migrate
php artisan make:filament-user
In vendor/filament/notifications/resources/views/notifications.blade.php log out the $notifications variable:
@php
use Filament\Support\Enums\Alignment;
use Filament\Support\Enums\VerticalAlignment;
\Log::info($notifications);
@endphp
Navigate to /admin/foobar .
Click "With Event" button. Refresh.
Click "Without Event" button. Refresh.
Checking laravel.log, the "With Event" log is proceeded by two renders of a notification with the same ID. The "Notification without Event" is proceeded by just one.
(See log output below)
https://github.com/jasonlund/filament-notification
[2025-06-23 16:36:13] local.INFO: []
[2025-06-23 16:36:42] local.INFO: []
[2025-06-23 16:36:43] local.INFO: Notification with Event
[2025-06-23 16:36:43] local.INFO: {"9f3994ea-cbdd-429b-9202-1c2aa6582117":{"id":"9f3994ea-cbdd-429b-9202-1c2aa6582117","actions":[],"body":null,"color":null,"duration":6000,"icon":"heroicon-o-check-circle","iconColor":"success","status":"success","title":"With Event","view":"filament-notifications::notification","viewData":[]}}
[2025-06-23 16:36:43] local.INFO: {"9f3994ea-cbdd-429b-9202-1c2aa6582117":{"id":"9f3994ea-cbdd-429b-9202-1c2aa6582117","actions":[],"body":null,"color":null,"duration":6000,"icon":"heroicon-o-check-circle","iconColor":"success","status":"success","title":"With Event","view":"filament-notifications::notification","viewData":[]}}
[2025-06-23 16:36:44] local.INFO: []
[2025-06-23 16:36:46] local.INFO: Notification without Event
[2025-06-23 16:36:46] local.INFO: {"9f3994ee-65f6-434d-95b4-e1c266b15e85":{"id":"9f3994ee-65f6-434d-95b4-e1c266b15e85","actions":[],"body":null,"color":null,"duration":6000,"icon":"heroicon-o-check-circle","iconColor":"success","status":"success","title":"Without Event","view":"filament-notifications::notification","viewData":[]}}
[2025-06-23 16:36:52] local.INFO: []
jasonlund
23rd Jun 2025 @ 16:40
using prompt engineering techniques provide enhancement to the Gemini service class in the Gemini prompt class, creating functions commonly used in Laravel applications.
kwakuOfosuAgyeman
5th Jan 2025 @ 05:43
filament/tables
v3.0.19
v10.18.0
v3.0.0-beta.7
PHP 8.2
Just a follow up. PR #7636 introduced a slight difference between classic tables and grid tables hover/select appearance in dark mode.
Both "tables" should look the same.
https://github.com/ajnsn/filament-demo-borders
No response
ajnsn
15th Aug 2023 @ 14:29
When encountering nested tokens, they are parsed only during formatting, not when compiling the pattern. And the type of tokens are validated only during the rendering as well. But the native implementation detects such error during the instantiation: https://3v4l.org/Sf69D This means that the error handling required for the polyfill is not the same than for the native implementation.
stof
23rd Oct 2018 @ 15:58
Hi 👋🏼!
I am coming here to gather some feedback on my idea before starting working on it.
Background
I wanted to create a POC of https://github.com/symfony/skeleton made for Sylius. I created a simple recipe for sylius/core-bundle, then an example skeleton repo and I have found out my recipes does not work as another recipe already write files with the same name. Then, I noticed symfony/framework-bundle is always put as the first recipe to be executed, and this is a thing I wish to be able to configure.
Goal
Somehow allow myself to make (in this POC case) sylius/core-bundle as a first recipe to be executed. Of course, I can fork symfony/flex, but it would be perfect to avoid this way.
Idea
The idea is simple, we allow configuring such list for example in this way:
{
...
"extra": {
"flex": {
"prioritized-recipes": [
"sylius/core-bundle",
"another/sylius-package",
...
]
}
}
...
}
In Flex we could implement this +/- this way:
// symfony/framework-bundle recipe should always be applied first after the metapackages
// however, we allow to override it with a list of prioritized recipes
$recipes = $this->getPrioritizedRecipes();
$recipes = array_merge($recipes, [
'symfony/framework-bundle' => null,
]);
$packRecipes = [];
$metaRecipes = [];
instead current
// symfony/framework-bundle recipe should always be applied first after the metapackages
$recipes = [
'symfony/framework-bundle' => null,
];
$packRecipes = [];
$metaRecipes = [];
Why?
framework-bundle as a first recipe to be executed makes it unable for usOther options
I have not checked it yet, but I believe we can achieve the similar feature using Composer's Event Dispatcher. But first, I would like to hear if such a feature is welcomed. Or maybe you have a better idea how to solve this. I am open to provide such feature right after we agree on some solution.
jakubtobiasz
7th Nov 2022 @ 19:24
I would love to see support for oAuth in Catchet. I know there are some other (closed) issues requesting the same functionality, but I think this would be a great addition for Catchet.
FoksVHox
28th Feb 2025 @ 08:29