Punchcard: Object Configs for Laravel
Published on by Paul Redmond
Punchcard is a lazy and strict way to configure your Laravel projects.
Just working on new Laravel project for a friend and trying to change existing array config to punchcard...
— Tomas Votruba (@VotrubaT) March 13, 2023
...so painful to convert these strings 😭
What if we had a useful command to handle it for us? 😊 pic.twitter.com/bSYNQXZP9L
On top of Laravel's configuration, this package provides fluent configuration classes with the following:
- strict-typed configuration
- autocomplete in IDEs
- class-based arguments
Here's an example from the author's post, Introducing Punchcard - Object Configs for Laravel:
// config/view.phpuse TomasVotruba\PunchCard\ViewConfig; return ViewConfig::make() ->paths([__DIR__ . '/../resources/views']) ->compiled(__DIR__ . '/../storage/framework/views') ->toArray();
This package generates built-in Laravel configuration files. At the time of writing, the ViewConfig
might look as follows:
namespace TomasVotruba\PunchCard; class ViewConfig implements \Illuminate\Contracts\Support\Arrayable{ /** * @var string[] */ private array $paths = []; private ?string $compiled = null; public static function make(): self { $config = new self(); $config->paths([ resource_path('views'), ]); $config->compiled(env('VIEW_COMPILED_PATH', realpath(storage_path('framework/views')))); return $config; } /** * @param string[] $paths */ public function paths(array $paths): self { $this->paths = $paths; return $this; } public function compiled(string $compiled): self { $this->compiled = $compiled; return $this; } /** * @return array<string, mixed[]> */ public function toArray(): array { return [ 'paths' => $this->paths, 'compiled' => $this->compiled, ]; }}
This package was inspired by What about config builders? by Brent Roose. You can learn more about this package, get full installation instructions, and view the source code on GitHub.