rceman / copper

Copper PHP 框架

v1.0.13 2020-11-25 19:01 UTC

This package is auto-updated.

Last update: 2024-09-29 05:08:45 UTC


README

Copper 是一个主要关注简洁性和开发速度的 PHP 框架

版本

Anton (therceman) 开发和维护 - 网页开发者和安全研究员 / 虫害猎人

Twitter Bugcrowd HackerOne StackOverflow Medium Reddit

v1.0 的文档

查看 Copper 骨架,这是一个基于 Copper v1.0 的最小和空应用程序,您可以在此基础上创建新的应用程序

安装

composer require rceman/copper

文件夹结构

 /
  - config
    - routes.php
  - public
    - index.php
  - src
    - Controller
      - HomeController.php
  - templates
    - index.php

配置(入门)

创建文件 /public/index.php

<?php

require dirname(__DIR__) . '/vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new Copper\Kernel();
$kernel->handle(Request::createFromGlobals())->send();

创建文件 /public/.htaccess

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>

配置(高级)

更新文件 /composer.json

{
    ...
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

运行控制台命令

composer update

创建文件 /templates/index.php

<?php /** @var \Copper\Component\Templating\ViewHandler $view */ ?>

<?= $view->render('header') ?>

<body>
<h4><?= $view->out($view->dataBag->get('message')) ?></h4>
</body>

创建文件 /src/Controller/HomeController.php

<?php

namespace App\Controller;

use Copper\Controller\AbstractController;

class HomeController extends AbstractController
{
    public function getIndex()
    {
        $parameters = [
            'head_title' => 'App :: Home',
            'head_meta_description' => 'Application based on Copper PHP Framework',
            'head_meta_author' => '{enter your name here}',
            'message' => 'Welcome to your Application!'
        ];

        return $this->viewResponse('index', $parameters);
    }
}

创建文件 /config/routes.php

<?php

use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

use App\Controller\HomeController;

return function (RoutingConfigurator $routes) {
    $routes->add('index', '/')
        ->controller([HomeController::class, 'getIndex'])
        ->methods(['GET']);
};

配置(可选)

创建文件 /.gitignore

vendor/
composer.lock
composer.phar

框架模块

  • 路由配置模块(使用 config/routes.php)
  • 控制器模块(使用 Controller/*Controller.php)
  • 视图(模板)模块(使用 templates/*.php)

路由配置模块 :: 类

  • [RoutingConfigurator] (Symfony) - 路由配置器
    • 实例
      • $routes - 默认实例
    • 方法(基本)
      • ->add($name, $path) - 添加路由。
        • ->controller($controller) - 向路由添加控制器。
        • ->methods($methods) - 设置此路由限制的 HTTP 方法(例如 'POST'
        • ->requirements($requirements) - 添加路由要求(例如 ['page' => '\d+']
        • ->defaults($defaults) - 添加路由默认值(例如 ['page' => 1]

视图(模板)模块 :: 变量、方法和类

变量

  • $view->request_method - 请求方法 GET 或 POST
  • $view->request_uri - 请求 URI
  • $view->client_ip - 客户端 IP 地址
  • $view->controller_name - 控制器名称
  • $view->route_name - 路由名称

方法

  • $view->routeBag->get($key, $default = null) - 通过键获取路由参数
  • $view->postBag->get($key, $default = null) - 通过键获取 POST 参数
  • $view->queryBag->get($key, $default = null) - 通过键获取 GET 参数
  • $view->cookiesBag->get($key, $default = null) - 通过键获取 Cookies 参数
  • $view->dataBag->get($key, $default = null) - 通过键获取模板参数
  • $view->out($value) - 转义 HTML 代码并作为字符串输出
  • $view->out($array) - 转义 HTML 代码并作为格式化数组输出
  • $view->render($template) - 渲染模板
  • $view->relativePath($name, $parameters = []) - 返回到命名路由的相对路径
  • $view->networkPath($name, $parameters = []) - 返回到命名路由的网络路径
  • $view->url($name, $parameters = [], $withScheme = false) - 返回到命名路由的 URL

  • [ViewOutput] - 输出处理器(转义、格式化等)
    • 实例
      • $view->output - 默认实例
    • 方法
      • ->raw($value) - 输出字符串(不转义)
      • ->js($value) - 转义JavaScript代码并输出字符串
      • ->json($array) - 格式化数组为JSON字符串(不转义)
      • ->text($value) - 转义HTML代码并输出字符串
      • ->dump($array) - 转义HTML代码并以格式化数组输出
  • [ParameterBag] (Symfony) - 请求参数集合
    • 实例
      • $view->routeBag - 路由参数(可迭代)
      • $view->postBag - POST参数(可迭代)
      • $view->queryBag - GET参数(可迭代)
      • $view->cookiesBag - Cookies参数(可迭代)
      • $view->dataBag - 模板参数(可迭代)
    • 方法(基本)
      • ->all() - 返回包含参数的数组
      • ->get($key) - 通过名称返回参数
      • ->set($key, $value) - 通过名称设置参数
      • ->has($key) - 如果参数已定义则返回true
      • ->remove($key) - 移除参数
      • ->getInt($key, $default = 0) - 返回转换成整数的参数值
      • ->getBoolean($key, $default = false) - 返回转换成布尔值的参数值

控制器模块 :: 方法和类

方法

  • $this->viewResponse($view, $parameters = []) - 返回包含渲染视图的Response
  • $this->renderView($view, $parameters = []) - 返回渲染后的视图
  • $this->response($data, $status = 200, $headers = []) - 返回HTTP Response
  • $this->json($data, $status = 200, $headers = []) - 返回使用json_encode的JsonResponse
  • $this->redirectToRoute($route, $parameters = [], $status = 302) - 返回指向给定路由的RedirectResponse
  • $this->redirect($url, $status = 302) - 返回指向给定URL的RedirectResponse

  • [Request] (Symfony) - 请求表示一个HTTP请求
    • 实例
      • $this->request - 默认实例
  • [RequestContext] (Symfony) - 包含当前请求的信息
    • 实例
      • $this->requestContext - 默认实例
  • [RouteCollection] (Symfony) - RouteCollection表示一组Route实例
    • 实例
      • $this->routes - 默认实例