dfgpublicidade / dfg_fw
PHP框架DFG
Requires
- php: >=5.6.0
- doctrine/annotations: ^1.4.0
- doctrine/dbal: 2.5.4
- doctrine/orm: 2.5.6
- phpmailer/phpmailer: ~5.2
- symfony/serializer: 3.*
- symfony/yaml: 2.*
This package is auto-updated.
Last update: 2024-09-29 05:02:27 UTC
README
PHP框架DFG
我们介绍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] app
[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.php
和webapp/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进行测试
如何为项目做出贡献?
通过捐款 点击此处 或成为项目审稿人/编辑(请联系我们以加入编辑团队)。
关于我们和联系方式
Facebook: https://#/dfgstudio
请发送您的反馈: talk@dfgstudio.com.br