基于文件命名的微框架
Requires
- php: >=7.1.0
This package is not auto-updated.
Last update: 2024-10-01 17:14:51 UTC
README
A 是一个基于文件命名的 PHP 微框架,适合那些想要保持简单的情况。只需将文件命名为 like_this.php
,你将获得一个工作的路由 http://example.com/like/this
。没有数据库,没有配置文件,什么都没有。并且它适用于多语言网站。
概述
A 旨在用于简单网站,这些网站不需要数据库或复杂的架构,但仍然希望拥有整洁的 URL 和尽可能有组织的功能。
特性
- 基于文件命名的整洁 URL
- 简单的布局系统
- 数据与表现分离
- 404(未找到)模板用于不存在的路由
- 自定义函数
- 多语言网站
要求
- PHP 5 或更高版本
- 运行 Apache 的 PHP 服务器
用法
A 默认情况下即可使用,无需配置。下载文件并开始构建您的网站。
URI 和文件命名
想象一下您想在您的网站上有一个 this/cool/uri
。为了使其工作,您只需要创建一个名为 this_cool_uri.php
的文件,然后您就完成了。您可能想要一个网站首页,所以创建一个名为 home.php
的文件,就是这样。
布局
如果您创建一个名为 layout.php
的文件,A 将将其用作所有页面的包装器,因此您可以节省时间并使事物更整洁。您只需在需要显示每个页面内容的地方包含 <?php $this->content(); ?>
。这里有一个例子
<!DOCTYPE html> <html dir="ltr" lang="en"> <head> <meta charset="utf-8"> <title>My Site</title> <link rel="stylesheet" type="text/css" href="/assets/css/example.css"> </head> <body> <header> <h1>My Site</h1> <nav> <ul> <li><a href="<?php echo $this->nav('my-page'); ?>">My Page</a></li> <li><a href="<?php echo $this->nav('my-sub-page'); ?>">My Sub Page</a></li> </ul> </nav> <!-- This site is multilingual, so here go the languages --> <ul class="lang-list"> <li><a href="<?php echo $this->lang('ca'); ?>">Català</a></li> <li><a href="<?php echo $this->lang('es'); ?>">Castellano</a></li> <li><a href="<?php echo $this->lang('en'); ?>">English</a></li> </ul> </header> <main> <!-- Here we load each page's content --> <?php $this->content(); ?> </main> <footer> <p>What a footer!</p> </footer> </body> </html>
数据
A 鼓励您将数据和表现分离。这在具有长列表或大量文本的页面上尤其有趣。
在 data
目录中,您将找到一个名为 global.php
的文件,其中您可以编写网站范围的变量。您还可以创建仅在被页面请求时加载的单独文件,只需将文件名与页面文件名相同即可。因此,如果您有一个名为 about.php
的页面,那么 A 将寻找一个名为 data/about.php
的文件并加载它。如果您的页面是 very_long_route.php
,那么该页面的数据将位于 data/very_long_route.php
。
列表和单个项目页面
A 允许您使用单个模板从列表创建单个项目页面,就像在 MVC 框架和大多数 CMS 中一样。
想象一下您有一个名为 posts.php
的页面,该页面列出所有帖子。现在您可以创建一个名为 posts_[id].php
的另一个文件,该文件将用作单个帖子的模板。您需要在 data/posts.php
中有一个包含帖子的数组,并将其命名为 $list
,其中每个数组的 key
是您想要为帖子设置的 URL。A 将在 $item
变量中加载帖子数据。示例
// data/posts.php // The array must be named $list $list = array( 'first-post' => array( 'title' => 'My first post', 'body' => 'A very long post' ), 'second-post' => array( 'title' => 'My second post', 'body' => 'A very long post' ) ); // posts_[id].php // We get the post data in $item <h1><?php echo $item['title']; ?></h1> <?php echo $item['body']; ?>
多语言网站
如果您想要您的网站支持多语言,这非常简单。您只需要在 data
目录中创建一个名为 langs
的目录,并在其中为要支持的语言创建目录。以下是一个示例
data/langs/ca
data/langs/es
data/langs/en
现在在每种语言的目录中,您可以像往常一样创建数据文件,遵循命名模式,所以 my_page.php
将查看 data/langs/[当前语言]/my_page.php
。
一个重要的知识点是:A不会使用翻译来代替其他数据,它只是会覆盖它。这意味着,如果你的当前语言是fr
,你的当前页面是my_page.php
,A会首先从data/my_page.php
获取数据,然后从data/langs/fr/my_page.php
获取数据。这是一种在给定文本不需要翻译时保持事物DRY(不要重复自己)的便捷方法。
如果你正在创建一个多语言网站,你真的会想要使用辅助方法nav()
和lang()
来保留跨语言的路由。
<!-- Make sure current language will be on the navigation links or in lists' links, using nav() --> <a href="<?php echo $this->nav('my-page'); ?>">My Page</a> <?php foreach ( $list as $k => $item ): ?> <li> <a href="<?php echo $this->nav("list/{$k}"); ?>"> <?php echo $item['title']; ?> </a> </li> <?php endforeach; ?> <!-- Make sure you will stay on the same page when switching languages, using lang() --> <a href="<?php echo $this->lang('es'); ?>">Castellano</a>
自定义函数
有时你想做一些事情,并将它们封装在函数中。你可以将它们放在名为functions.php
的文件中,它将被包含。
更新日志
== 0.6 ==
- 代码改进
== 0.5 ==
- 修复了由于结尾有斜杠导致的路由中断问题
== 0.4 ==
- 增加了对多语言网站的支持
== 0.3 ==
- 自动生成 .htaccess
== 0.2 ==
- 增加了对
list/:id
项目的支持
许可证
你可以用任何方式使用这段代码。真的。