mckenziearts/laravel-command
Dev-only Artisan generators for Laravel: quickly scaffold templated repositories, helpers, and observers. Adds make:repository and related commands to create boilerplate files, with configurable model namespaces for non-standard app structures.
Installation:
composer require mckenziearts/laravel-command --dev
For Laravel 5.4/5.3, register the service provider in AppServiceProvider.php under local environment:
if ($this->app->environment('local')) {
$this->app->register('Mckenziearts\LaravelCommand\LaravelCommandServiceProvider');
}
First Use Case:
Generate a repository for a model (e.g., User):
php artisan make:repository User
This creates a UserRepository in App/Repositories/ with basic CRUD scaffolding.
make:repository → Generates repository classes (e.g., for Eloquent models).make:observer → Creates observer classes with lifecycle hooks (creating, created, etc.).make:helper → Scaffolds utility classes (e.g., MediaHelper for image processing).App/Repositories/, App/Observers/, and App/Helpers/ directories for templates.Modules/User/Models/User).Repository Pattern:
make:repository to auto-generate a repository for a model (e.g., Post).namespace App\Repositories;
use App\Models\Post;
class PostRepository extends \App\Repositories\PostRepository // Extend base if needed
{
public function publishedPosts()
{
return $this->model->where('published', true)->get();
}
}
AppServiceProvider:
$this->app->bind('App\Repositories\PostRepository', function ($app) {
return new \App\Repositories\PostRepository(new Post());
});
Observer Pattern:
Order):
php artisan make:observer Order
App/Observers/OrderObserver.php:
public function created(Order $order)
{
Log::info("Order {$order->id} created by {$order->user_id}");
}
\App\Models\Order::observe(\App\Observers\OrderObserver::class);
Helper Classes:
make:helper to create utility classes (e.g., StringHelper):
php artisan make:helper StringHelper
namespace App\Helpers;
class StringHelper {
public static function slugify(string $text): string
{
return Str::slug($text);
}
}
composer.json:
"autoload": {
"psr-4": {
"App\\Helpers\\": "app/Helpers/"
}
}
Model-Centric Development:
php artisan make:model Post -mphp artisan make:repository PostfindBySlug).Event-Driven Logic:
php artisan make:observer Postcreating, updating, etc.boot() method.Controller Helper Methods:
php artisan make:helper PostHelperuse App\Helpers\PostHelper;
PostHelper::formatForApi($post);
Namespaces:
Modules\User\Models), manually update the use statements in generated files.Service Container:
$this->app->singleton(\App\Repositories\PostRepository::class, function ($app) {
return new \App\Repositories\PostRepository(new \App\Models\Post());
});
Testing:
$this->app->instance(\App\Repositories\PostRepository::class, Mockery::mock());
CI/CD:
php artisan make:repository User in a setup script).Namespace Mismatches:
App\Models/ and App/Helpers/. If your project uses custom paths (e.g., App/Modules/User/Models), manually update the use statements.Observer Registration:
observe()) to trigger. Forgetting this step means hooks won’t fire.Repository Binding:
bind() method.Helper Autoloading:
composer.json’s autoload section. Run composer dump-autoload after adding new helpers.Laravel Version:
Command Not Found:
config/app.php or AppServiceProvider).composer.json under require-dev.Observer Hooks Not Triggering:
\App\Models\Post::observe(\App\Observers\PostObserver::class);
created vs. created()).Repository Methods Not Available:
$repository = app(\App\Repositories\PostRepository::class);
Helper Methods Unrecognized:
composer dump-autoload and verify the helper’s namespace is in composer.json.Custom Templates:
vendor/mckenziearts/laravel-command/src/stubs/) to modify generated code. Publish them to your project:
php artisan vendor:publish --provider="Mckenziearts\LaravelCommand\LaravelCommandServiceProvider" --tag="stubs"
Command Extensions:
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Mckenziearts\LaravelCommand\Commands\MakeRepository;
class CustomMakeRepository extends MakeRepository {
protected $signature = 'make:custom-repo {name}';
// Override logic here
}
Environment-Specific Commands:
local) by checking $this->app->environment() in the command’s handle() method.Performance:
public function allWithRelations()
{
return $this->model->with('comments', 'author')->get();
}
Documentation:
/**
* Get published posts with comments.
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public function publishedWithComments()
How can I help you explore Laravel packages today?