A Fast and Lightweight PHP MVC Framework.
Strife is a fast and lightweight PHP MVC framework designed to simplify web application development. It provides powerful tools and features for building robust and maintainable applications., (*1)
bash
git clone https://github.com/strifejeyz/framework.git
bash
cd framework
bash
composer install
/ โโโ app/ โโโ kernel/ โโโ storage/ โโโ vendor/ โโโ .gitignore โโโ .htaccess โโโ composer.json โโโ composer.lock โโโ favicon.ico โโโ index.php โโโ LICENSE โโโ readme.md โโโ yamato
Define routes in app/routes.php
:, (*2)
get('/users', 'UsersController@index'); post('/store', 'UsersController@store');
'/users'
: The route endpoint.UsersController@index
: The class name and method to call.You can use either get()
or post()
when defining routes., (*3)
To assign a name to a route, use the following syntax:, (*4)
get('users-list -> /users', 'UsersController@index');
If File-based routing is enabled, the app/routes.php
file is ignored. Instead, you can directly call a class and method.
For example, if UsersController
is the class name and index
is the method, you can invoke the endpoint /users/index
.
This accommodates any HTTP request method., (*5)
Create controllers in the app/controllers
directory:, (*6)
use App\Models\User; class HomeController { public function index() { $title = "Home Page"; $users = User::get(); return render('index', compact('title','users')); } }
Define models in the app/models
directory:, (*7)
use Kernel\Database\QueryBuilder as Model; class User extends Model { protected static $table = "users"; }
Place your templates in app/views
:, (*8)
<!DOCTYPE html> <html> <head> <title>{{ $title }}</title> </head> <body>
The Strife PHP Framework includes a powerful template engine for building clean and maintainable views., (*9)
@extend('template_name')
: Extends a base template.@render('template_name')
: Renders a specified template.@stop()
: Marks the end of an extended layout/template.@get('section_name')
: Similar behavior to include().@import('app\models\Users')
: Imports a class{{if(condition)}} ... {{endif}}
: Executes the enclosed code block if the condition is true.{{elseif(condition)}} ... {{endelseif}}
: Checks an alternative condition.{{else}}
: Runs an alternative block if the if
condition fails.{{endif}}
: Marks the end of an if
block.{{for(condition)}} ... {{endfor}}
: Runs a block of code a specified number of times.{{do(condition)}} ... {{enddo}}
: Executes the enclosed block once.{{while(condition)}} ... {{endwhile}}
: Loops while the condition is true.{{foreach(condition)}} ... {{endforeach}}
: Iterates over an array or object.@extend('layouts/frontend')Welcome back, user!, (*10)
@stop
{{if($userIsLoggedIn)}} <p>Welcome back, user!</p> {{else}} <p>Please log in.</p> {{endif}}
{{foreach($items as $item)}} <p>{{ $item }}</p> {{endforeach}}
Use these functions to build flexible and dynamic views efficiently., (*11)
This guide explains how to use the most common methods in the Query Builder class for running queries., (*12)
where
Filters results based on a condition., (*13)
$query = Users::where('column_name', '=', 'value');
field
: The column to filter.a
: The comparison operator (e.g., =
).b
: The value to compare against.join
Performs an inner join with another table., (*14)
$query = Users::join('another_table')->on('table.id = another_table.foreign_id');
table
: The table to join.on
to specify the join condition.get
Fetches the results of the query., (*15)
$results = Users::get();
fetchMode
(optional): Defaults to PDO::FETCH_OBJ
.select
Specifies the columns to retrieve., (*16)
$query = Users::select(['column1', 'column2']);
selection
: An array of column names to select.order
Sorts the results., (*17)
$query = Users::order('column_name', 'ASC');
field
: The column to sort by.order
: ASC
for ascending or DESC
for descending.limit
Limits the number of results., (*18)
$query = Users::limit(10, 5);
number
: The maximum number of results.offset
(optional): The starting point for the results.first
Fetches the first result of the query., (*19)
$firstResult = Users::first();
count
Counts the number of results., (*20)
$total = Users::count();
Here is an example combining some of these methods:, (*21)
$results = Users::select(['id', 'name']) ->where('status', '=', 'active') ->order('created_at', 'DESC') ->limit(10) ->get();
Generate a migration:, (*22)
php yamato create:migration create_users_table
Edit the migration file and run:, (*23)
php yamato db:migrate
Use Yamato CLI for various tasks:, (*24)
php yamato
php yamato clear:logs
: Clear logs directory.php yamato clear:cache
: Clear cached pages.php yamato clear:all
: Clear all backups, logs, and cache.php yamato create:model [name] [table=null]
: Create a model class.php yamato create:controller [name] [empty=bool]
: Create a controller class.php yamato create:migration [name] [table]
: Create a migration class.php yamato create:request [name]
: Create a request class.php yamato create:key
: Generate an application key.php yamato db:migrate
: Install all migrations.php yamato db:rollback
: Rollback all migrations.php yamato db:backup
: Backup table data into a JSON file.php yamato db:restore
: Restore the last made backup.php yamato db:seed
: Perform database seeding.php yamato hash:encode [string]
: Returns the hash of a given string.php yamato encryption:encode [string] [level=1]
: Encrypt a string.php yamato encryption:decode [string] [level=1]
: Decrypt a string.Contributions are welcome! Please follow these steps: 1. Fork the repository. 2. Create a new branch for your feature or bugfix. 3. Submit a pull request with a detailed description of your changes., (*25)
Strife is open-source software licensed under the MIT License., (*26)
For questions or support, please open an issue on GitHub., (*27)