raphhh / puppy
使用 Twig 创建网站的微型框架
Requires
- php: >=5.4
- raphhh/puppy-application: ~1.0
- raphhh/puppy-config: ~1.0
- raphhh/puppy-session: ~1.0
- raphhh/puppy-static-route: ~1.0
- raphhh/puppy-template: ~1.0
Requires (Dev)
- phpunit/phpunit: @stable
- raphhh/puppy-client: ~0.1
This package is auto-updated.
Last update: 2024-08-25 21:59:03 UTC
README
Puppy 是一个用 PHP 构建的微型框架,帮助您使用 Twig 模板创建网站!
使用 Puppy,您可以直接在 Twig 中构建网站,无需处理路由或配置问题。Puppy 即插即用:您只需实现您的 HTML 代码即可。
Puppy 使用简单的路由系统,您可以轻松扩展以添加自己的行为并获得更多交互性。例如,您可以使用 Puppy 创建一个表单,并在后端处理。
资源
网站
http://www.puppyframework.com/
代码
核心
模块
测试
关于
Puppy 是一个运行 Puppy\Application 的骨架。它使用 Puppy\Config 作为配置管理器。
它包括一些默认模块
安装
使用 Composer 下载 Puppy
$ composer create-project raphhh/puppy path/to/my/project
文件架构
├── bin
| ├── build
| └── run
├── config
| ├── dev.php
| ├── global.php
| └── tets.php
├── public
| ├── .htaccess
| ├── index.php
| └── robots.txt
├── src
├── templates
| └── public
| └── index.html.twig
├── tests
├── vars
├── vendor
├── .editorconfig
├── .gitattributes
├── .gitignore
├── .scrutinizer.yml
├── .travis.yml
├── composer.json
├── composer.lock
├── LICENSE
├── phpunit.xml.dist
├── puppy
└── README.md
- "bin" 包含您可以在控制台中通过命令 "puppy" 启动的可执行文件。
- "config" 包含所有您的配置文件。
- "public" 是 Web 入口点。
- "src" 包含所有您的 PHP 代码。
- "templates" 包含您的 twig 文件。它由 "静态路由" 模块使用。
- "tests" 包含所有您的 PHP 测试。有关更多信息,请参阅 PHPUnit。
- "vars" 是一个临时文件夹,包含缓存等。
- "vendor" 包含所有您的 PHP 依赖项。有关更多信息,请参阅 Composer。
运行演示
使用内置 PHP 服务器
在您的控制台中使用 run 命令
$ puppy run
然后,您可以在 http://localhost:8080 的浏览器中启动 Puppy。
您还可以指定您要运行开发环境(无缓存)。
$ puppy run dev
使用任何服务器
首先,您需要知道 Puppy 的公共 HTTP 访问是目录 '/public'。这是您放置 CSS 或 JavaScript 的位置。
如果 Puppy 不位于 URL 地址的根目录,则创建本地配置以定义基本 URL。例如,如果您将在 'http://localhost/puppy/public' 启动 Puppy,则您的本地配置必须是
// config/local.php <?php return [ 'baseUrl' => '/puppy/public/', //use only an absolute path ];
本地配置不受版本控制,永远不会进入生产环境。有关配置的更多信息,请参阅特定部分。
另请参阅如何设置开发环境变量 'APP_ENV'。
然后,您可以在浏览器中启动 Puppy。 :)
清除缓存
要清除缓存,请重新构建您的项目
$ puppy build
创建自己的应用程序
现在您想编写您的网站。
首先,请注意 Puppy 的缓存。如果 Puppy 已被缓存,您的修改将不会显示在屏幕上。有关禁用缓存的配置,请参阅配置部分。
现在,让我们看看静态路由是如何工作的。
静态路由概述
“静态路由”是一个模块,它将URI路由到模板文件。路由器接收请求URI并尝试找到关联的模板。
请注意,模板文件必须位于“template/public/”目录中。
如果请求URI指向目录而不是文件,则会搜索默认文件。默认情况下:"
/index.html.twig。如果在模板中找不到文件,则返回HTTP 404错误。
请注意,因为它是一个模块(raphhh/puppy-static-route),您可以将其删除。有关更多信息,请参阅模块部分。
添加新页面
将目录'/templates/public/'视为您公共网站访问的镜像,但特别针对twig模板。对于您网站中的每个页面,您都需要在此目录中放置一个twig文件。将该文件命名为如果它是html文件,但请添加扩展名'.twig'。
例如,对于主页,通常您将在公共区域的根目录下使用一个'index.html'。在这里,使用Puppy,您必须创建一个文件'/templates/public/index.html.twig'。相同的名称,但有特定的扩展名。
因此,例如,以下URI将调用这些twig
- / => templates/public/index.html.twig
- /index.html => templates/public/index.html.twig
- /contact.html => templates/public/contact.html.twig
- /contact => templates/public/contact/index.html.twig
- /contact/index.html => templates/public/contact/index.html.twig
创建通用私有模板
现在,假设您想添加第二个页面,例如一个联系页面。因此,您想为URL '/contact.html'显示一个新的模板。您只需在文件'/templates/public/contact.html.twig'中创建此新模板。
一旦您创建了第二个模板文件,您的HTML中就有一些重复的代码(页眉、菜单、页脚等)。没问题,这里是Twig!例如,您可以将在单独的文件中组织您常见的基HTML代码,每个页面都会扩展它。
由于此文件不能直接通过URL访问,它不能出现在'/templates/public'目录中。您必须将其直接放在'/templates'目录的根目录中。因此,它永远不会从任何URL调用。
添加一些特定行为
现在,假设您在联系页面中有一个表单,用于发送电子邮件。您可以轻松地添加一个用于处理表单的PHP函数。
首先,您必须添加一个新的路由来处理提交的表单。
$application->post('contact', function(){ ... });
在控制器中,您必须测试表单是否适合您。如果表单无效,您可以调用与您的URI关联的twig模板,并传递错误消息。
//if the form is not filled, we display the form with the error return $staticController->render([ 'text-danger' => 'Form not filled' ]);
如果表单有效并且您已经完成了工作,则可以重定向以避免刷新问题。
//if the email is send, we redirect to avoid F5. return $staticController->redirect([ 'text-info' => 'Email sent' ]);
轻松检索传递给模板的消息(使用'render'或'redirect'方法)。您只需使用'retriever'服务。
{% if services['retriever'].has('text-danger') %} <p class="text-danger">{{ services['retriever'].get('text-danger') }}</p> {% endif %}
请参阅DemoModule以获取示例。
配置
根据每个环境添加所有您想要的配置。Puppy使用易于使用的配置提供程序。
您的配置在'/config'目录中定义。
默认情况下,您有两个版本化的配置(全局和dev)。'dev'配置在prod环境中不加载。但是,为了指定您处于dev环境(并避免缓存),您必须设置环境变量'APP_ENV'。
此外,您还有一个第三个配置(local),它没有版本化。您可以仅为您指定一些内容。
有关更多信息,请参阅puppy-config文档。
路由
添加您想要特定行为的任何特殊路由。Puppy使用完整的路由提供程序。
$application->get('hello', function(){ return 'Hello world!'; });
有关更多信息,请参阅puppy-application文档。
服务
添加您需要的所有服务。Puppy 使用 Pimple 作为服务容器。
$application->addService('serviceName', function(Container $services){ return new MyService(); });
有关更多信息,请参阅puppy-application文档。
Puppy 使用预配置的服务构建。
- config:提供您环境的配置。
- request:提供当前请求($_REQUEST,...)。
- template:处理twig引擎。
- session:处理会话。
- appController:在控制器中提供一些有用的工具。
- staticController:调用与当前uri关联的twig模板。
- frontController:调用与当前请求关联的控制器并显示视图。
- router:找到与路由关联的控制器。
- retriever:找到页面提供的参数。
有关会话和模板的更多信息,请参阅 puppy-service 文档。
模块
模块是一个可以像插件一样添加到Puppy的外部包。模块可以添加特定的服务、控制器、配置等。有关更多信息,请参阅模块文档。
在Puppy中添加新模块非常简单。您只需使用Composer加载包即可。
$ composer require <vendor/puppy-module>
就是这样,它工作得很好!
删除也很简单。
$ composer remove <vendor/puppy-module>
Puppy 包含一些默认模块,如会话、模板和静态路由。但是,您可以轻松地替换它们。
HTTP响应
您可以使用“after”方法管理HTTP响应的头部。例如,您可以定义http缓存。
$application->after(function(Response $response){ ... });
集成和部署
如何启动测试?
请参阅 .travis.yml 中的Travis配置。
如何部署?
请参阅 composer.json 中的composer安装脚本。