Installation:
composer require roberts/support
Add to composer.json under require-dev if only using scaffolding tools.
First Use Case: Run the scaffolding command to bootstrap your project:
composer support:scaffold
This generates CI/CD pipelines, Docker configs, and static analysis tools in one command.
Where to Look First:
SCAFFOLDING.md: Detailed docs on generated files and customization.src/Support/: Core traits/helpers (e.g., PackageHelper, ArrayHelper).config/support.php: Package configuration (if published).PackageHelper for common package tasks (e.g., service provider bootstrapping):
use Roberts\Support\Traits\PackageHelper;
class MyServiceProvider extends ServiceProvider {
use PackageHelper;
public function boot() {
$this->publishesConfig();
$this->registerCommands();
}
}
publishesConfig() to auto-detect and publish config files with a single method call.ArrayHelper::dot() or CollectionHelper::groupBy() for nested data manipulation:
use Roberts\Support\Helpers\ArrayHelper;
$flattened = ArrayHelper::dot($request->all());
ResponseHelper::jsonError() for consistent API responses:
use Roberts\Support\Helpers\ResponseHelper;
return ResponseHelper::jsonError('Validation failed', $errors);
TestHelper::assertJsonStructure() to validate API responses:
use Roberts\Support\Helpers\TestHelper;
TestHelper::assertJsonStructure($response, ['data', 'meta.*']);
run-tests.yml, phpstan.yml) include:
Roberts\Support\Package base class for standardized package structures.CommandHelper to scaffold artisan commands with built-in argument/option handling.Dockerfile and cloudbuild.yaml support Cloud Run deployments out-of-the-box.Scaffolding Overwrite:
support:scaffold multiple times may overwrite existing files. Review SCAFFOLDING.md for merge strategies..github/workflows/) before rerunning.Trait Conflicts:
ArrayHelper vs. Laravel’s Arrayable).use Roberts\Support\Helpers\ArrayHelper as SupportArrayHelper;
Docker Quirks:
docker-compose.yml or use --platform=local flag in scaffolding.PHPStan Strict Rules:
level: 8). Adjust phpstan.neon if needed:
includes:
- vendor/roberts/support/phpstan/level8.neon
php artisan support:debug to inspect generated scaffolding paths and configs.config/support.php:
'debug' => env('SUPPORT_DEBUG', false),
Logs helper method calls to storage/logs/support.log.Custom Scaffolding Templates: Override default templates by publishing assets:
php artisan vendor:publish --provider="Roberts\Support\SupportServiceProvider" --tag="scaffolding"
Modify files in config/support/scaffolding/.
Adding Helpers: Extend existing helpers by creating a custom trait:
namespace App\Support;
use Roberts\Support\Traits\ArrayHelper as BaseArrayHelper;
trait CustomArrayHelper {
use BaseArrayHelper;
public function customFlatten(array $array): array {
// ...
}
}
CI/CD Customization:
Extend generated workflows by adding steps to .github/workflows/custom.yml and referencing them in run-tests.yml:
jobs:
test:
steps:
- uses: actions/checkout@v4
- run: composer install
- run: ./vendor/bin/phpunit
- run: ./vendor/bin/phpstan analyze --memory-limit=2G
composer.json to avoid runtime includes:
"autoload": {
"psr-4": {
"App\\": "app/",
"Roberts\\Support\\": "vendor/roberts/support/src/"
}
}
$this->mergeConfigFrom(__DIR__.'/../config/support.php', 'support');
Config::set('support', Cache::remember('support-config', now()->addHours(1), function () {
return require __DIR__.'/../config/support.php';
}));
How can I help you explore Laravel packages today?