Canvas Framework
A modern, lightweight PHP framework that gets out of your way. Write clean controllers with route annotations, query your database with an intuitive ORM, and let contextual containers handle the complexity.
What Makes Canvas Different
Canvas combines six powerful concepts to create a framework that feels natural to work with.
🚀 Zero Configuration
Start coding immediately with sensible defaults. Canvas auto-discovers controllers, services, and packages through Composer metadata.
🎯 Annotation-Based Routing
Define routes directly in your controllers using @Route
annotations. No separate route files to maintain.
📦 Contextual Containers
Work with interfaces directly. Canvas intelligently discovers and resolves the right implementation based on context.
⚡ Aspect-Oriented Programming
Add crosscutting concerns like caching, authentication, and logging without cluttering your business logic.
🗄️ ObjectQuel ORM
Query your database using an intuitive, purpose-built query language that feels like natural PHP.
🔄 Legacy Bridge
Drop Canvas into any existing PHP application. Your legacy URLs keep working while you gradually modernize with Canvas services.
Example Controller
Here's what a typical Canvas controller looks like:
<?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 - clean, intuitive queries
$users = $this->em->findBy(UserEntity::class, ['active' => true]);
// Contextual template resolution
return $this->render('users/index.tpl', compact('users'));
}
}