Canvas Framework

A lightweight PHP framework designed for clarity. Route with annotations, query with ObjectQuel ORM, and let contextual containers resolve dependencies automatically.

Core Concepts

Six integrated features that simplify PHP development.

🚀 Auto-Discovery

Controllers, services, and packages are discovered through Composer metadata. No configuration files required.

🎯 Annotation Routes

Route definitions live in controller methods using @Route annotations. No separate routing files.

📦 Contextual Containers

Code against interfaces. Canvas resolves implementations based on request context.

⚡ Aspect-Oriented Programming

Separate crosscutting concerns—caching, authentication, logging—from business logic using aspects.

🗄️ ObjectQuel ORM

Query language designed for PHP syntax patterns. Write queries that read like native code.

🔄 Legacy Integration

Add Canvas to existing applications incrementally. Legacy URLs remain functional while you adopt Canvas services gradually.

Example Controller

Basic Canvas controller structure:

<?php
namespace App\Controllers;

use Quellabs\Canvas\Annotations\Route;
use Quellabs\Canvas\Controllers\BaseController;
use App\Entities\UserEntity;

class UserController extends BaseController {

    /**
     * @Route("/users")
     */
    public function index() {
        // ObjectQuel ORM query
        $users = $this->em()->findBy(UserEntity::class, ['active' => true]);

        // Template rendering with automatic resolution
        return $this->render('users/index.tpl', compact('users'));
    }
}