A Laravel scaffolding package for an opinionated Laravel coding style.
- PHP 8.2+
- Laravel 11+
composer require ikechukwukalu/magicmakephp artisan install:apiTo initialize prepared classes for a new laravel app. This would only run when env('APP_ENV') === local and env(MAGIC_INIT_LOCK) === false.
php artisan magic:initTo generate all model based prepared classes.
php artisan magic:model UserKycTo generate individual model based prepared classes.
php artisan magic:contract UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:repository UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:service UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:controller UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:createRequest UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:updateRequest UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:deleteRequest UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:readRequest UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:api UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:test UserKyc --variable=userKyc --underscore=user_kyc
php artisan magic:factory UserKyc --variable=userKyc --underscore=user_kycAdd this to config/api.php.
'paginate' => [
...
'user_kyc' => [
'pageSize' => 10,
],
],Add this to app/Providers/RepositoryServiceProvider.php.
use App\Contracts\UserKycRepositoryInterface;
use App\Repositories\UserKycRepository;
public function register(): void
{
...
$this->app->bind(UserKycRepositoryInterface::class, UserKycRepository::class);
}If you did run php artisan magic:init.
Add to the composer.json file.
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
"files": [
"app/Http/Helpers.php"
]
},After that run:
composer dump-autoloadAdd to bootstrap/providers.php.
/*
* Package Service Providers...
*/
App\Providers\EventServiceProvider::class,
App\Providers\MacroServiceProvider::class,
App\Providers\RepositoryServiceProvider::class,Add to bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
//
$middleware->alias([
'check.email.verification' => \App\Http\Middleware\CheckEmailVerification::class,
'check.user.is.admin' => \App\Http\Middleware\CheckIfUserIsAdmin::class,
'check.phone.verification' => \App\Http\Middleware\CheckPhoneVerification::class,
]);
})Add to vite.config.js
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
export default defineConfig({
plugins: [
laravel({
input: [
'resources/sass/app.scss',
'resources/js/app.js',
'resources/css/app.css',
],
refresh: true,
}),
],
});php artisan ui bootstrap
npm install
composer install
php artisan migrate --seednpm run build
php artisan serve
php artisan testAdd the following line above this code line @if ($emailData->action) in the notification.blade.php file:
@if (isset($emailData->highlightText))
@component('mail::panel', ['style' => 'background-color: #f0f8ff; border-radius: 0.5rem; padding: 16px;text-align: center'])
<div style="text-align: center;">
{{ $emailData->highlightText }}
</div>
@endcomponent
@endif$userNotificationData = new UserNotificationData($user->id, $title, $text);
$user->notify(new DatabaseNotification($userNotificationData->toObject()));
$emailData = new EmailData(subject: $title, lines: [$text], from: env('MAIL_FROM_ADDRESS'),
remark: null, action: false, action_text: null,
action_url: null, attachements: null);
$user->notify(new EmailNotification($emailData->toObject()));
$smsData = new SmsData($user->name, $text);
$user->notify(new SmsNotification($smsData->toObject()));Sample usage:
public function getPaginated(int $pageSize): LengthAwarePaginator
{
/**
* Search a parent table via the user_id foreign key on the user_deliveries table
*/
$search = advancedSearch('user', 'user_id', ['unit_number', 'name', 'email', 'first_name', 'last_name', 'middle_name']);
/**
* Search a child table via the user_delivery_id foreign key on the user_delivery_items table
*/
$search2 = advancedSearch('userDeliveryItems', 'user_delivery_id', ['tracking_number', 'name', 'delivery_vendor'], 'user_delivery_items');
return UserDelivery::with(['user', 'userDeliveryItems'])
->search($search)
->search($search2)
->orWhere(function($query) {
$query->search('ref_number');
})
->order()
->date()
->filter($this->whiteList)
->paginate(pageSize($pageSize));
}The MM package is a software licensed under the Apache 2.0 license.