该软件包最新版本(v1.1)没有提供许可证信息。

PHP框架DFG

v1.1 2020-06-29 18:13 UTC

This package is auto-updated.

Last update: 2024-09-29 05:02:27 UTC


README

PHP框架DFG

DFG Studio

我们介绍PHP快速开发框架DFG。该框架的主要目标是

  • 基于MVC模式的简化开发
  • 简化资源路由
  • 简化使用Doctrine框架进行数据访问

该框架使用LGPL v2.1许可证。其源代码是开源的,可在GitHub上自由使用和修改。欢迎提出建议 :)

版本

v1.9 [当前]

增加字符串到日期和日期时间的转换方法

v1.8

增加ImageResize类以进行图像缩放

v1.7

增加Symfony Serializer作为依赖

v1.6

邮件发送时选择模板

v1.5

支持通过routing.php进行配置的RestFul操作

v1.4

增加电子邮件工具发送附件的选项

v1.3

增加MySQL YEAR函数

v1.2

更新Util类

v1.1

加载实体和外部服务

v1.0

框架的首次稳定版本

安装

DFG_FW可在Composer/Packagist获取,只需将其添加到项目的composer.json文件中

"dfgstudio/dfg_fw": "1.*"

或者在终端中

composer require dfgstudio/dfg_fw

文件结构应如下

  • 项目根目录
    • [D] app
      • [D] controllers: 控制器目录(MVC控制器)
      • [D] models: 数据库实体(MVC模型)
      • [D] services: 实体服务类(通过实体访问和管理数据)
      • [D] templates: 页面模板
      • [D] views: 显示生成内容的页面(MVC视图)
    • [D] config
      • [F] config.php: 项目配置
      • [F] routing.php: 项目路由
    • [D] resources: 通用文件(.txt文件,电子邮件模板等)
    • [D] tmp*: 临时文件
      • [D] cache*: 缓存文件
    • [D] webapp: 网页文件(公开访问)

[D] 目录

[F] 文件

* 自动创建目录

然后,需要在项目根目录创建.htaccess文件,内容如下

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule     ^$    webapp/     [L]
    RewriteRule     (.*)/$ webapp/$1  [L]
    RewriteRule     (.*) webapp/$1    [L]
</IfModule>

如果需要,可以在.htaccess中添加其他内容,但需保持上述基本重定向信息。

同样,需要在webapp中创建.htaccess文件

<IfModule mod_rewrite.c>
    RewriteEngine   On
    RewriteCond     %{REQUEST_FILENAME} !-f
    RewriteCond     %{REQUEST_FILENAME} !-d

    RewriteRule     ^(.*)$  index.php?url=$1    [PT,L,QSA]

    ErrorDocument 400 error.html?err=404
    ErrorDocument 401 error.html?err=401
    ErrorDocument 403 error.html?err=403
    ErrorDocument 404 error.html?err=404
    ErrorDocument 500 error.html?err=500
    ErrorDocument 503 error.html?err=503
</IfModule>

如所见,上述规则将重定向到两个文件:webapp/index.phpwebapp/error.php。第一个文件包含框架的初始指令,应为

<?php

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));

require_once(ROOT . DS . 'vendor' . DS . 'dfgstudio' . DS . 'dfg_fw' . DS . 'src' .  DS . 'init.php');

第二个文件包含项目的错误页面,可以自由创建,使用发送的参数err来识别错误。

config/config.php文件包含项目的配置,如下例所示

<?php

//Ambiente de desenvolvimento (ativa ou não a exibição de erros)
define('DEVELOPMENT_ENVIRONMENT', true);

//Timezone
date_default_timezone_set("America/Sao_Paulo");

//Configurações do banco de dados
define('DB_DRIVER', 'pdo_mysql');
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'meudb');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_CHARSET', 'latin1');
define('DB_OPTIONS', serialize(array(
    1002 => 'SET NAMES utf8'
)));

//É possível definir a utilização de entidades e serviços externos por meio das seguintes constantes
define('ENTITY_DIR', ROOT . DS . '../<MINHA BIBLIOTECA>/app/models/');
define('SERVICE_DIR', ROOT . DS . '../<MINHA BIBLIOTECA>/app/services/');

//Configurações do serviço de e-mail
define('EMAIL_HOST', 'meuservidorsmtp.com.br');
define('EMAIL_PORT', '587');
define('EMAIL_USER', 'meuemail@teste.com.br');
define('EMAIL_PASSWD', 'minhasenha');
define('EMAIL_NOREPLY', 'meuemail@teste.com.br');

//Chave de criptografia (16 caracteres)
define('SECURITY_KEY', '1234567890ABCDFG');

//Context path
define('CONTEXT_PATH', 'http://meuprojeto.com.br/');

//Paginação
define('PAGINATE_LIMIT', '20');
define('PAGINATE_MAX_LNKS', '5');

//Header charset
header('Content-Type: text/html; charset=UTF-8');

setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');

配置完成后,需要在config/routing.php文件中定义路由规则

<?php

