mu

The 4-LOC µ (mu) PHP Microframework. Just cuz.

  • 所有者: jeremeamia/mu
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

The µ PHP Microframework

Code Climate

A "real" microframework that fits in just 4 lines of code.

The "microframeworks" out there weren't micro enough for me, so I brushed up on
some of my code golfing skills to create µ.

Check out the code!

Features

These 4 LOC come jam-packed with features!

Easy, regex-based routing system

Follows the well-established route-to-callable microframework pattern.

echo (new µ)
    ->get('/hello', function ($app) {
        return "<p>Hello, world!</p>";
    })
    ->run();

Allows you to access parameters from the URL.

echo (new µ)
    ->get('/hello/(?<name>\w+)', function ($app, $params) {
        return "<p>Hello, {$params['name']}!</p>";
    })
    ->run();

Supports all your favorite HTTP verbs.

echo (new µ)
    ->delete('/user/(?<id>\d+)', $fn)
    ->get('/user/(?<id>\d+)', $fn)
    ->head('/user/(?<id>\d+)', $fn)
    ->patch('/user/(?<id>\d+)', $fn)
    ->post('/users', $fn)
    ->put('/user/(?<id>\d+)', $fn)
    ->run();

Supports wildcard verbs too, because sometimes you are just making a web page
and you really don't care about esoteric HTTP practices.

echo (new µ)
    ->any('/', $fn)
    ->run();

Simple, but powerful, dependency injection container

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

echo (new µ)
    ->cfg('log.channel', 'your-app')
    ->cfg('log.handler', function ($app) {
        return new StreamHandler('path/to/your.log', Logger::WARNING);
    })
    ->cfg('log', function ($app) {
        $log = new Logger($app->cfg('log.channel'));
        $log->pushHandler($app->cfg('log.handler'));
        return $log;
    })
    ->get('/hello/(?<name>\w+)', function ($app, $params) {
        $app->cfg('log')->addDebug("Said hello to {$params['name']}.");
        return "<p>Hello, {$params['name']}!</p>";
    })
    ->run();

A truly elegant and fluent interface

See previous example (I'm lazy).

Built-in templating system, free of {}

Templates are just PHP files—no mustaches and no frills.

<!-- templates/hello.php -->
<html>
  <head>
    <title>World Greeter</title>
  </head>
  <body>
    <p><?= ucfirst($greeting) ?>, <?= $name ?>!</p>
  </body>
</html>
// index.php
echo (new µ)
    ->cfg('views', __DIR__ . '/templates')
    ->any('/hello/(?<name>\w+)', function ($app, $params) {
        return $app->view('hello', [
            'greeting' => 'howdy',
            'name'     => $params['name'],
        ]);
    })
    ->run();

No twigs, plates, or blades to cut you or poke you.

Design constraints

  • Must have at least a Router, Container, and Templating System as features.
  • Must attempt to incorporate usage patterns (e.g., chainable methods, closures
    as controllers) that resemble other contemporary microframeworks.
  • Must work with error_reporting set to -1 (all errors reported).
  • Must not exceed 4 lines of code (LOC), where each line is <= 120 characters.
  • Must not have dependencies on other packages.
  • May break traditional coding conventions for the sake of brevity.
  • Must be hand-written.

It works, but it's really just a joke.

Don't use this in production, or really anywhere. It's just for fun. :smile:

If you want to use a production-quality microframework, try one of these:

Is there a PHP 7 Version?

Not yet. Waiting for 7.4 with shorthand closures before I attempt anything.

概覽

名稱與所有者jeremeamia/mu
主編程語言PHP
編程語言PHP (語言數: 1)
平台
許可證MIT License
發布數2
最新版本名稱2.0.0 (發布於 )
第一版名稱1.0.0 (發布於 )
創建於2015-04-15 22:23:26
推送於2023-03-27 20:46:18
最后一次提交2023-03-27 13:39:25
星數279
關注者數11
派生數11
提交數27
已啟用問題?
問題數5
打開的問題數0
拉請求數3
打開的拉請求數0
關閉的拉請求數3
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?
去到頂部