A.6. 项目系统

Solar和工作区文件类库的良好组织是有益于核心应用的,通常来说,你需要在web服务器或其他目标主机中布署Solar类库和工作区类库。这就意味着,对于不同的文件支持和SVN外部系统,类库组织要一致;我们把它称为你的项目的Solar“系统”。

下面是Solar“系统”的主要文件和目录:

SYSTEM/
    index.php               # quick-start (insecure) bootstrap
    config.php              # main config file
    config/                 # other config files
    docroot/                # web server document root
        .htaccess           # mod-rewrite rules
        index.php           # real bootstrap file
        public/             # public assets
            Solar/          # Solar assets
    include/                # used as the php include_path
    script/                 # command-line scripts
        solar               # the solar command-line tool
    source/                 # source packages, libraries, etc
    sqlite/                 # sqlite files
    tmp/                    # temp files
        cache/              # private cache
        log/                # log files
        mail/               # test emails
        session/            # session files

Solar“系统”下面有“四大”目录:source/include/config/docroot/。其他文件和目录比较容易理解,不言自明。

A.6.1 source/目录

所有的源代码文件都放置在source/目录下,包括使用make-vendor生成的文件。source/目录不会用于include路径。它是所有代码托管中心。(我们马上就会接触到include路径)

source/目录不关心你在里面放置了什么代码。你可以下载并解压PEAR风格包、放置第三方类库、SVN或git。你甚至可以在里面放置同一类库的不同版本,只需要把它们放置在不同的子目录中即可。

source/目录组织结构如下:

source/
    acme/               # libraries from the `make-vendor Acme` CLI call
        Acme.php
        Acme/
        config/
        script/
        docs/
        tests/
    example/            # svn:externals http://svn.example.com/trunk
        ...
    solar/              # core Solar libraries
        Solar.php
        Solar/
        config/
        script/
        docs/
        tests/
    third-party/        # copied or downloaded from a third party
        ...

A.6.2. include/目录

include/目录是你整个Solar系统代码的include路径。一般情况下,include/目录里只含有到source/目录的符号链接(symlinks)。这意味着include/目录可以拥有source/目录下的所有文件,而且不会污染include路径。这也意味着你可以随意互换源目录,通过改变符号链接(symlinks)的指向。

include/目录的组织结构如下:

include/
    Acme.php            # ln -s ../source/acme/Acme.php
    Acme/               # ln -s ../source/acme/Acme
    Example/            # ln -s ../source/Example
    Solar.php           # ln -s ../source/solar/Solar.php
    Solar/              # ln -s ../source/solar/Solar
    thirdparty.php      # ln -s ../source/third-party/some_file.php

如果你使用make-vendor命令,它会自动为你产生这些符号链接(支持windows vista和unix风格的符号链接)。如果你引入了你自己的源代码:如果它们是Solar风格的工作区,那么你可以通过link-vendor命令为你创建符号链接;如果不是,那么你只能自己创建符号链接。

A.6.3. config/目录

接下来是config/目录。它放置了系统所有的配置文件。

config.php
config/
    access.txt          # an example ACL file
    htpasswd.conf       # an example password file
    thirdparty.ini      # a .ini file for a third-party library

A.6.4. docroot/目录

“四大”目录的最后一个目录是docroot/目录。这是系统的Web服务器文件根目录。你的虚拟主机应该配置指向这个目录,而不是SYSTEM目录。

子目录public/保存公共的附件,例如,Javascript文件、 样式表、图片等。在Solar风格的工作区中,最后一个目录实际上是每个类指向public/目录的符号链接。这允许你随类包分布这些公共附件,而不必有每次有更改时复制这些附件。

public/目录的组织结构如下:

docroot/
    index.php               # bootstrap file
    public/                 # public assets
        Solar/              # 
            View/           # 
                Helper/     # 
                    Pager/  # ln -s SYSTEM/source/Solar/View/Helper/Pager/Public

如果你创建类的同时用到Public/子目录存放公共附件,那么你可以使用link-public命令自动产生这些符号链接。(支持windows vista和unix风格的符号链接)