$routing = array(
    /**
     ** Padrão das regras: 
     ** '<REGRA>' => '<CONTROLADOR>/<ACAO>/<PARAMETRO 1>/<PARAMETRO 2>/<PARAMETRO N>'
     ** ou
     ** '[<METODO>, <REGRA>]' => '<CONTROLADOR>/<ACAO>/<PARAMETRO 1>/<PARAMETRO 2>/<PARAMETRO N>'
     ** - Os parâmetros são escritos utilizando PHP regex
     ** - O nome do controlador corresponde ao nome da classe com o primeiro caractere minúsculo e sem o sufixo "Controller"
     ** - O nome da ação corresponde ao nome do método do controlador com o primeiro caractere minúsculo
     **/

    //HOME
    '/^$/' => 'home/main', //Corresponde a URL "<ENDEREÇO DO SITE'>/"
    '/^home$/' => 'home/main', //Corresponde a URL "<ENDEREÇO DO SITE'>/home"
    
    //Exemplo de listagem
    '/^produtos$/' =>           ['GET' => 'produto/main'], //Corresponde a URL "<ENDEREÇO DO SITE'>/produtos"
    '/^produtos\/([0-9]+)$/' => ['GET' => 'produto/main/\1''] //Corresponde a URL "<ENDEREÇO DO SITE'>/produtos/2", onde 2 é o número da página atual
);

$default['controller'] = 'home'; //controller principal
$default['action'] = 'main'; //ação principal

注意:未指定控制器的请求将被重定向到主控制器。同样,未指定动作时,将调用主动作。

完成重定向后,应创建一个控制器,继承自DFG_FW的DefaultController类。

<?php

/**
 ** Controller de gerenciamento da página principal
 ** @author DFG Studio
 **/
class HomeController extends DefaultController {
    //Define o arquivo de template utilizado. No exemplo: templates/index.php
    //Se o valor de $template_file for vazio, nenhum template será utilizado
    protected $template_file = 'index';

    /**
     ** O método main é automaticamente redirecionado para views/home/main.php, seguindo o padrão views/<CONTROLADOR>/<AÇÃO>
     **/
    function main() {
        //O redirecionamento pode ser evitado alterando a flag de renderização para 0 (o padrão é 1)
        $this->render = 0;
    
        //Abaixo estão exemplos de métodos dos controladores
        
        //Obtém o Doctrine Entity Manager
        $em = $this->getEntityManager();
        
        //Obtém a flag de renderização
        $render = $this->getRender();
        
        //Envia uma variável para a view
        $this->set('variavel', $valor);
        
        //Obtém o valor de uma variável
        $valor = $this->get('variavel');
        
        //Obtém o valor de um parâmetro (GET ou POST)
        $param = $this->getParameter('parametro');
        
        //Altera a ação atual (somente a página de destino)
        $this->redirect($action);
        
        //Altera a ação atual (chamando nova execução do método no controlador)
        $this->redirectAction($action);
        
        //Altera momentaneamente o arquivo de template
        $this->setTemplate($template_file);
        
        //Altera momentaneamente a flag de renderização
        $this->setRender($render);
    }
}

以下是一个templates/index.php模板的示例:

<!DOCTYPE html>
<html>
    <head>
        <title>DFG Studio</title>
        <?
            //Inclui o arquivo compartilhado do template templates/shared/head.php
            $template->requiref('shared' . DS . 'head.php');
        ?>
    </head>
    <body>
        <?
            //Renderiza o código gerado pelo controlador e pela página correspondentes
            $template->render();
        ?>
    </body>
    <?
        //Inclui o arquivo compartilhado do template templates/shared/js.php
        $template->requiref('shared' . DS . 'js.php')
    ?>
    <?
        //Imprime o código javascript coletado nas páginas a fim de organizá-lo no fim da página
        $html->printCollectedJs();
    ?>
</html>

以下是一个views/home/index.php页面的示例:

<?
    //Atalho para <link rel="stylesheet" type="text/css" href="<CONTEXT_PATH>res/css/meucss.css" media="screen" />
    $html->includeCss('meucss', 'screen');
?>

<main>
    <div class="container">
        Meu conteúdo
    </div>
</main>    

<?
    //Inicia a coleta do javascript para organização
    $html->startCollectJs();
    
    //Atalho para <script src="<CONTEXT_PATH>/res/js/meujs.js"></script>
    $html->includeJs('meujs');
    
    //Finaliza a coleta do javascript para organização
    $html->stopCollectJs();
?>

有关方法的更多信息可以在项目附带的文档中获得。

计划更新

  • 原生认证方法(HTTP Basic / 通过数据库)
  • 原生验证方法
  • 原生消息发送
  • 原生"Access-Control-Allow-Origin"控制
  • 原生JSON和图像打印方法
  • 使用PHPUnit进行测试

如何为项目做出贡献?

通过捐款 点击此处 或成为项目审稿人/编辑(请联系我们以加入编辑团队)。

关于我们和联系方式

网站: http://dfgstudio.com.br

Facebook: https://#/dfgstudio

请发送您的反馈: talk@dfgstudio.com.br

许可证

GNU Lesser General Public License,版本2.1