Found 60 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.

help wanted

Laravel Version

11.44.2

PHP Version

8.3

Database Driver & Version

No response

Description

Attaching Authorization middleware does not work for route groups using can() method, only via middleware('can...').

This does not work:

Route::prefix('{post}')
    ->can('access', 'post') // Middleware not registered.
    ->group(static function (): void {
        Route::get('/', 'show')
        ...
    });

Working example:

Route::prefix('{post}')
    ->middleware('can:access,post') // Middleware registered fine.
    ->group(static function (): void {
        Route::get('/', 'show')
        ...
    });

Steps To Reproduce

Route::prefix('{post}')
    ->can('access', 'post') // Middleware not registered.
    ->group(static function (): void {
        Route::get('/', 'show')
        ...
    });
View more
3 comments
marian-r

marian-r

21st Mar 2025 @ 09:39

help wanted

Describe the bug

When you attempt to dump a binary string or anything containing one (like an array or an object), Ray does not dump anything. It just fails silently.

Versions

Ray version (you can see this in "About Ray"): 2.8.1

You can use composer show to get the version numbers of:

  • spatie/ray package version: 1.41.2
  • spatie/laravel-ray package version (if applicable): 1.37.1

PHP version: 8.2.17 Laravel version (if applicable): 11.18.1

To Reproduce

Add this in your code:

ray(hex2bin('ae0f3d'));

Expected behavior

Ray should display this (like the console when dump is used):

b"®\x0F="

Desktop (please complete the following information):

  • OS: MacOs
  • Version: 14.6.1
View more
5 comments 👍 1
sebj54

sebj54

27th Aug 2024 @ 14:57

help wanted

Bug description

Currently, the plugin calculates width/height incorrectly when swapping aspect ratios, leading to incorrect HTML output. When changing the aspect ratio of an image, the longest side should remain fixed, and the other side should be calculated accordingly.

How to reproduce

For an image of 3000x1688px as a source:

{{ responsive:image ratio="16/9" md:ratio="9/16" }}

it returns:

<picture>
    <source [...] >
    <source [...] >
    <source [...] >
    <img src="/img/asset/hash/image.jpg?w=3000&amp;h=1688&amp;s=9358bb54be5d388a9a2529a4196dcfc6" alt="" width="3000" height="1688">
</picture>

Now for the same image as source but with:

{{ responsive:image ratio="9/16" md:ratio="16/9" }}

it returns:

<picture>
    <source [...] >
    <source [...] >
    <source [...] >
    <img src="/img/asset/hash/image.jpg?w=3000&amp;h=5333&amp;s=6c5c0bb8447dbd7ff61a692f98b5f46d" alt="" width="3000" height="5333">
</picture>

The calculated aspect ratio is correct, but the dimensions are not. The generated values exceed the original image size.

In this last example, the correct height should be 3000px, and the width should be 1688px to ensure the image stays within its original dimensions.

Environment

Environment
Application Name: local
Laravel Version: 11.41.3
PHP Version: 8.3.14
Composer Version: 2.8.5
Environment: development
Debug Mode: ENABLED
URL: local.test
Maintenance Mode: OFF
Timezone: Europe/Paris
Locale: en

Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: CACHED

Drivers
Broadcasting: null
Cache: file
Database: sqlite
Logs: stack / single
Mail: smtp
Queue: redis
Session: file

Statamic
Addons: 3
Sites: 1
Stache Watcher: Disabled (auto)
Static Caching: Disabled
Version: 5.46.0 PRO

Statamic Addons
rias/statamic-redirect: 3.9.3
spatie/statamic-responsive-images: 5.2.1
statamic/seo-pro: 6.5.0

Installation

Fresh statamic/statamic site via CLI

Antlers Parser

regex (default)

View more
jimblue

jimblue

3rd Feb 2025 @ 23:33

help wanted

Laravel Version

12.x

PHP Version

8.3.15

Database Driver & Version

No response

Description

From the documentation on the value() collection method

The value method retrieves a given value from the first element of the collection

0 Should not be treated as null so the check should be specifically against null.

$collection = collect([
  ["name" => "Tim", "balance" => 0],
  ["name" => "John", "balance" => 200]
]);

$collection->value("balance");

// 200

I would expect to get Tim's debt based on the doc.

Even more so in this case,

$collection = collect([
  ["name" => "Tim", "balance" => 0],
  ["name" => "John", "balance" => 200]
]);

$collection->where('name', 'Tim')->value("balance");

// null

Same goes for all values that evaluate the same way.

$collection = collect([
  ["name" => "Tim", "vegetarian" => false],
  ["name" => "John", "vegetarian" => true]
]);

$collection->value('vegetarian');

