Sunhill Framework is a simple, fast, and powerful PHP App Development Framework that enables you to develop more modern applications by using MVC (Model - View - Controller) pattern.
- Installation
- Main Structure
- Directories
- Configuration
- URL Scheme Examples
- Controllers
- Views
- Models
- Page Caching
- Download all files and directories (except Examples directory).
- Change the
htaccess.txtfile's name to the.htaccess(important) - Open
System/Config.phpand edit your database, cache, and system settings. - Create your controllers, views and models.
See below for more details.
root
├── App
│ ├── Controllers
│ │ ├── Error.php
│ │ └── Home.php
│ ├── Models
│ │ ├── Error.php
│ │ └── Home.php
│ └── Views
│ ├── Error.php
│ └── Home.php
├── Core
│ ├── App.php
│ ├── Controller.php
│ ├── Model.php
│ └── View.php
├── Public
│ ├── cache
│ ├── css
│ ├── img
│ └── js
├── System
│ ├── Config.php
│ ├── SunCache.php
│ ├── SunDB.php
│ └── SunSitemap.php
├── .htaccess
├── index.php
└── init.php
App/Controller: Create your custom controllers in this folder.
App/Models: Create your custom models in this folder.
App/Views: Create your custom views in this folder.
Core: This folder contains the main app, model, view, and controller files. All custom model, view, and controller files inherit from these. Don't make changes to these files if don't need really.
Public: Upload all your custom files (css, js, img, bootstrap, etc.) into this folder. Your custom views will use these files.
System: This folder contains system classes and config files. Make your changes only in the config file.
Open System/Config.php file and make your changes.
Database Settings:
define ('DB_HOST', 'localhost'); // database host
define ('DB_PORT', '3306'); // database port
define ('DB_DBNAME', ''); // database name
define ('DB_USERNAME', ''); // database username
define ('DB_PASSWORD', ''); // database passwordCache Settings:
$cacheConfig = [
'cacheDir' => '/../Public/cache', // cache folder path
'fileExtension' => 'html', // cache file extension
'storageTime' => 24*60*60, // storage time (seconds)
'contentMinify' => true, // content minification
'showTime' => true, // show page load time
'sefUrl' => true // website sef url status
];System Settings:
define ('SYS_PHPERR', true); // php errors (show or hide, true / false)
define ('SYS_SYSERR', false); // system errors (shor or hide, true / false)
define ('SYS_PGCACHE', false); // page caching (true / false)
define ('SYS_CHEXCLUDE', []); // excluded pages for page caching (array)
define ('SYS_HOMEPAGE', 'home'); // home page (index, home, main, etc.)
define ('SYS_ERRPAGE', 'error'); // error page (if requested page does not exist, redirect to this page)Sample URL:
https://www.web_address.com/[controller_name]/[method_name]/[parameters]
Call a page (controller):
https://www.sunhillint.com/user
This address will call the User controller.
Call a page (controller) with action (method):
https://www.sunhillint.com/user/list
This address will call the User controller and execute list method.
Call a page (controller) with action (method) and parameters:
https://www.sunhillint.com/user/update/3
This address will call the User controller and execute update method with 3 parameter.
Controllers respond to user actions (submitting forms, clicking links, etc.). Controllers are classes that extend the Core\Controller class.
Controllers are stored in the App/Controllers folder. A sample Home and Error controllers are included. Controller classes need to be in the App/Controllers namespace. You can add subdirectories to organize your controllers, so when adding a route for these controllers you need to specify the namespace.
Sample controller file content (without database access, static page):
public function show() {
require_once ($this->view); // include view file (with $result content)
}Sample controller file content (with database access, dynamic page):
public function show() {
if (!empty($this->model)) { // if this page needs database
$result = ($this->model)->show(); // call model class' show method
}
require_once ($this->view); // include view file (with $result content)
}Controller classes contain methods that are the actions. To create an action, add the method name in the controller and use this into the URL (route parameters).
Sample URL:
https://www.web_address.com/[controller_name]
All pages must have a controller file and show method must be in it.
Views are used to display information. View files go in the App/Views folder. No database access or anything like that should occur in a view file.
Views extend the Core\View class and if your view (page) needs database access, your values will be forwarded from the controller file.
Sample view file content for multiple records (inside html tags):
foreach ($result as $row) {
echo "...";
}or (for one record):
echo $result[0]['content'];All pages must have a View file.
Models are used to get and store data in your application. They know nothing about how this data will be presented in the views. Models extend the Core\Model class and use PDO to access the database (including SunDB class). They're stored in the App/Models folder.
All pages must have a model file (even if it's empty) and show method must be in it.
Using SunDB PDO Class through main model:
$result = $this->query('SELECT * FROM table_name'); // send query to the main model
return $result; // return the result to the controllerUsing SunDB PDO Class directly:
$result = ($this->pdo)->select('table_name')
->run(); // select all records from the table
return $result; // return the result to the controllerPlease see SunDB PDO Class for detailed usage.
The framework includes a special page caching system (SunCache class).
Caching system can be activate/deactivate in System/Config.php file:
define ('SYS_PGCACHE', true); // page caching (true / false)Excluded pages can be defined in System/Config.php file:
define ('SYS_CHEXCLUDE', ['home', 'error']); // excluded pages for page caching (array)Cache settings can be changed in System/Config.php file:
$cacheConfig = [
'cacheDir' => '/../Public/cache', // cache folder path
'fileExtension' => 'html', // cache file extension
'storageTime' => 24*60*60, // storage time (seconds)
'contentMinify' => true, // content minification
'showTime' => true, // show page load time
'sefUrl' => true // website sef url status
];Please see SunCache Class for detailed usage.