s-damian / damian-php
The skeleton application for the Damian PHP Framework.
Installs: 12
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 2
Forks: 2
Open Issues: 0
Type:project
pkg:composer/s-damian/damian-php
Requires
- php: ^8.1
- s-damian/damian-php-fw: ^1.0
- swiftmailer/swiftmailer: 6.3.*
- vlucas/phpdotenv: 5.3.*
Requires (Dev)
- guzzlehttp/guzzle: 6.3.*
- phpstan/phpstan: ^1.10
- phpunit/phpunit: 9.5.*
README
Damian PHP Framework - Skeleton
A powerful PHP Framework in PHP 8.4 - Beautiful code & Elegant syntax
SGBDR: Compatible with MySQL / MariaDB / PostgreSQL
This Open Source Framework is developed by Stephen Damian
Here you have the source codes of the skeleton.
Kernel source code
The kernel source codes for this Framework are in this package:
Damian PHP Framework - Kernel - [damian-php-fw]
Getting Started
Requirements
- PHP
8.2||8.3||8.4
Create a new project
- You can create a new project via the
composer create-projectcommand:
composer create-project s-damian/damian-php example-app-name
Configuration
- Create your
.envfile:
cd /your-path/example-app-name
cp .env.example .env
- You have to configure the
.envfile.
Configuration - HTTP Server
- You have to configure your web server (Linux / Nginx or Apache / MySQL or PostgreSQL / PHP).
You have an example Nginx Vhost configuration in docs/nginx/vhost-example.conf file.
After configuring your HTTP server (Nginx), you can run these demo URLs
- http://www.your-domain.com
- http://www.your-domain.com/contact
- http://www.your-domain.com/blog
- http://www.your-domain.com/blog/slug-1
- http://www.your-domain.com/callable-example
- http://www.your-domain.com/sitemap
Documentation
- The documentation for this Framework is in
docs/DamianPhpfolder.
Syntax examples
Routing
An example of a route listing:
<?php Router::group(['namespace' => 'Front\\', 'prefix' => 'website'], function () { Router::post( '/contact', 'Contact@sendMail', ['name' => 'contact_send-mail'] ); Router::group(['prefix' => '/blog'], function () { Router::get( '', 'Article@index', ['name' => 'article_index'] ); Router::get( '/{slug}', 'Article@show', ['name' => 'article_show'] ); }); });
Retrieve a URL with the name of a route:
<?php echo route('article_show', ['slug' => $article->slug]); ?>
ORM (compatible with MySQL / MariaDB and PostgreSQL)
Active Record Pattern
Example to insert an article (using the setters magic methods):
<?php $article = new Article(); $article->setTitle('Article 1'); $article->setDescription('Description'); $article->setContent('Content'); $article->setSlug('slug-1'); $article->save();
Example to update an article (using the fill magic method):
<?php $article = Article::load()->findOrFail($id); $article->fill(Request::getPost()->all()); $article->save();
Fetch multiple rows
Example using the when magic method:
<?php $articles = Article::load() ->select('title, description, content') ->where('slug', '!=', 'article-2') ->when((int) Input::get('status') === 1, function ($query) { return $query->where('status', '=', 1); }) ->findAll();
ORM with Pagination
To paginate an item listing:
<?php $article = new Article(); $articles = $article->where('status', '=', 1)->paginate(20); $pagination = $article->getPagination(); foreach ($articles as $article) { echo $article->title; } echo $pagination->render(); echo $pagination->perPageForm();
Pagination
<?php $pagination = new Pagination(); $pagination->paginate($countElements); $limit = $pagination->getLimit(); $offset = $pagination->getOffset(); // Here your list of items with a loop. echo $pagination->render(); echo $pagination->perPageForm();
Validation
Validation example (you can do method injection):
<?php public function update(Validator $validator, int $id) { $validator->rules([ // Add your rules in the array. 'title' => ['max' => 190, 'required' => true], 'description' => ['max' => 190, 'required' => true], 'content' => ['required' => true], ]); if ($validator->isValid()) { // Success } else { // Error $validator->getErrorsHtml(); } }
You can add custom validation rules. Example:
<?php Validator::extend('strictly_equal', function ($input_name, $input_value, $parameters) { return (string) $input_value === (string) $parameters; });