PHP code example of palacios / framework

1. Go to this page and download the library: Download palacios/framework 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/ */

    

palacios / framework example snippets




use Palacios\Framework\App;
use Palacios\Framework\Hosting\ApplicationEnvironment;

$builder = App::createBuilder(
    dirname(__DIR__),
    $_ENV['APP_ENV'] ?? ApplicationEnvironment::PRODUCTION,
);

$builder->services()
    ->addControllers()
    ->addViews()
    ->addAuthentication()
    ->addAuthorization();

$app = $builder->build();

if ($builder->environment->isDevelopment()) {
    $app->useDevelopmentExceptionPage();
} else {
    $app->useExceptionHandler();
}

$app->mapControllers();

return $app;



namespace App\Controllers;

use Palacios\Framework\Results\IActionResult;
use Palacios\Framework\Results\Results;
use Palacios\Framework\Routing\Attributes\HttpGet;
use Palacios\Framework\Routing\Attributes\Route;

#[Route('/users')]
final class UsersController
{
    #[HttpGet(name: 'users.index')]
    public function index(): IActionResult
    {
        return Results::json([
            ['id' => 1, 'name' => 'Ana'],
            ['id' => 2, 'name' => 'Carlos'],
        ]);
    }

    #[HttpGet('/{id:int}', name: 'users.show')]
    public function show(int $id): IActionResult
    {
        return Results::json(['id' => $id]);
    }
}

$app->mapGet('/status', static fn () => Results::ok([
    'status' => 'online',
]));

$app->mapPost('/users', [UsersController::class, 'store']);

$api = $app->mapGroup('/api')
    ->withTags('API');

$v1 = $api->mapGroup('/v1');

$v1->mapGet('/users', [UsersController::class, 'index']);
$v1->mapGet('/users/{id:int}', [UsersController::class, 'show']);

$url = $app->urlFor('users.show', ['id' => 42]);

$builder->services()
    ->addScoped(IUserRepository::class, UserRepository::class)
    ->addTransient(Mailer::class, Mailer::class)
    ->addSingleton(Cache::class, Cache::class);

final readonly class UsersController
{
    public function __construct(
        private IUserRepository $users,
    ) {}
}

#[HttpGet('/{id:int}')]
public function show(int $id): IActionResult
{
    return Results::json(['id' => $id]);
}

use Palacios\Framework\Validation\Attributes\EmailAddress;
use Palacios\Framework\Validation\Attributes\Required;
use Palacios\Framework\Validation\Attributes\StringLength;

final class CreateUserInput
{
    public function __construct(
        #[Required]
        #[StringLength(maximumLength: 120, minimumLength: 2)]
        public string $name,

        #[Required]
        #[EmailAddress]
        public string $email,
    ) {}
}

return Results::view('users/index', [
    'users' => $this->users->all(),
]);

<h1>Usuários</h1>

 foreach ($users as $user): 

$app->useAntiforgery();
$app->mapControllers();

<form method="post" action="/users">
    <?= csrf_input() 

$builder->services()
    ->addAuthentication(
        static fn (AuthenticationOptions $options) => $options
            ->loginPath('/login')
            ->accessDeniedPath('/acesso-negado'),
    )
    ->addAuthorization();

$app->useAuthentication();
$app->useAuthorization();

$app->mapGet('/conta', $handler)
    ->->    ->allowAnonymous();

$api = $app->mapGroup('/api')
    ->addMiddleware(RequestTraceMiddleware::class);

$app->useRequestLogging();
$app->mapControllers();

use Palacios\Framework\Logging\Logger;

$builder->services()->addSingleton(Logger::class, MyApplicationLogger::class);
$app = $builder->build();
$app->useRequestLogging();

$builder->services()->addDatabase(
    static fn (DatabaseOptions $options) => $options
        ->dsn($_ENV['DB_DSN'])
        ->username($_ENV['DB_USERNAME'] ?? null)
        ->password($_ENV['DB_PASSWORD'] ?? null),
);



use Palacios\Framework\Database\Migration;

return new class implements Migration {
    public function up(PDO $connection): void
    {
        $connection->exec(
            'CREATE TABLE users (id INTEGER PRIMARY KEY, name VARCHAR(120) NOT NULL)',
        );
    }

    public function down(PDO $connection): void
    {
        $connection->exec('DROP TABLE users');
    }
};

return Results::ok($value);
return Results::json($value);
return Results::created('/users/1', $value);
return Results::noContent();
return Results::badRequest($errors);
return Results::unauthorized();
return Results::forbid();
return Results::notFound();
return Results::redirect('/login');
return Results::view('users/index', ['users' => $users]);

$factory = new WebApplicationFactory(
    static function (WebApplication $app): void {
        $app->mapGet('/ping', static fn () =>
            Results::json(['status' => 'ok'])
        );
    },
);

$response = $factory->createClient()->get('/ping');
bash
php --version
composer --version