A lightweight PHP framework designed for clarity. Route with annotations, query with ObjectQuel ORM, and let contextual containers resolve dependencies automatically.
Six integrated features that simplify PHP development.
Controllers, services, and packages are discovered through Composer metadata. No configuration files required.
Route definitions live in controller methods using @Route annotations. No separate routing files.
Code against interfaces. Canvas resolves implementations based on request context.
Separate crosscutting concerns—caching, authentication, logging—from business logic using aspects.
Query language designed for PHP syntax patterns. Write queries that read like native code.
Add Canvas to existing applications incrementally. Legacy URLs remain functional while you adopt Canvas services gradually.
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'));
}
}