stepanenko3 / nova-command-runner

This Laravel Nova tool lets you run artisan and bash commands directly from Nova 4 or higher.
MIT License
31 stars 14 forks source link

Assignment of null to a string property since the new version #36

Open jonnywilliamson opened 4 months ago

jonnywilliamson commented 4 months ago

Hi there,

I've been using this nova plugin for quite a while now with no issues, until a few days ago after I updated it. Haven't changed anything in the config etc, but when I run my command from the nova dashboard I get a server 500 error.

The error is as follows in the log:

[2024-04-23 09:07:07] production.ERROR: Cannot assign null to property Stepanenko3\NovaCommandRunner\Dto\RunDto::$run_by of type string {"userId":48204,"exception":"[object] (TypeErro
[stacktrace]
#0 /home/forge/crewapps.co/vendor/stepanenko3/nova-command-runner/src/Http/Controllers/CommandsController.php(117): Stepanenko3\\NovaCommandRunner\\Dto\\RunDto->__construct()
#1 /home/forge/crewapps.co/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(46): Stepanenko3\\NovaCommandRunner\\Http\\Controllers\\CommandsController->run()
#2 /home/forge/crewapps.co/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#3 /home/forge/crewapps.co/vendor/laravel/framework/src/Illuminate/Routing/Route.php(206): Illuminate\\Routing\\Route->runController()
#4 /home/forge/crewapps.co/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()

Having a look at the RunDto I see a recent change in commit

https://github.com/stepanenko3/nova-command-runner/commit/954ae263e96107acc35818ab4e3d81deefba440b#diff-34ea08736004df131df35da01543bdd3ea44ce5506612c743557fb6b63833cf3L9-L21

Where you marked everything apart from $run_by as a nullable string

However in your CommandsController.php you try and run the command with a new RunDTO() object that has no parameters and so it's trying to set $run_by as null and so throwing the error. (I think).

https://github.com/stepanenko3/nova-command-runner/blob/main/src/Http/Controllers/CommandsController.php#L117

Not sure what would be best here, but thought I'd just highlight it as an issue as I can't get the commands to run online anymore.

Thanks.

jonnywilliamson commented 4 months ago

Actually having another look at it I see that the issue might be the same issue as https://github.com/stepanenko3/nova-command-runner/issues/20

The constructor of RunDTO sets the run_by to the name of auth user .

https://github.com/stepanenko3/nova-command-runner/blame/0d1bf7864e4dfb0a78c7e5590937611564b20258/src/Dto/RunDto.php#L27

But my users don't have a name field. They have a first_name field instead. So this is where the null is coming from.

It's only become apparent because of the change of adding type checking to the class properties.

kiritokatklian commented 4 months ago

Opened #42 to fix this. Although the package is still broken because of #30

As an alternative, I'd suggest either downgrading to 4.2.7 or using 4.3.4 and adding this to your user model:

public function getNameAttribute(): string
{
    return $this->first_name;
}