PHP code example of codemonster-ru / annabel

1. Go to this page and download the library: Download codemonster-ru/annabel library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

codemonster-ru / annabel example snippets


// public/index.php
R__ . '/../bootstrap/app.php';
$app->run();

// bootstrap/app.php
use Codemonster\Annabel\Application;

$baseDir = __DIR__ . '/..';

$app = new Application($baseDir);


class PackageServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->commands([
            SyncPackageCommand::class,
        ]);
    }
}

use Codemonster\Annabel\Application;
use Codemonster\Annabel\Testing\InteractsWithApplication;
use PHPUnit\Framework\TestCase;

class FeatureTest extends TestCase
{
    use InteractsWithApplication;

    protected function createApplication(): Application
    {
        return 

return [
    'default' => 'mysql',

    'connections' => [
        'mysql' => [
            'driver'   => 'mysql',
            'host'     => '127.0.0.1',
            'port'     => 3306,
            'database' => env('DB_NAME'),
            'username' => env('DB_USER'),
            'password' => env('DB_PASS'),
            'charset'  => 'utf8mb4',
        ],

        'sqlite' => [
            'driver'   => 'sqlite',
            'database' => base_path('database/database.sqlite'),
        ],
    ],
];

// Query builder
$users = db()->table('users')->where('active', 1)->get();

// Schema builder
schema()->create('posts', function ($table) {
    $table->id();
    $table->string('title');
});

// Transactions
transaction(function () {
    db()->table('logs')->insert(['type' => 'created']);
});

storage('public')->put('avatars/user-1.txt', 'avatar');

$url = storage('public')->url('avatars/user-1.txt');

$response = http_client()
    ->baseUrl('https://api.example.com')
    ->acceptJson()
    ->get('/users/1');

$user = $response->throw()->json();

router()->get('/dashboard', [DashboardController::class, 'index'])
    ->middleware('auth');

router()->get('/posts/{post}', [PostController::class, 'show'])
    ->middleware('can:posts.view,post');

router()->post('/posts', [PostController::class, 'store'])
    ->middleware('web');

app(\Codemonster\Annabel\Http\Kernel::class)
    ->aliasMiddleware('admin', App\Http\Middleware\AdminOnly::class);

router()->post('/login', [LoginController::class, 'store'])
    ->middleware('throttle:login');

return [
    'provider' => 'database',
    'database' => [
        'table' => 'users',
        'identifier_column' => 'id',
        'password_column' => 'password',
    ],
    'users' => [
        new App\User(1, '[email protected]', password_hash('secret', PASSWORD_DEFAULT)),
    ],
    'redirect_to' => '/login',
];

if (auth()->attempt(['email' => $email, 'password' => $password])) {
    return response()->redirect('/dashboard');
}

router()->get('/dashboard', [DashboardController::class, 'index'])
    ->middleware('auth');

router()->get('/users/{id}', [UserController::class, 'show'])
    ->where('id', '\d+')
    ->name('users.show');

route('users.show', ['id' => 42]); // /users/42

use Codemonster\ApiResource\JsonResource;

final class UserResource extends JsonResource
{
    public function toArray(): array
    {
        return [
            'id' => $this->resource->getKey(),
            'name' => $this->resource->name,
        ];
    }
}

return UserResource::paginated(
    User::query()->simplePaginate(20, $page),
    '/api/users',
)->response();

use Codemonster\Mail\Message;

mailer('log')->send(
    Message::make()
        ->from('[email protected]', 'Annabel')
        ->to('[email protected]')
        ->subject('Welcome')
        ->text('Welcome to Annabel.'),
);

use Codemonster\Queue\Contracts\JobInterface;

class SendWelcomeEmailJob implements JobInterface
{
    public function handle(): void
    {
        //
    }
}

dispatch(new SendWelcomeEmailJob());

use Codemonster\Scheduler\Schedule;

/** @var Schedule $schedule */
$schedule->call(fn () => cleanup(), 'cleanup')
    ->dailyAt('03:00')
    ->withoutOverlapping();

$result = validator([
    'email' => '[email protected]',
], [
    'email' => '

use Codemonster\Annabel\Http\ValidatesRequests;
use Codemonster\Http\Request;

class RegisterController
{
    use ValidatesRequests;

    public function store(Request $request): mixed
    {
        $data = $this->validate($request, [
            'email' => '

$user = app(User::class, ['name' => 'Annabel']);

app()->bind(User::class, fn($container, array $params) => new User($params['name']));
$user = app(User::class, ['name' => 'Annabel']);

// Same for Application::make()
$user = $app->make(User::class, ['name' => 'Annabel']);

return [
    'providers' => [
        'defaults' => true,
        'disabled' => [],
        'extra' => [],
        'discover' => true,
        'path' => base_path('bootstrap/providers'),
        'packages' => [
            'discover' => true,
            'dont_discover' => [],
            'cache' => true,
            'cache_path' => base_path('bootstrap/cache/packages.php'),
        ],
    ],
];

class PackageServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        $this->publishes([
            __DIR__ . '/../../config/package.php' => base_path('config/package.php'),
            __DIR__ . '/../../resources/views' => base_path('resources/views/vendor/package'),
        ], ['config', 'package']);
    }
}
bash
php vendor/bin/annabel
php vendor/bin/annabel help
php vendor/bin/annabel help list
php vendor/bin/annabel make:controller Admin/User
php vendor/bin/annabel make:model User
php vendor/bin/annabel make:policy Post
php vendor/bin/annabel queue:work --once
php vendor/bin/annabel schedule:run
bash
php vendor/bin/annabel vendor:publish --tag=filesystem
bash
php vendor/bin/annabel vendor:publish --tag=security
bash
php vendor/bin/annabel vendor:publish --tag=auth
bash
php vendor/bin/annabel vendor:publish --tag=queue-migrations
php vendor/bin/annabel migrate
php vendor/bin/annabel queue:work
php vendor/bin/annabel queue:work --stop-when-empty
php vendor/bin/annabel queue:failed
php vendor/bin/annabel queue:retry 1
php vendor/bin/annabel queue:retry all
php vendor/bin/annabel queue:flush
bash
php vendor/bin/annabel optimize
bash
php vendor/bin/annabel optimize:clear
bash
php vendor/bin/annabel vendor:publish --provider="Vendor\\Package\\PackageServiceProvider"
php vendor/bin/annabel vendor:publish --tag=config
php vendor/bin/annabel vendor:publish --all --force