romagny13/micro-php

该包最新版本(0.2.1)没有可用的许可证信息。

Micro PHP 是一个包含路由器、依赖注入、Twig 支持等的微框架。易于使用,用于创建网站或API。

0.2.1 2017-05-02 23:33 UTC

This package is not auto-updated.

Last update: 2024-09-23 16:42:15 UTC


README

Micro PHP 是一个包含路由器、依赖注入、Twig 支持等的微框架。易于使用,用于创建网站或API。

  • 路由器
  • 中间件
  • 注入器(依赖注入)
  • 渲染器(Twig
  • 响应服务

扩展

  • 闪存消息(Flash
  • CSRF保护(Csrf
  • 表单验证PHPValidator
  • 还有更多(例如,易于与Eloquent ORM一起使用)

安装

composer require romagny13/micro-php

文档

示例

Micro演示(博客)

<?php
require __DIR__ . '/../vendor/autoload.php';

session_start();

$settings = [
    'base' => 'https://:8080/',
    'templates' => __DIR__.'/../templates',
    'db' => [
        'driver' => 'mysql',
        'host' => 'localhost',
        'database' => 'blog',
        'username' => 'root',
        'password' => '',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ]
];
$app = new \MicroPHP\App($settings);
$router = $app->router;

// dependencies
require __DIR__ . '/../src/dependencies.php';

// routes
require __DIR__ . '/../src/routes.php';
//
$router->run();

dependencies.php

<?php
$injector = $app->injector;

// Eloquent
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($settings['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();


$injector
    ->register('db', $capsule)
    ->register('auth', \App\Auth\Auth::class)
    ->register('AuthMiddleware', \App\Middleware\AuthMiddleware::class, [$injector])
    ->register('csrf', \MicroPHP\Csrf\Csrf::class)
    ->register('CheckCsrfMiddleware', \App\Middleware\CheckCsrfMiddleware::class, [$injector])
    ->register('CsrfMiddleware', \App\Middleware\CsrfMiddleware::class, [$injector])
    ->register('flash', \MicroPHP\Flash\Flash::class)
    ->register('HomeController', \App\Controllers\HomeController::class, [$injector])
    ->register('PostController', \App\Controllers\PostController::class, [$injector])
    ->register('AuthController', \App\Controllers\AuthController::class, [$injector]);


// add variables to twig
$renderer = $app->renderer;
$renderer->twig->addGlobal('flash', $injector->get('flash'));
$renderer->twig->addGlobal('auth',[
    'isLogged' => $injector->get('auth')->isLogged(),
    'user' => $injector->get('auth')->user()
]);

$renderer->twig->addFunction(new Twig_SimpleFunction('canAddPost',function() use($injector){
    return $injector->get('auth')->canAddPost();
}));

$renderer->twig->addFunction(new Twig_SimpleFunction('canEditPost',function($post) use($injector){
    return $injector->get('auth')->canEditPost($post);
}));

routes.php

<?php

$router->get('/', 'HomeController:index')->setName('home');

$router->group('/auth', function(){
    $this->get('/signup', 'AuthController:getSignup')->setName('auth.signup');
    $this->post('/signup', 'AuthController:postSignup');
    $this->get('/signin', 'AuthController:getSignin')->setName('auth.signin');
    $this->post('/signin', 'AuthController:postSignin');
    $this->get('/signout', 'AuthController:getSignout')->setName('auth.signout');
});

$router->group('/posts', function(){
    $this->get('', 'PostController:index')->setName('posts.index');
    $this->get('/create', 'PostController:getCreate')->setName('posts.create')->add('AuthMiddleware');
    $this->post('/create', 'PostController:postCreate');
    $this->post('/delete', 'PostController:deletePost')->setName('posts.delete');
});

$router->get('.*', function($route){
    $route->router->go('home');
});

$router
    ->add($injector->get('CheckCsrfMiddleware'))
    ->add($injector->get('CsrfMiddleware'));