// true

Or even a "0" string.

Steps To Reproduce

Run this code

$collection = collect([
  ["name" => "Tim", "balance" => 0],
  ["name" => "John", "balance" => 200]
]);

$collection->value("balance");

// 200

In a scenario like this, skipping a user because his balance is 0 feels wrong. The access pattern might not be the best but it's just an example of a real use case.

I know it is probably handled that way because of how PHP handles zero values but I feel this is the kind of gotcha that can be confusing to new developers using Laravel.

View more
8 comments
phadaphunk

phadaphunk

5th Mar 2025 @ 14:52

bug help wanted

What happened?

After installation, I noticed that in the browser console it outputs an error of wireEl is undefined.

How to reproduce the bug

Just install this package in a livewire project, preferable with Filament's admin package. And see the browser console.

composer create-project laravel/laravel test;
composer require filamentphp/filament;
composer require spatie/laravel-blade-comments;

Then go through the browser console and see the error

Package Version

1.0.1

PHP Version

8.2.0

Laravel Version

10.13.0

Which operating systems does with happen with?

macOS

Notes

Filament ......................................................
Packages ...... filament, forms, notifications, support, tables
Version .............................................. v2.17.44
Views ..................................... PUBLISHED: filament

View more
4 comments 👍 2
sawirricardo

sawirricardo

2nd Jun 2023 @ 07:15

Feature help wanted

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.

View more
30 comments 👍 28
javiereguiluz

javiereguiluz

21st May 2018 @ 09:37

help wanted

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

View more
7 comments
alexchuin

alexchuin

18th Oct 2022 @ 12:51

help wanted

When using the addToMediaFromURL method, I'm receiving a Could Not Load Image error on the server, but not locally (I'm using Laravel Vapor) and not with other image formats.

The code below is where the error is occuring and that code is receiving an absolute file path to the image in s3, which is available.

public function addToMediaLibrary($file_path) { $media = $this->addMediaFromUrl($file_path) ->toMediaCollection("", 's3'); return $media; }

As an example the file path when logged out is https://s3.sitesforsaas.com/tenants/d221c93a-3757-466c-bf83-b74a9ee64c04/sites/9cfc24c7-cb2a-4c5a-8c0f-73ecdc79c166/2024/09/4e9854b0-4f2d-4931-a726-01f557bd7fc6.webp, but the error is looking for the image in local 'tmp' storage for some reason.

