tncrazvan/catpaw

This package is abandoned and no longer maintained. No replacement package was suggested.

The catpaw project

2.4.10 2024-04-05 23:32 UTC

README

Catpaw is an opinionated dependency injection library that comes with batteries included for developing asynchronous and declarative general purpose programs.
It leverages php attributes to provide declarative apis, and the amphp platform to make your program asynchronous.

Table of Contents
Error Management
🌐 Router
🌐 Path Parameters
🌐 Open Api
🌐 Session
🌐 Byte Range Requests
Entry
Custom Attributes
💡 RaspberryPi
Services
Stores
Queues
Schedule
Build
🌐 Websockets
🌐 Twig
State
Signals
Go interop

Note

This project is aimed at linux distributions, some features may or not may work on Windows and/or MacOS.
Feel free to contribute fixing issues for specific platforms.

Get started

You will need at least php 8.2 and the php-yaml extension.

Create a new project using one of the starter templates.

  • you can start from scratch
    composer create-project catpaw/starter
  • you can start with a web server
    composer create-project catpaw/web-starter
  • or you can start with a basic SPA
    composer create-project catpaw/svelte-starter

Every application must declare a main function in the global scope, that will be your entry point:

<?php
// src/main.php
use Psr\Log\LoggerInterface;
function main(LoggerInterface $logger){
  $logger->info("hello world");
}

After you've created your new project, you can run it using

composer dev:watch

to watch file changes (useful in development) or

composer prod:start

for production mode.

Note

More in depth examples are available at tncrazvan/catpaw-examples.

Build & Run

It is possible, but not required, to build your application into a single .phar file using

composer prod:build

The building process can be configured inside the build.yaml file.

After building your application, you can simply run it using

php app.phar

The resulting .phar, by default (check build.yaml), includes the following directories:

  • ./src
  • ./vendor
  • ./bin
  • ./.build-cache (created at comptile time)

which means it's a portable binary, you just need to make sure php is installed on whatever machine you're trying to run it on.

Debugging with VSCode

  • Install xdebug

    apt install php8.2-xdebug
  • Put this configuration in your ./.vscode/launch.json file

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Launch",
                "type": "php",
                "request": "launch",
                "program": "${workspaceRoot}/bin/start",
                "args": [
                    "--libraries='./src/lib'",
                    "--entry='./src/main.php'"
                ],
                "cwd": "${workspaceRoot}",
                "runtimeArgs": [
                    "-dxdebug.start_with_request=yes"
                ],
                "env": {
                    "XDEBUG_MODE": "debug,develop",
                    "XDEBUG_CONFIG": "client_port=${port}"
                }
            },
            {
                "name": "Listen",
                "type": "php",
                "request": "launch",
                "port": 9003
            }
        ]
    }
  • Start debugging