基于文件命名的微框架

v0.7.0 2019-01-13 15:17 UTC

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.phpA会首先从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项目的支持

许可证

你可以用任何方式使用这段代码。真的。