Add a new page
Create the page
Open the packages/Acme/etc/pages.php file, and add a new page:
<?php
$config = [
Core_Page::TYPE => [
/* ... */
'/contact.html' => [
'class' => Acme_Page_Contact::class, // Optional
'content' => 'content/contact',
'meta_title' => 'Contact',
'meta_description' => 'Contact our team',
'telephone' => '+33 610506070',
],
/* ... */
],
];
Warning:
- For a route with an extension, the first slash is required:
/slug.html - For a route without an extension, the first and last slashes are required:
/slug/
Create a new class: packages/Acme/Page/Contact.php
<?php
declare(strict_types=1);
class Acme_Page_Contact extends Core_Page
{
public function execute(): void
{
$this->setAddress("459 Walker Cape, Powellchester, OL16 3NA");
}
public function getEmail(): string
{
return 'john.doe@example.com';
}
}
Finally, create the template file: packages/Acme/template/content/contact.phtml
<h2>Contact us!</h2>
<p>Telephone: <?= App::escapeHtml($this->getTelephone()) ?></p>
<p>Address: <?= App::escapeHtml($this->getAddress()) ?></p>
<p>Email: <?= App::escapeHtml($this->getEmail()) ?></p>
Access to /contact.html in your browser!
System Options
| Option | Description | Type |
|---|---|---|
| class | The page class with custom logic and methods | string |
| _http_code | HTTP response status code | integer |
| _headers | Custom headers | array |
HTTP response status code
You can force the page HTTP response code with the _http_code parameter:
<?php
$config = [
Core_Page::TYPE => [
/* ... */
'/teapot.html' => [
'_http_code' => 418,
'class' => Acme_Page_Teapot::class,
'content' => 'content/teapot',
'meta_title' => 'Teapot',
],
/* ... */
],
];
Or in the page class:
<?php
declare(strict_types=1);
class Acme_Page_Teapot extends Core_Page
{
public function execute(): void
{
$this->setData('_http_code', 418);
}
}
Custom headers
The _headers parameter allow you to send custom headers:
<?php
$config = [
Core_Page::TYPE => [
/* ... */
'default' => [
'_headers' => [
'Content-Security-Policy' => 'default-src \'self\'',
'X-Frame-Options' => 'DENY',
'X-XSS-Protection' => '1; mode=block',
'X-UA-Compatible' => 'IE=Edge',
'X-Content-Type-Options' => 'nosniff',
],
],
/* ... */
],
];
Or in the page class:
<?php
declare(strict_types=1);
class Acme_Page_Teapot extends Core_Page
{
public function execute(): void
{
$this->setData(
'_headers',
array_merge(
$this->getData('_headers') ?: [],
['X-MageWork' => 1]
)
);
}
}
Redirection
<?php
$config = [
Core_Page::TYPE => [
/* ... */
'/old-page.html' => [
'_http_code' => 301,
'_headers' => [
'location' => '/new-page.html',
],
],
/* ... */
],
];
- Installation
- Configuration
- Add a new package
- Add a new HTML page
- Serve any type of file
- Rewrite a route
- Add a new block
- Data assignment
- Objects and class fallback
- Database
- Console Commands
- Framework tools
- Custom shared libraries
- External libraries with composer
- Templating best practices
- Forms
- Captcha
- Write content in Markdown
- Static Site Generator