class Controller{ /** @var Request HTTP request object */ public $request; /** @var User|false Authenticated user */ public $user; /** @var Empresa Selected company */ public $empresa; /** @var ControllerPermissions User permissions */ public $permissions; /** @var string Page title */ public $title; /** @var string Controller URI */ public $uri; /** @var MultiRequestProtection CSRF protection */ public $multiRequestProtection;}
Executed when a user is authenticated. This is where most business logic goes.
public function privateCore(&$response, $user, $permissions){ parent::privateCore($response, $user, $permissions); // Check permissions if (!$permissions->allowUpdate) { Tools::log()->warning('no-permission-to-update'); return; } // Handle form submission if ($this->request->method() === 'POST') { $this->handlePost(); } // Load data for view $this->loadData();}
public function publicCore(&$response){ parent::publicCore($response); // No authentication required // Typically used for login pages, public APIs, etc. $this->setTemplate('PublicTemplate');}
By default, controllers require authentication. Only use publicCore() for pages that should be accessible without login.
// Immediate redirect$this->redirect('/OtherController');// Redirect with delay (in seconds)$this->redirect('/OtherController', 3);// Redirect to external URL$this->redirect('https://example.com');
// Access database$sql = 'SELECT * FROM customers WHERE active = true';$data = $this->dataBase->select($sql);// With parameters (safe from SQL injection)$sql = 'SELECT * FROM customers WHERE id = ?';$data = $this->dataBase->select($sql, [$customerId]);// Execute statement$sql = 'UPDATE customers SET active = false WHERE id = ?';$this->dataBase->exec($sql, [$customerId]);
By default, FacturaScripts looks for View/ControllerName.html.twig:
public function privateCore(&$response, $user, $permissions){ parent::privateCore($response, $user, $permissions); // Data available in template as {{ myData }} $this->myData = 'Hello World';}
public function privateCore(&$response, $user, $permissions){ parent::privateCore($response, $user, $permissions); // Use View/CustomTemplate.html.twig $this->setTemplate('CustomTemplate');}
public function privateCore(&$response, $user, $permissions){ parent::privateCore($response, $user, $permissions); // Check permissions if (!$permissions->allowAccess) { Tools::log()->warning('access-denied'); $this->redirect('/Dashboard'); return; } if (!$permissions->allowUpdate) { Tools::log()->warning('no-update-permission'); return; } // Available permission flags: // - allowAccess: Can view the page // - allowUpdate: Can modify data // - allowDelete: Can delete data // - onlyOwner: Can only access own data}
public function privateCore(&$response, $user, $permissions){ parent::privateCore($response, $user, $permissions); if ($this->request->isMethod('POST')) { // Validate token if (!$this->validateFormToken()) { return; } // Process form $this->saveData(); } // Generate new token for form $this->formToken = $this->multiRequestProtection->newToken();}