Mardira Framework is a PHP framework Model Controller Based for building web applications and APIs. It is designed to be simple, and fast.
- Requirements
- Structure Folders
- Installation
- Usage
- Start Server
- Create .env
- Create Controller
- Create Model
- Create Route
- Create Migration
- Run Migration
- Refresh Migration
- Refresh Migration With Seed
- Create Seeder
- Run Seeder
- Run Seeder Specific
- Create Authetication
- Refresh Authetication
- Update Framework Version
- Controller
- Model
- Migration
- Seeder
- Middleware
- Route
- Query Builder
- PHP = 7.4
- MySQL >= 5.7.8
- Apache >= 2.4.41
- Composer >= 2.0.9
mardira-framework
├── App
│ ├── Controllers
│ │ ├── AuthController.php
│ ├── Core
│ │ ├── Commands
│ ├── Database
│ │ ├── Migrations
│ │ │ ├── 2023_01_31_xxxxxx_create_table_users.php
│ │ │ ├── 2023_01_31_xxxxxx_create_table_roles.php
│ │ ├── Seeders
│ │ │ ├── GlobalSeeder.php
│ ├── Helpers
│ ├── Middleware
│ ├── Models
│ ├── Packages
│ ├── Routes
│ │ ├── Api.php
You can create a new project using composer
composer create-project mardira/mardira-framework <your_project_name>
or you can clone this project
- Clone this repo to your local machine using `git clone
git clone https://github.com/Bootcamp-STMIK-Mardira-Indonesia/mardira-framework.git
Then, install the dependencies using composer
composer install
or
composer update
php mardira serve
or
php mardira serve --port=<your_port>
You can create .env file using command
php mardira make:env
php mardira make:controller ControllerName
php mardira make:model ModelName
php mardira make:route route_name --controller=ControllerName
php mardira make:migration create_table_table_name
If database not exist, will automatically create database from .env
php mardira migrate
php mardira migrate:refresh
php mardira migrate:refresh --seed
php mardira make:seeder SeederName
php mardira db:seed
php mardira db:seed --class=SeederName
php mardira make:auth
php mardira make:auth --refresh
php mardira update
Create controller use
php mardira make:controller ControllerName
, here is example controller
<?php
namespace App\Controllers;
use App\Core\Controller;
class HomeController extends Controller
{
public function index()
{
$this->response(200,[
'message' => 'Hello World'
]);
}
}
to use controller, you can add route in
App/Routes/Api.php
<?php
use App\Core\Route;
use App\Controllers\HomeController;
Route::get('/home', [HomeController::class, 'index']);
You can use response in controller
$this->response(200,[
'message' => 'Hello World'
]);
return json expected
{
"message": "Hello World"
}
another response example 409
$this->response->json(409,[
'message' => 'Conflict'
]);
Create model use
php mardira make:model ModelName
, here is example model
<?php
namespace App\Models;
use App\Core\Model;
class User extends Model
{
protected $table = 'users';
protected $primaryKey = 'id';
}
to use model, you can add model in
App/Controllers/ControllerName.php
<?php
namespace App\Controllers;
use App\Core\Controller;
use App\Models\User;
class HomeController extends Controller
{
public function index()
{
$user = User::all();
$this->response(200,[
'message' => 'Hello World',
'data' => $user
]);
}
}
Create migration use
php mardira make:migration create_table_table_name
, here is example migration
<?php
namespace App\Database\Migrations;
use App\Core\Migration;
return new class extends Migration
{
public function up()
{
$this->schema->create('users', function ($table) {
$table->increment('id');
$table->string('name', 50);
$table->string('email',50)->unique();
$table->string('password', 64);
$table->timestamps();
});
}
public function down()
{
$this->schema->dropIfExists('users');
}
}
Create seeder use
php mardira make:seeder SeederName
, here is example seeder
<?php
namespace App\Database\Seeders;
use App\Core\Seeder;
use App\Core\QueryBuilder as DB;
class UserSeeder extends Seeder
{
public function run()
{
$data = [
[
'name' => 'Administrator',
'username' => 'admin',
'email' => '[email protected]',
'password' => password_hash('password', PASSWORD_DEFAULT),
'role_id' => 1,
],
[
'name' => 'User',
'username' => 'user',
'email' => '[email protected]',
'password' => password_hash('password', PASSWORD_DEFAULT),
'role_id' => 2,
]
];
DB::table('users')->insert($data);
}
}
Create middleware use
php mardira make:middleware MiddlewareName
, here is example middleware
<?php
namespace App\Middleware;
use App\Core\Middleware;
use App\Core\Auth;
class AuthMiddleware extends Middleware
{
public function handle()
{
if (Auth::check()) {
return $next();
}
return $this->response(401, ['message' => 'Unauthorized']);
}
}
to use middleware, you can add middleware in route
Router::get('/schedules', [ScheduleController::class, 'index'], [AuthMiddleware::class]);
You can add route in
App/Routes/Api.php
<?php
use App\Core\Route;
Router::get('/home', [HomeController::class, 'index']);
You can add route group in
App/Routes/Api.php
<?php
use App\Core\Route;
Router::controller(ProductController::class)->group(function () {
Router::post('/products/store', 'store');
});
use App\Core\QueryBuilder as DB;
DB::table('users')->select('name', 'email')->get();
// equal
DB::table('users')->where('id', 1)->get();
DB::table('users')->where('id', 1, '>')->get();
DB::table('users')->where('id', 1, '<')->get();
DB::table('users')->where('id', 1, '>=')->get();
DB::table('users')->where('id', 1, '<=')->get();
DB::table('users')->where('id', 1, '!=')->get();
DB::table('users')->where('id', 1, '<>')->get();
// like
DB::table('users')->where('name', 'admin', 'like')->get();
DB::table('users')->where('name', 'admin', 'not like')->get();
DB::table('users')->orWhere('id', 1)->get();
DB::table('users')->orWhere('id', 1, '>')->get();
DB::table('users')->orWhere('id', 1, '<')->get();
DB::table('users')->orWhere('id', 1, '>=')->get();
DB::table('users')->orWhere('id', 1, '<=')->get();
DB::table('users')->orWhere('id', 1, '!=')->get();
DB::table('users')->orWhere('id', 1, '<>')->get();
DB::table('users')->whereIn('id', [1,2,3])->get();
DB::table('users')->whereNotIn('id', [1,2,3])->get();
DB::table('users')->whereNotIn('id', [1,2,3])->get();
DB::table('users')->whereNull('id')->get();
DB::table('users')->whereNotNull('id')->get();
DB::table('users')->orderBy('id', 'desc')->get();
DB::table('users')->orderBy('id', 'asc')->get();
DB::table('users')
->join('roles', 'users.role_id', '=', 'roles.id')
->select('users.*', 'roles.name as role_name')
->get();
DB::table('users')
->groupBy('role_id')
->get();
DB::table('users')->insert([
'name' => 'user',
'email' => '[email protected]',
'password' => password_hash('password', PASSWORD_DEFAULT),
]);
DB::table('users')->where('id', 1)->update([
'name' => 'user',
'email' => '[email protected]',
]);
DB::table('users')->where('id', 1)->delete();
DB::table('users')->count();
Reach out to me at one of the following places!
- Website at
demostmikmi.com