马上开始

从xts-init初始化

虽然xts最早实现的是ORM功能,个人感觉最有价值的也是这块,但是入门还是能马上动手开始实践比较好。xts-init项目提供了一个可以快速开始的项目文件目录模板。直接clone这个项目并重命名就可以了:

git clone git@github.com:SyuTingSong/xts-init.git MyProject

因为xts项目是以git子模块的方式存在于xts-init项目中,所以还需要用相应命令取出它的代码。

cd MyProject
git submodule init
git submodule update

接下来还需要清理一下xts-init项目原本的git信息:

rm -rf .git .gitmodules framework/.git

现在整个xts框架目录就已经准备好了。

目录结构说明

从xts-init初始化好的目录结构如下:

.
├── CREDITS
├── LICENSE
├── README.md
├── build
├── build.tools
│   ├── turn-off-debug.patch
│   └── yuicompressor-2.4.8.jar
├── framework
│   ├── CJSON.php
│   ├── CREDITS
│   ├── LICENSE
│   ├── README.md
│   ├── apple.php
│   ├── base.php
│   ├── cache.php
│   ├── hail.php
│   ├── orange.php
│   ├── redis.php
│   ├── smarty.php
│   ├── valley.php
│   ├── view.php
│   └── x.php
├── protected
│   ├── action
│   │   └── index.php
│   ├── common.php
│   ├── config
│   │   ├── debug.php
│   │   └── release.php
│   ├── runtime
│   └── view
│       ├── index.html
│       └── layout.html
├── static
│   ├── css
│   │   └── common.css
│   ├── img
│   └── js
└── webroot
    ├── index.php
    ├── static -> ../static/
    └── xts.php

第一级主要有framework、protected、static、webroot和build.tools五个目录。framework目录里存放的是xts框架的源代码;protected目录用于存放我们的自己的程序代码、页面模板以及配置文件等等;static目录里保存静态的资源文件,包括css、JavaScript、图片、Web字体等等;webroot目录是Web服务器的根目录,可以直接被浏览器访问到,一般只有一个入口文件;build.tools是xts框架的编译工具,里面放置js压缩器还有关闭debug模式的patch。

webroot里有一个指向static的软链接,这样浏览器可以直接访问到static目录里的资源。把static目录放在webroot之外是为了方便地把static目录单独打包发布到CDN上。xts的build脚本可以把静态资源文件引用(就是HTML里的link还有img的src等等)替换成独立的静态服务器域名或者CDN域名。

protected目录里一般会有action、config、runtime、model、view几个目录。action目录用于存在controller代码;config里存在配置文件,xts的配置文件也是php程序,是一个大关联数组;runtime目录里存在一些运行时生成的数据,包括文件缓存,编译出来的模板,运行日志等等;model目录在xts-init里不会创建,这个目录是存在自定义数据库ORM对象的;view目录里存放xts的模板,一般以.html为后缀。

Hello, world

前面介绍了一大通xts的目录结构,现在马上开始试试写代码运行吧。打开protected/action/index.php文件,可以看到里面已经有Hello, world的Controller代码了。

<?php
function index() {
    X::view()
        ->setPageTitle('Hello world')
        ->render('index', array(
        'to' => 'world',
    ), '1');
}

每个xts的action都是一个函数,在protected/action目录里,存放在与之同名的.php文件中。xts的路由规则是尽最大可能匹配目录和文件。比如请求/a/b/c/d就会先尝试加载protected/action/a/b/c/d.php文件,如果不存在,会再尝试protected/action/a/b/c.php,如果仍未找到,会尝试protected/action/a/b.php,最后到protected/action/a.php。相应的,xts也会尝试调用d()、c()、b()最后是a()。调用的函数名总是和文件名相同例外情况

大写X是xts框架的一个静态类,上面绑定了根据配置文件加载的工具类。X::view()会返回一个RainTPL模板引擎的实例。当然,这里使用的RainTPL已经被修改以适合xts的整结构。这个action会通知模板引擎,渲染index模板,并传递参数$to = world。

打开protected/view/layout.htmlprotected/view/index.html文件,可以看到模板的代码。layout模板里写的是各页面公共的html片段,一般包括页面的css引用,header、footer、nav bar等等。

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
    <style media="handheld" type="text/css"></style>
    <link rel="stylesheet" href="/static/css/common.css" />
    <title>{$_page_title|escape}</title>
    </head>
<body>
{include="$_content_template"}
</body>
</html>

index模板里写的是具体页面的内容,它会被嵌入到layout的{include="$_content_template"}位置。

<h2>Hello, {$to}</h2>

在index模板里,使用来自action函数中赋值的变量$to。

Web服务器的配置

xts是单入口的框架,需要在web服务器上配置rewrite把所有请求都rewrite给webroot/index.php脚本才能使用。以nginx为例,可以使用它的try_files。

try_files $uri $uri/ /index.php?$args;

总之需要确保站点访问所有基于xts的程序都交给index.php就好了。

推荐的IDE

推荐使用IDEA出口的PhpStorm来开发xts程序,能获得最好的自动完成提示、方法参数说明等。如果不想花钱,ActiveState出品的Komodo Edit也是一个不错的选择,虽然比PhpStorm要差一些。最好不要使用Vi之类的编辑器开发,因为xts框架的一个设计就是利用IDE的自动完成最高效地开发程序,用Vi效率降一半呀。

命名

xts框架在类的方法和属性中使用驼峰命名法,在数据库、函数、网页参数中使用帕斯卡命名法。

标签: xts

添加新评论