Could not load image at path /tmp/storage/tenantd221c93a-3757-466c-bf83-b74a9ee64c04/media-library/temp/j7pNMerUdReNx9MfAG5rKjcmGHWu4i99/LM2UYMTcYU0BO8sLsTfeOBpS9eXximejlarge.webp`",

View more
2 comments 👍 3
josiahmann

josiahmann

11th Sep 2024 @ 21:32

help wanted

Octane Version

2.6.1

Laravel Version

11.41.3

PHP Version

8.3

What server type are you using?

Roadrunner

Server Version

2024.3.2

Database Driver & Version

No response

Description

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

Steps To Reproduce

deploy a octane laravel app using deployer , octane:reload will not work as expected

View more
1 comment
inikoo

inikoo

13th Feb 2025 @ 14:32

help wanted

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)

View more
2 comments
stof

stof

23rd Oct 2018 @ 15:34

help wanted
View more
1 comment
julianstolp

julianstolp

11th Mar 2025 @ 14:11

enhancement help wanted hacktoberfest

Found the \Illuminate\Database\Eloquent\Concerns\HasAttributes::originalIsEquivalent() method during code diving and it should be usable for our trait! 🎉 This PR would be mainly reasearch when that method was added, if it's compatible with our version support rules and switching our own change detection logic with the core one.

View more
3 comments
Gummibeer

Gummibeer

20th Oct 2021 @ 10:03

help wanted good first issue
View more
JonPurvis

JonPurvis

16th Feb 2025 @ 16:55

help wanted hacktoberfest good first issue documentation

We are logging activity of several models, some using SoftDeletes trait and others not.

When we set config option 'subject_returns_soft_deleted_models' => true then calling subject() on any model not using SoftDeletes trait throws an exception: Call to undefined method Illuminate\Database\Eloquent\Builder::withTrashed().

Can the subject() method below be made to check first whether the Model uses the SoftDeletes trait? Or perhaps check whether withTrashed() is a defined method on the Model? I tried a few things but couldn't figure out how to get the class of the Model..

https://github.com/spatie/laravel-activitylog/blob/68eb6e65382f94fe86ce5ff6572159f80d024ba9/src/Models/Activity.php#L28-L35

View more
26 comments
bluec

bluec

7th Nov 2018 @ 13:44

help wanted

Laravel Version

12.2.0

PHP Version

8.3.6

Database Driver & Version

No response

Description

Suppose we have a many-to-many relationship with a custom pivot model class. In that case, we can use an observer to handle events for the pivot model (and the relationship).

But here is the issue. If I add a withPivotValue to my relationship, the update and delete events will not work anymore.

Steps To Reproduce

In my project, I have a many to many relation like this: app/Models/Project.php

class Project // ...
{
    public function allMembers(): BelongsToMany
    {
        return $this->belongsToMany(User::class, 'project_members')
            ->withPivot(...)
            ->using(ProjectMember::class);
    }

    public function members(): BelongsToMany
    {
        return $this->allMembers()->withPivotValue('role', 'member');
    }

    public function managers(): BelongsToMany
    {
        return $this->allMembers()->withPivotValue('role', 'manager');
    }
}

I have an observer for the project member model like this:

class ProjectMemberObserver
{
    public function created(ProjectMember $projectMember): void
    {
        dd('created called');
    }

    public function updated(ProjectMember $projectMember): void
    {
        dd('updated called');
    }

    public function deleted(ProjectMember $projectMember): void
    {
        dd('deletedcalled');
    }
}

Now, if I use the relation without the pivot value, my observer works as expected:

$project = Project::find(...);

$project->allMembers()->attach(...); // created called
$project->allMembers()->updateExistingPivot(..., [...]); // updated called
$project->allMembers()->detach(...); // deleted called

But if I use the relation with pivot value, only the create handler will work, and the updated or deleted will not work as expected.

$project = Project::find(...);

$project->managers()->attach(...); // created called
$project->managers()->updateExistingPivot(..., [...]); // Observer not working
$project->managers()->detach(...); // Observer not working
View more
3 comments
amir9480

amir9480

14th Mar 2025 @ 11:50

help wanted good first issue

I think it would be a good idea to add a publishable configuration file to this package, which allows a user to specify:

  • Words specific to their application they want to treat as "unclean"
  • Words specific to their application they want to allow

The configuration files that are currently used are very general and will work for most cases, but I can imagine some applications would want to block/allow certain words, where it makes sense to do it in userland rather than at the package level.

View more
JonPurvis

JonPurvis

4th Mar 2025 @ 23:52

help wanted

I would be good to support normalizer_get_raw_decomposition function that appeared in PHP 7.3. I've tried to implement it but seems that existing decomposition data is already optimized to get the final decomposition. Example test case is available here. Pinging @nicolas-grekas as he is the author of Normalizer polyfill.

View more
4 comments
IonBazan

IonBazan

12th May 2018 @ 23:26

enhancement help wanted

For some reason, our test suite is super slow. We should look into this and try to decrease memory usage and speed it up.

Parallel run:

  Tests:    316 passed (785 assertions)
  Duration: 13.64s
  Parallel: 10 processes

Regular run:

  Tests:    316 passed (785 assertions)
  Duration: 96.30s
View more
4 comments
driesvints

driesvints

29th Dec 2023 @ 10:43

enhancement help wanted

Discussed in https://github.com/spatie/schema-org/discussions/202

Originally posted by indyjonesnl January 10, 2024

$lodgingBusiness = Schema::lodgingBusiness()
  ->openingHours(
    Schema::openingHoursSpecification()
      ->dayOfWeek([Schema::dayOfWeek()::Monday])
      ->opens(new DateTime('09:00:00'))
      ->closes(new DateTime('17:00:00'))
  )
  ->checkinTime(new DateTime('14:00:00'))
  ->checkoutTime(new DateTime('11:00:00'))

This results in the current date + time being included in the output "opens":"2024-01-10T09:00:00+00:00","closes":"2024-01-10T17:00:00+00:00" and ..."checkinTime":"2024-01-10T14:00:00+00:00","checkoutTime":"2024-01-10T11:00:00+00:00"...

While the Schema should contain only the time, formatted as 14:30:00+08:00.

Can someone point me in the right direction?

View more
Gummibeer

Gummibeer

11th Jan 2024 @ 13:12

help wanted

Bug description

Chrome, Firefox, and Safari now support setting the width and height attributes on <source> elements within <picture> elements. You can read more about this in the web.dev article on optimizing CLS. This enhancement allows browsers to better handle layout shifts and varying aspect ratios for responsive images.

How to reproduce

Current Behavior:

Currently, Statamic Responsive Images does not take advantage of this browser capability. As a result, when multiple sources are provided, the appropriate width and height attributes are not applied to <source> elements, which may lead to layout shifts due to varying aspect ratios.

Proposed Enhancement:

Set appropriate width and height attributes on <source> elements based on their aspect ratios.

Benefits:

  • Improved Visual Stability: Reduce Cumulative Layout Shift (CLS) by providing browsers with the correct dimensions upfront.
  • Better Performance: Modern browsers can allocate the correct space for images during page load.
  • Enhanced Responsiveness: Accurately reflect different image aspect ratios for a more consistent user experience.

Environment

Environment
Application Name: local
Laravel Version: 11.41.3
PHP Version: 8.3.16
Composer Version: 2.8.5
Environment: development
Debug Mode: ENABLED
URL: local.test
Maintenance Mode: OFF
Timezone: Europe/Paris
Locale: en

Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: NOT CACHED

Drivers
Broadcasting: null
Cache: file
Database: sqlite
Logs: stack / single
Mail: smtp
Queue: redis
Session: file

Statamic
Addons: 3
Sites: 1
Stache Watcher: Disabled (auto)
Static Caching: Disabled
Version: 5.46.1 PRO

Statamic Addons
rias/statamic-redirect: 3.9.3
spatie/statamic-responsive-images: 5.2.1
statamic/seo-pro: 6.5.0

Installation

Fresh statamic/statamic site via CLI

Antlers Parser

regex (default)

Additional details

Leveraging native width and height support on <source> elements can lead to significant improvements in layout stability and overall performance on modern browsers. This enhancement would allow the package to better handle responsive images by using up-to-date browser capabilities.

Thanks for considering this enhancement!

View more
2 comments
jimblue

jimblue

7th Feb 2025 @ 22:03

bug enhancement good first issue

What happened?

I just installed package and complement for AI powered solution. When I create an issue to test it I get :

Capture d'écran 2024-07-21 125216

I had to change the links function like this to make it work for me:

public function links(): array
{
    $rawText = Str::finish($this->rawText, 'ENDLINKS');

    $textLinks = $this->between('LINKS', 'ENDLINKS', $rawText);

    $textLinks = explode(PHP_EOL, $textLinks);

    $links = [];

    foreach ($textLinks as $textLink) {
        $textLink = str_replace('\\', '\\\\', $textLink);
        $textLink = str_replace('\\\\\\', '\\\\', $textLink);

        $decodedLink = json_decode($textLink, true);

        if ($decodedLink !== null) {
            $links[$decodedLink['title']] = $decodedLink['url'];
        }
    }

    return $links;
}

How to reproduce the bug

When I install the package in my project and use it with AI powered

Package Version

1.0

PHP Version

8.2.14

Laravel Version

11.14

Which operating systems does with happen with?

Windows

Notes

No response

View more
2 comments
bestmomo

bestmomo

21st Jul 2024 @ 10:57

help wanted

Octane Version

2.8.1

Laravel Version

10.48.28

PHP Version

8.3.16

What server type are you using?

Swoole

Server Version

6.0.1

Database Driver & Version

No response

Description

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)

Steps To Reproduce

Use any 0-downtime deployment or test it manually using the following instructions:

  1. Use the Swoole driver as an example.
  2. cd one directory up from the project's base path.
  3. Create a current symlink directory for your project using the command: ln -nsf ./octane-project-test ./current
  4. Start the Octane server: php ./current/artisan octane:start
  5. Copy your project to another directory: cp -R ./octane-project-test ./octane-project-test-new
  6. Activate the new release: ln -nsf ./octane-project-test-new ./current
  7. Reload the Octane server: php ./current/artisan octane:reload
  8. Remove the original project directory: rm -rf ./octane-project-test
View more
12 comments 👀 1
mikkpokk

mikkpokk

2nd Mar 2025 @ 01:35

documentation good first issue

The docs aren't finished. This issue exists to track the missing pieces:

  • App icons
  • Context menus
  • Dock
  • Printing
  • ProgressBar
  • Queue
  • Screens
  • Settings
  • Shell
  • System
  • Touch ID
  • Testing
  • Build signing (#361)
    • macOS
    • Windows
  • How to customise Electron / PR to NativePHP
  • Security disclosures process
  • Highlight current section
  • Show ToC persistently on the right-hand side
  • Sponsorship page
  • Contributors page
  • Show sponsors in sidebar
  • Add next/previous section buttons to the bottom of pages
  • Add Edit on GitHub link to pages
View more
9 comments
simonhamp

simonhamp

8th Sep 2024 @ 15:01

help wanted question

AST, or "abstract syntax tree", creates the expectation of a nested tree structure. In the case of a query string, the AST will only ever be one level deep; as multi nodes are combined into one.

If anyone wants to suggest a better, more clear name: you're welcome.

View more
3 comments
brendt

brendt

20th Dec 2018 @ 13:41

enhancement help wanted
  • standard tags
  • input fields
  • components
  • patterns

Add code snippets for each block

View more
👍 1
willemvb

willemvb

25th Jul 2016 @ 12:49

help wanted

Octane Version

v2.3.10

Laravel Version

v11.6.0

PHP Version

v8.3.6

What server type are you using?

FrankenPHP

Server Version

v1.1.4 PHP 8.3.6 Caddy v2.7.6

Database Driver & Version

Postgress

Description

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.

image

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();

Steps To Reproduce

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.

View more
12 comments 👍 1
jhm-ciberman

jhm-ciberman

14th May 2024 @ 00:15

enhancement good first issue

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

View more
kwakuOfosuAgyeman

kwakuOfosuAgyeman

5th Jan 2025 @ 05:38

enhancement help wanted

Let's try out Filament and move our own admin panels to it. This should provide us with a much more powerful admin backend.

https://filamentphp.com

View more
12 comments 👍 1
driesvints

driesvints

22nd Dec 2023 @ 09:06

good first issue localization

In the past overviews, the date order is reversed. There it says: “No incidents reported between 2025-01-13 and 2025-01-07”, but the general way of speaking is to take the day further in the past first. It should therefore read “No incidents reported between 2025-01-17 and 2025-01-13”. The date selection fields are also reversed accordingly.

View more
6 comments
tgrymatt

tgrymatt

10th Feb 2025 @ 07:15

help wanted good first issue
View more
JonPurvis

JonPurvis

16th Feb 2025 @ 16:56

help wanted

Laravel Version

11.x

PHP Version

any

Database Driver & Version

irrelevant

Description

This is similar to #53692 but a separate issue.

It seems creating a DB connection too early (in a service provider, in a specific way) and using it later causes some weird "desynchronization" when using parallel tests.

I haven't had the time to do a deep dive yet, but the issue is likely related to some reconnecting logic similar to the linked issue.

The reproduction steps may seem very specific, i.e. why am I instantiating a cache store in a service provider. In practice this happens if you just use RateLimiter::for('foo', static fn () => null), but that under the hood creates the cache store which seems to be the underlying cause. So the reproduction steps are as low level as I managed to trace this issue.

In a real app, e.g. one based on Fortify which rate limits logins, any call to cache() while using the database cache driver, will cause weird behavior. There is a test in Jetstream that directly reproduces this (it makes a request to the login route) but the side effects don't have a perceptible effect. If there were some more DB-related assertions after the request, especially comparing DB state before the request and after, you'd see it.

Steps To Reproduce

  1. laravel new, no starter kit, select Pest for instance
  2. Make the following changes in phpunit.xml:
    <env name="CACHE_STORE" value="database"/>
    <env name="DB_CONNECTION" value="sqlite"/>
    <env name="DB_DATABASE" value="database/tests.sqlite"/>
    
  3. touch database/tests.sqlite
  4. Force cache store creation in a service provider:
    // AppServiceProvider::boot()
    cache()->getStore();
    
  5. Add a test:
    test('foobar', function () {
        expect(DB::select('select * from users'))->toHaveCount(0);
        User::create(['name' => 'John Doe', 'email' => '[email protected]', 'password' => 'foobar']);
        expect(DB::select('select * from users'))->toHaveCount(1);
    
        cache()->put('foo', 'bar');
        expect(cache('foo'))->toBe('bar');
    
        // users table is empty!
        expect(DB::select('select * from users'))->toHaveCount(1);
    });
    
  6. artisan test -p should fail on the last assertion
  7. If you remove the service provider call, the test passes
View more
5 comments 👍 1
stancl

stancl

19th Feb 2025 @ 20:07

bug help wanted

When attempting to filter tests by test or file name pressing the "Enter" key has no effect.

Pressing "Enter" at the default screen correctly triggers a "test run" where all tests are run.

View more
4 comments
ntwb

ntwb

25th Feb 2018 @ 10:49

bug help wanted good first issue

Hi, I noticed this issue after trying to use the attachments while making use of this webhook package.

This issue has already surfaced once in issue 170 and continued in discussion 171, however it was not solved.

I have added log proof of this issue as previously asked on the older thread to indicate the differences between the Laravel request and the webhook call request. Full logs can be found in the attached files.

request()->all().log $this->webhookCall.log

Data from "request()->all()" 'attachment_details' => array ( 0 => array ( 'disposition' => 'inline', ), 1 => array ( 'content_id' => NULL, ), ), 'attachments' => array ( 0 => \Illuminate\Http\UploadedFile::__set_state(array( 'originalName' => 'image0.jpeg', 'mimeType' => 'image/jpeg', 'error' => 0, 'originalPath' => 'image0.jpeg', 'test' => false, 'hashName' => NULL, )), ),

Data from "$this->webhookCall" 'attachment_details' => array ( 0 => array ( 'disposition' => 'inline', ), 1 => array ( 'content_id' => NULL, ), ),

Code used to log this data

\Log::info('Request Data');
\Log::info(request()->all());

\Log::info('Webhook Call Data');
\Log::info(json_decode($this->webhookCall, true));
View more
1 comment
ryangalea7

ryangalea7

10th Mar 2025 @ 16:39

help wanted

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.

View more
stof

stof

23rd Oct 2018 @ 15:58

enhancement help wanted

Figure our a way to show a grayed out Laravel logo as a default avatar instead of the current default GitHub one.

View more
14 comments
driesvints

driesvints

29th Sep 2021 @ 10:48

good first issue filament

On the record update for an active incident, there needs to be a tie to the component to be update the current component status.

Image

View more
glipschitz

glipschitz

19th Jan 2025 @ 03:05

help wanted
View more
3 comments
jbrooksuk

jbrooksuk

31st Jan 2025 @ 16:44

enhancement good first issue

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.

View more
3 comments
FoksVHox

FoksVHox

28th Feb 2025 @ 08:29

good first issue help wanted

Steps to reproduce this issue:

  • having a migration file in the package.
  • the migration file is already prefixed by a date and time.
  • the package is configured with ->runsMigrations() in it's ServiceProvider.
  • publish the migrations of the package. then the published migration name would prefixed by date again!

I reproduced this issue not only in my private package, but also in filament-attachmate package, which has a migration named as database/migrations/2024_02_24_192352_create_attachments_table.php

and the package's service provider is allowed to run migrations:

class FilamentAttachmateServiceProvider extends PackageServiceProvider
{

    public function configurePackage(Package $package): void
    {
        $package
            ->name('filament-attachmate')
            ->hasMigrations([
                '2024_02_24_192352_create_attachments_table'
            ])
            ->runsMigrations();
    }
}

everything is ok and the migration is successfully loaded. but after publishing the migration, the published filename would be prefixed again with a new date time string:

  Copying file [vendor/zeeshantariq/filament-attachmate/database/migrations/2024_02_24_192352_create_attachments_table.php] to [database/migrations/2024_10_07_135947_2024_02_24_192352_create_attachments_table.php]  DONE

the published file is prefixed by 2024_10_07_135947_2024_02_24_192352_ which is the date in vendor's filename prefixed by published date!

Some changes in the generateMigrationName method might fix this issue.

View more
1 comment
imami

imami

7th Oct 2024 @ 14:42

help wanted

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: &#0; - mbstring: ; polyfill: &#0;
Mismatch: &#1; - mbstring: ; polyfill: &#1;
Mismatch: &#2; - mbstring: ; polyfill: &#2;
Mismatch: &#3; - mbstring: ; polyfill: &#3;
Mismatch: &#4; - mbstring: ; polyfill: &#4;
Mismatch: &#5; - mbstring: ; polyfill: &#5;
Mismatch: &#6; - mbstring: ; polyfill: &#6;
Mismatch: &#7; - mbstring: ; polyfill: &#7;
Mismatch: &#8; - mbstring:; polyfill: &#8;
Mismatch: &#11; - mbstring:
                            ; polyfill: &#11;
Mismatch: &#12; - mbstring:
                            ; polyfill: &#12;
Mismatch: &#14; - mbstring: ; polyfill: &#14;
Mismatch: &#15; - mbstring: ; polyfill: &#15;
Mismatch: &#16; - mbstring: ; polyfill: &#16;
Mismatch: &#17; - mbstring: ; polyfill: &#17;
Mismatch: &#18; - mbstring: ; polyfill: &#18;
Mismatch: &#19; - mbstring: ; polyfill: &#19;
Mismatch: &#20; - mbstring: ; polyfill: &#20;
Mismatch: &#21; - mbstring: ; polyfill: &#21;
Mismatch: &#22; - mbstring: ; polyfill: &#22;
Mismatch: &#23; - mbstring: ; polyfill: &#23;
Mismatch: &#24; - mbstring: ; polyfill: &#24;
Mismatch: &#25; - mbstring: ; polyfill: &#25;
Mismatch: &#26; - mbstring: ; polyfill: &#26;
Mismatch: &#27; - mbstring:  polyfill: &#27;
Mismatch: &#28; - mbstring: ; polyfill: &#28;
Mismatch: &#29; - mbstring: ; polyfill: &#29;
Mismatch: &#30; - mbstring: ; polyfill: &#30;
Mismatch: &#31; - mbstring: ; polyfill: &#31;
Mismatch: &#39; - mbstring: '; polyfill: &#39;
Mismatch: &#127; - mbstring: ; polyfill: &#127;
Mismatch: &#128; - mbstring: €; polyfill: &#128;
Mismatch: &#129; - mbstring: ; polyfill: &#129;
Mismatch: &#130; - mbstring: ‚; polyfill: &#130;
Mismatch: &#131; - mbstring: ƒ; polyfill: &#131;
Mismatch: &#132; - mbstring: „; polyfill: &#132;
Mismatch: &#133; - mbstring: …; polyfill: &#133;
Mismatch: &#134; - mbstring: †; polyfill: &#134;
Mismatch: &#135; - mbstring: ‡; polyfill: &#135;
Mismatch: &#136; - mbstring: ˆ; polyfill: &#136;
Mismatch: &#137; - mbstring: ‰; polyfill: &#137;
Mismatch: &#138; - mbstring: Š; polyfill: &#138;
Mismatch: &#139; - mbstring: ‹; polyfill: &#139;
Mismatch: &#140; - mbstring: Œ; polyfill: &#140;
Mismatch: &#141; - mbstring: ; polyfill: &#141;
Mismatch: &#142; - mbstring: Ž; polyfill: &#142;
Mismatch: &#143; - mbstring: ; polyfill: &#143;
Mismatch: &#144; - mbstring: ; polyfill: &#144;
Mismatch: &#145; - mbstring: ‘; polyfill: &#145;
Mismatch: &#146; - mbstring: ’; polyfill: &#146;
Mismatch: &#147; - mbstring: “; polyfill: &#147;
Mismatch: &#148; - mbstring: ”; polyfill: &#148;
Mismatch: &#149; - mbstring: •; polyfill: &#149;
Mismatch: &#150; - mbstring: –; polyfill: &#150;
Mismatch: &#151; - mbstring: —; polyfill: &#151;
Mismatch: &#152; - mbstring: ˜; polyfill: &#152;
Mismatch: &#153; - mbstring: ™; polyfill: &#153;
Mismatch: &#154; - mbstring: š; polyfill: &#154;
Mismatch: &#155; - mbstring: ›; polyfill: &#155;
Mismatch: &#156; - mbstring: œ; polyfill: &#156;
Mismatch: &#157; - mbstring: ; polyfill: &#157;
Mismatch: &#158; - mbstring: ž; polyfill: &#158;
Mismatch: &#159; - mbstring: Ÿ; polyfill: &#159;

While many of these are control characters (and the native function does return them), the single quote (dec 39) is particularly problematic.

View more
1 comment
cpeel

cpeel

18th Mar 2021 @ 04:11

help wanted good first issue
View more
JonPurvis

JonPurvis

16th Feb 2025 @ 16:57

help wanted

In raising this issue, I confirm the following (please check boxes):

  • I have read and understood the contributors guide.
  • I have checked the pull requests tab for existing solutions/implementations to my issue/suggestion.
  • I have checked that the bug-fix I am reporting can be replicated.

Description of the problem

One of the important reasons for using hyperscript is that it handles escaping of characters which are reserved in html. Which prevents XSS.

spatie/html-element does not do this. Mainly because it uses strings as intermediate format instead of an object representation of the DOM.

View more
6 comments 👍 3
Erikvv

Erikvv

1st Feb 2018 @ 02:19

enhancement help wanted good first issue

Describe the bug logUnguarded() works provided that $guarded is set explicitly in the model. If it is not set explicitly but globally set, say in AppServiceProvider using Model::unguard(); then nothing is logged.

To Reproduce

  1. remove $fillable and $guarded from a model that use uses LogsActivity
  2. call Model::unguard(); in AppServiceProvider in the boot method
  3. set
    public function getActivitylogOptions() : LogOptions
    {
        return LogOptions::defaults()->logUnguarded();
    }
  1. Make some changes to a model and save them

Expected behavior Some changed properties should be logged but none are

Versions (please complete the following information)

  • PHP: 8.1
  • Database: MySql
  • Laravel: 9.38
  • Package: larvel-activitylog
View more
1 comment
colinmackinlay

colinmackinlay

20th Nov 2022 @ 12:31

good first issue

Dashboard showing Operational

Image

Front end showing no issues, but the status seems to still be linked to the incident even if it's closed as fixed

Image

Image

Image

View more
4 comments 👍 1
glipschitz

glipschitz

25th Jan 2025 @ 11:01

help wanted

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

View more
2 comments 👍 1
danielmarschall

danielmarschall

7th Jan 2022 @ 00:12

help wanted

Octane Version

2.5.9

Laravel Version

11

PHP Version

8.3

What server type are you using?

Swoole

Server Version

8.3

Database Driver & Version

No response

Description

Wildcard paths like config/**/*.php in the watch array of config/octane.php aren't working properly.

Steps To Reproduce

  1. Install chokidar
  2. Run octane:start --watch (I'm using Swoole)
  3. Modify a file in the config directory. Octane won't restart
  4. Change config/**/*.php to config in the watch array of config/octane.php
  5. Restart Octane server
  6. Modify a file in the config directory. Octane will now correctly restart

Same problem with anything else using wildcards eg. database (try modifying a seeder to test).

View more
5 comments
binaryfire

binaryfire

14th Nov 2024 @ 11:57

help wanted findapr

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.

View more
brunonetadmin

brunonetadmin

18th Mar 2025 @ 17:16

good first issue

Many of them are out of date, some by a few major versions!

It would be great to get these into good order and start keeping them up to date

View more
3 comments
simonhamp

simonhamp

24th Oct 2024 @ 11:53

help wanted

NotOrm Package

The goal is to make abstract code based on the package notorm to build a new orm system

View more
ambroisehdn

ambroisehdn

15th Jun 2022 @ 12:34

good first issue help wanted

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

View more
5 comments
kash1983

kash1983

27th Jan 2025 @ 09:33

enhancement help wanted good first issue

using prompt engineering techniques provide enhancement to the Gemini service class in the Gemini prompt class, creating functions commonly used in Laravel applications.

View more
kwakuOfosuAgyeman

kwakuOfosuAgyeman

5th Jan 2025 @ 05:43

enhancement help wanted

Hi! If I use this package with my project I has a problem. My package.json has a "git dependency" like this:

{
  "peerDependencies": {
    "package": "git+ssh://[email protected]/team/project.git"
  }
}

And npm-install-peers breaks.

View more
👍 5
JWo1F

JWo1F

18th Dec 2017 @ 08:52

help wanted findapr

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.

View more
raseldev99

raseldev99

16th Sep 2024 @ 04:50

good first issue filament

In version 2.x it was possible to disable external dependencies for offline installations. see https://github.com/cachethq/cachet/issues/3210. This is no longer possible in 3.x. For offline purposes, however, this makes the application unusable.

View more
2 comments
julianstolp

julianstolp

19th Mar 2025 @ 13:11

documentation help wanted good first issue

Provide updates to new functionalities in the v2 of the package.

View more
kwakuOfosuAgyeman

kwakuOfosuAgyeman

5th Jan 2025 @ 05:45

help wanted

Add in PHP 7.3 as Normalizer::normalize() argument for NFKC_Casefold normalization.

View more
1 comment
nicolas-grekas

nicolas-grekas

7th Feb 2019 @ 10:11

help wanted good first issue
View more
JonPurvis

JonPurvis

16th Feb 2025 @ 16:56

help wanted good first issue
View more
JonPurvis

JonPurvis

16th Feb 2025 @ 16:55

enhancement help wanted hacktoberfest

Describe the bug I have a table which has an order column. When I reorder the elements I update each model with the new order. Because the table has some large JSON columns I select only id and order columns for efficiency. I set the new order and save the model.

foreach (Faq::query()->get(['id', 'order']) as $faq) {
    $faq->order = $newOrder[$faq->id];
    $faq->save();
}

The diffs created in the activity_log table look like this:

{
   "old": {
      "order": 1,
      "answer": null,
      "question": null
   },
   "attributes": {
      "order": 2,
      "answer": "long JSON content",
      "question": "long JSON content"
   }
}

From what I see laravel-activitylog fetches the model with all columns from the database before creating a log entry which kind of defeats the purpose of my "select list optimization" and produces an incorrect diff.

Generally I want these large JSON columns to be logged in case a user changes them but in this case I only change the order column so I would like to see only the order column in the diff.

I have tried running these updates straight off the Eloquent builder:

Faq::query()->where('id', $id)->update(['order' => $newOrder[$id]]);

but in this case nothing is logged.

I have the following activitylog configuration for my models:

public function getActivitylogOptions(): LogOptions
{
    return LogOptions::defaults()
                     ->logAll()
                     ->logOnlyDirty()
                     ->logExcept([
                         'id',
                         'created_at',
                         'updated_at',
                     ]);
}

To Reproduce Select a subset of columns from the database, change these columns, save the model and see that other (not initially selected) columns are present in the diff.

Expected behavior Only columns that've actually been changed should be present in the diff.

Versions

  • PHP: 8.1
  • Database: MySQL 8
  • Laravel: 9.31.0
  • Package: 4.6.0
View more
5 comments 👍 1
KKSzymanowski

KKSzymanowski

28th Sep 2022 @ 21:53