zoukankan      html  css  js  c++  java
  • Yii2.0官方高级模板的目录结构分析

    打算自己做个新的项目,会在博客记录每天所做的事。最近在学习Yii框架,虽然Yaf我也在看,不过主要精力都在Yii上面了,决定做个类似贴吧的小站,框架选择了Yii,在网上看了一些关于Yii的文章,觉得这篇不错,以后我的这个站就采用这种部署方式。
    在这篇文章中,描述了yiiframework.com站点使用目录结构 – Yii框架项目的官方网站。虽然这种结构可能显得过于复杂的对于小项目或是小的团队,或在某种意义上可能不是最佳的选择,但我们相信,它是非常适合在中型 或大型项目团队一起开发环境的。事实上,我们已经成功地使用在其他一些大项目类似的结构。


    总体目录结构
    下面是我们Yii 官方站点正在使用的目录结构:

    /
        backend/
        common/
            components/
            config/
                params.php
                params-local.php *
            lib/
                Pear/
                yii/
                Zend/
            migrations/
            models/
                Comment.php
                Extension.php
                …
        console/
            commands/
                SitemapCommand.php
                …
            config/
                main.php
                main-local.php *
                params.php
                params-local.php *
            runtime/
            yiic.php *
        frontend/
            components/
            config/
                main.php
                main-local.php *
                params.php
                params-local.php *
            controllers/
                SiteController.php
                …
            lib/
            models/
                ContactForm.php
                SearchForm.php
            runtime/
            views/
                layouts/
                site/
            www/
                assets/
                css/
                js/
                index.php *
        yiic
        yiic.bat


    在一个团队开发的环境,我们通常都会使用一些源代码版本的系统(如SVN,GIT)来管理上述的目录结构。带有星号标注的文件名不需要放在版本控制里面,在后面我们将解释到。


    根目录结构
    在工程顶层根目录下,我们有四个目录:
    后端(backend):后端应用程序,它主要用于管理后台,网站管理员来管理整个系统。
    前端(frontend):我们的目标最终用户提供的主要接口的前端应用。
    控制台(console):控制台应用程序包含系统所需要的控制台命令的。
    共同的特点(common):前端和后端,以及控制台共用的。

    正如我们可以看到,我们整个系统划分成三个应用程序:后端,前端和控制台。当然,如果需要,我们可以添加更多的应用程序(如API,提供Web API服务),根据自己的需求而定。我们使用共同(common)目录下的文件在不同应用程序之间共享。


    应用程序目录
    每个应用程序的目录结构非常相似。例如,对于前端和后端,它们都具有这些目录:
    组件(components):包含这个应用程序使用的组件(如帮助类,工具类小部件)
    配置(config):包含由应用程序使用的配置
    控制器(controllers):包含控制器类
    LIB(lib):只用于此应用程序包含第三方库
    模型(models):包含这个应用程序需要用到的数据库映射模型类
    运行(runtime):存储动态生成的文件
    视图(views):存储控制器动作视图脚本
    网站根目录(WWW):应用程序网站的Web根目录

    控制台(console)目录结构略与其它应用程序目录不同,因为它不需要控制器(controllers),视图(views)和网站根目录(www)。相反,它包含一个(commands)目录来存储所有控制台的命令类文件。


    公共(Common)目录
    公共的目录(Common)中包含的文件用于其它应用程序之间共享。例如,每一个应用程序可能需要访问该数据库的使用 ActiveRecord。因此,我们可以将AR模型类放置在公共(common)的目录下。同样,如果在多个应用程序中使用了一些辅助(helper )或部件类(widget ),我们也应该把这些放置在公共目录(common)下,以避免重复的代码。
    为了便于代码的维护,我们组织这个公共目录结构(common)类似这个应用程序的目录。例如,我们有组件(components),模型(models),第三方库(lib)等等.

    正如我们将很快解释,应用程序也可以共享一部分的共用配置。因此,我们还可以存储config目录下共同的常见配置。
    当开发一个大型项目开发周期长,我们需要不断调整数据库结构。出于这个原因,我们还可以使用数据库迁移(DB migrations )功能来保持跟踪数据库的变化。我们将所有 DB migrations(数据库迁移)目录同样都放在公共(common)目录下面。


    应用程序(Application )配置
    同一系统中的应用通常有着一些共用的配置,如数据库连接配置,应用程序的参数,为了消除重复的代码,
    我们应该提取这些共用的配置,它们保存在一个中心位置。在我们的设置,我们把这些放置在公共目录(common)的配置(config)目录下。

    在团队开发的环境中工作时,不同的开发人员可能有不同的开发环境(如操作系统,目录,数据库连接)。这些环境也往往都是来自不同的生产环境。为了避免开发者之间的代码冲突,我们分成两部分的配置:基本配置(如main.php,params.php)和本地配置(例如主要local.php,PARAMS- local.php)。

    基本配置应置于版本控制之下,像普通的源代码,使每个开发人员可以通过共享。本地配置不应该被增加到版本控制之下,应该只存在于每一个人开发者的工作文件夹。开发人员可以自由的来修改他的本地配置。

    在应用程序的引导脚本index.php文件,我们可以合并的基础和本地配置和再配置的应用实例,如以下:
    <?php
    require('path/to/yii.php');
    $local  = require('path/to/main-local.php');
    $base   = require('path/to/main.php');
    $config = CMap::mergeArray($base, $local);
    Yii::createApplication($config)->run();


    路径别名(Path Alias)配置
    为了便于在不同的应用程序中引用文件,我们也声明包含这四个顶级目录的根目录根路径别名网站(译者注: 也就是相当你的工程名称)。
    因此,在前台应用程序中声明我们可以使用site.frontend.models.ContactForm来引用ContactForm类

    部署应用(Deployment )
    在项目开发过程结束后,我们需要将它部署到生产服务器。使用FTP或其他类似的服务将应用程序文件上传到服务器,我们可以使用版本控制系统去做部署。然后,我们创建或修改的本地生产服务器的具体配置。例如,我们可能需要调整DB连接参数。我们可能要定义YII_DEBUG在index.php设为false。
    因为我们每个应用程序存储在一个单独的目录,这样就带来了更多的灵活性,如果你有多台服务器,你可以将它们部署到不同的服务器,非常适合大型网站。
  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/wepe/p/7424597.html
Copyright © 2011-2022 走看看