https://github.com/strifejeyz/framework
A Fast and Lightweight PHP MVC Framework.
https://github.com/strifejeyz/framework
mvc-architecture mvc-framework oop php php-7 pretty-urls strife strife-framework template-engine
Last synced: 6 months ago
JSON representation
A Fast and Lightweight PHP MVC Framework.
- Host: GitHub
- URL: https://github.com/strifejeyz/framework
- Owner: strifejeyz
- License: mit
- Created: 2017-05-21T05:18:14.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-12-19T20:53:33.000Z (10 months ago)
- Last Synced: 2025-04-09T20:03:51.838Z (6 months ago)
- Topics: mvc-architecture, mvc-framework, oop, php, php-7, pretty-urls, strife, strife-framework, template-engine
- Language: PHP
- Homepage: https://strifejeyz.github.io/framework/
- Size: 3.34 MB
- Stars: 4
- Watchers: 5
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Strife PHP Framework Documentation
## Introduction
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.## Features
- **Smart Routing**: Flexible and intuitive routing for handling HTTP requests.
- **Multi-Database Support**: Compatible with various database systems.
- **Query Builder**: Simplifies database interactions.
- **Form Builder**: Easy generation and validation of forms.
- **Migration Management**: Manage database schema changes effortlessly.
- **Encryption & Caching**: Built-in tools for secure and optimized applications.
- **Built-in CLI**: Command-line tools for rapid development.
- **Template Engine**: For clean and maintainable HTML views.## Requirements
- PHP 7.0 or higher
- A web server (e.g., Apache or Nginx)
- Composer (for dependency management)## Installation
1. Clone the repository:
```bash
git clone https://github.com/strifejeyz/framework.git
```
2. Navigate to the project directory:
```bash
cd framework
```
3. Install dependencies:
```bash
composer install
```## Directory Structure
```
/
├── app/
├── kernel/
├── storage/
├── vendor/
├── .gitignore
├── .htaccess
├── composer.json
├── composer.lock
├── favicon.ico
├── index.php
├── LICENSE
├── readme.md
└── yamato
```## Usage
### Routing
Define routes in `app/routes.php`:
```php
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.
To assign a name to a route, use the following syntax:
```php
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.### Controllers
Create controllers in the `app/controllers` directory:
```php
use App\Models\User;class HomeController
{
public function index()
{
$title = "Home Page";
$users = User::get();
return render('index', compact('title','users'));
}
}
```### Models
Define models in the `app/models` directory:
```php
use Kernel\Database\QueryBuilder as Model;class User extends Model
{
protected static $table = "users";
}
```### Views
Place your templates in `app/views`:
```html{{ $title }}
- {{$user->firstname}}
{{foreach($users as $user)}}
{{endforeach}}
```
### Template Engine
The Strife PHP Framework includes a powerful template engine for building clean and maintainable views.
#### Extending and Rendering Templates
- **`@extend('template_name')`**: Extends a base template.
- **`@render('template_name')`**: Renders a specified template.
#### Section Management
- **`@stop()`**: Marks the end of an extended layout/template.
- **`@get('section_name')`**: Similar behavior to include().
### Importing and Conditionals
- **`@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.
#### Loops and Iterations
- **`{{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.
### Example Usage
#### Extending a Template
```php
@extend('layouts/frontend')
Welcome back, user!
@stop
```
#### Conditional Rendering
```php
{{if($userIsLoggedIn)}}
Welcome back, user!
{{else}}
Please log in.
{{endif}}
```
#### Loop Example
```php
{{foreach($items as $item)}}
{{ $item }}
{{endforeach}}
```
Use these functions to build flexible and dynamic views efficiently.
### Query Builder
This guide explains how to use the most common methods in the Query Builder class for running queries.
#### `where`
Filters results based on a condition.
```php
$query = Users::where('column_name', '=', 'value');
```
- **Parameters**:
- `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.
```php
$query = Users::join('another_table')->on('table.id = another_table.foreign_id');
```
- **Parameters**:
- `table`: The table to join.
- **Chaining**:
- Use `on` to specify the join condition.
#### `get`
Fetches the results of the query.
```php
$results = Users::get();
```
- **Parameters**:
- `fetchMode` (optional): Defaults to `PDO::FETCH_OBJ`.
#### `select`
Specifies the columns to retrieve.
```php
$query = Users::select(['column1', 'column2']);
```
- **Parameters**:
- `selection`: An array of column names to select.
#### `order`
Sorts the results.
```php
$query = Users::order('column_name', 'ASC');
```
- **Parameters**:
- `field`: The column to sort by.
- `order`: `ASC` for ascending or `DESC` for descending.
#### `limit`
Limits the number of results.
```php
$query = Users::limit(10, 5);
```
- **Parameters**:
- `number`: The maximum number of results.
- `offset` (optional): The starting point for the results.
#### `first`
Fetches the first result of the query.
```php
$firstResult = Users::first();
```
#### `count`
Counts the number of results.
```php
$total = Users::count();
```
#### Example Usage
Here is an example combining some of these methods:
```php
$results = Users::select(['id', 'name'])
->where('status', '=', 'active')
->order('created_at', 'DESC')
->limit(10)
->get();
```
### Database Migrations
Generate a migration:
```bash
php yamato create:migration create_users_table
```
Edit the migration file and run:
```bash
php yamato db:migrate
```
## Command-Line Interface (CLI)
Use Yamato CLI for various tasks:
```bash
php yamato
```
### Common Commands
#### Cleanup
- `php yamato clear:logs`: Clear logs directory.
- `php yamato clear:cache`: Clear cached pages.
- `php yamato clear:all`: Clear all backups, logs, and cache.
#### Generators
- `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.
#### Database
- `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.
#### Security
- `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.
## Contributing
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.
## License
Strife is open-source software licensed under the [MIT License](LICENSE).
## Support
For questions or support, please open an issue on [GitHub](https://github.com/strifejeyz/framework/issues).