YII1 项目如何部署项目可以加版本号吗

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装
composer安装就不介绍了因為要安装composer,比较麻烦当然安装了composer是最好的,以后安装yii的插件要用到composer的可以去composer官网安装学习composer,这里就不介绍用composer安装yii可以参考yii官网



二、添加一个API应用

还没有完,yii的init初始化脚本不会觉得api是一个应用还要去做对应的配置

这里初始yii时候,没有api这个應用是因为我们还没有去环境那里配置,要把api添加到环境配置那里


三、把api添加到环境里

3.4 上面的工作做完了开始init初始化应用了

####把site控制器那里的命名空间改成api


-成功,如下图所示!一个api应用就这样搭建完成以后再添加应用也是同样的方法

发布了23 篇原创攵章 · 获赞 16 · 访问量 5万+

}

现在我们已经制定了一个基本嘚应用程序并配置连接了数据库,现在我们的工作是开发一些实用的功能我们知道项目(project) 是这个应用程序最根本的组成部份之一。用户首先会在TrackStar 应用程序创建或选择一个已经存在的项目(project) 并在其中添加任务和问题出于这个原因,我们想在第二个迭代中集中精力在项目(project) 这个模塊上

迭代计划 这个迭代相当明了,在这个迭代结束时我们的应用程序将允许用户创建新的项目(project),在项目(project) 列表中选择现有的项目(project)更新/編辑现有项目,并删除现有的项目

这些已经足够了,让我们开始吧我们将很快就把这些任务放到TrackStar 中并管理。现在我想我们只能先将咜们记在记事本上

创建项目(project) 表 早在第3 章,我们谈论关于一个项目(project) 的基本数据并在第4 章,我们决定使用MySQL关系数据库构建这个应用程序的持玖层现在我们将这个项目(project) 的内容变成一个真正的数据库表。


我们知道项目(project) 需要有一个名字和描述。我们也将继续保持一些基本信息哏踪每个记录的创建时间,更新时间以及谁创建的谁更新的。这些已经足够了让我们开始达到这个目标。
基于这些所需的属性如何創建项目(project) 表,如下所示:

如何使用第三方数据库管理工具已经超出了本书范围。我们也希望让你跟着使用其他可能使用到的一些其他软件基于这些原因,我们将简单地提供低级别的数据定义语言(DLL)创建数据库结构。所以启动Yii 支持的数据库服务器,并在trackstar_dev 数据库中打开伱的数据库编辑器,执行上面的DLL 语句创建表

???->  根据你选择使用的数据库,有许有可用的工具帮助你管理和维护数据库结构我们建议你使鼡这些工具,这将使事情变的更加容易我们实际上是使用

命名规则 你可能已经注意到,我们定义的数据库表名以及所有的列名都是小寫。在我们的开发中我们将所有表名和列名都使用小写字母。这主要是因为不同的DBMS 是区分大小写的举个例子,PostgreSQL 的列名在默认情况下是區分大小写的但我们在一个查询条件中必须引用一列,如果该列包含大小写字母使用小写字母将有助于消除这个问题。


你可能还注意箌我们为项目(project) 表名使用了一个tbl 前缀。从1.1.0 版本起Yii 提供了使用表前缀的支持。表前缀是一个字符串它是预先决定表的名称。它通常用在囲享主机的环境下多个应用程序共享同一个数据库的情况,使用不同的表前缀加以区分例如,一个应用程序使用前缀tbl 而另一个可以使鼡yii_另外,一些数据库管理员把它当成一个命令规则用来前缀标识数据库对象是什么类型,或使用前缀来进行分组

在Yii 中为了采用表前綴支持,必须设置CDbConnection::tablePrefix 属性为期望的表前缀然后在整个应用程序的SQL 语句中,可以使用{{TableName}} 做为参考表名其中TableName 就是表的名称,但不用前缀例如,如果我们需要修改这个配置我们仍然可以使用如下代码查询所有项目(project):


但这个问题有点超前了。现在让我们离开我们的配置重新回箌正题。稍后再进入数据库查询

创建AR 模型类 现在,我们已经创建了tbl_project我们需要创建Yii 模型类来管理该表中的数据。早在第1 章我们介绍了Yii 嘚对象关系映射(ORM) 层和Active Record(AR)。现在我们根据应用程序的上下文来看一个具体的例子


以前,我们使用yiic shell 命令来帮助我们自动生成一些代码如在第2 嶂,我们正是使用shell命令来创建我们的第一个控制器还有许多其他的shell 命令可以执行,以帮助自动创建应用程序代码然而,从1.1.2 版本起Yii 有┅个新的和更复杂的界面工具Gii。Gii 是一个高度可定制和可扩展的基础于Web 的代码生成平台把yiic shell 命令提升到了新的高度。我们将使用这个新平台创建我们的新模型类。

这为应用程序配置了Gii 模块我们本书后面章节详细讲解Yii 模块。这里的重点是要确保这些代码添加到了配置文件 並提供你的密码。现在 访问此工具地址:

使用Gii 创建项目(project)AR 类 首先输入您在配置文件中提供的密码,成功后将带你进入Gii 的主菜单页面:


你可能还记得这些菜单的选项都类似于第2 章使用yiic shell 命令行工具的帮助信息。因为我们想要创建tbl_project 表的模型这个模型生成器选项似乎是一个正确嘚选择。点击链接将带我们进入以下页面:

在创建过程中表前缀字段域主要用于帮助Gii 确定如何命名AR 类。如果您使用一个前缀你可以在此添加。这样不会使用该前缀来命名新的类。就我们而言我们使用的是tbl_前缀,这也恰好是表单的默认值因此,指定此值将意味着我們新生成的AR 类将被命名为Project而不是tbl_project。


接下来的两个字段域是要求输入表名和我们希望生成的类名我们表的名称是tbl_project,查看模型类的名称会洎动填空它使用表名,但没有前缀并以大写字母开头来覆盖模型类的名称。
因此Project 为我们模型类的名称,但你也可以自己定义此名称

接下来的几个字段域是用来进一步进行定制的。Base Class 字段用来指定继承哪个模型类这个类是CActiveRecord 或它的子类。Model Path 字段类允许你指定这个模型类文件在应用程序中的位置默认值是protected/models/(即application.models)。最后一个 字段指定使用的生成器的模板我们可以自定义默认模板以应对其它可能出现的情况,比洳所有的模型需要有共同的需求现在,这些字段的默认值已经可以满足我 们的需求了


点击Preview(预览) 按钮继续,将在页面底部显示如下表格:

当你点击models/Project.php 这个链接可以预览将要生成的代码。下面的截图显示这个预览的样子:


它提供了一个可以滚动的弹出窗口使我们可以预览箌整个文件的代码。好了关闭这个弹出窗口,点击生成按钮如果一切顺利,你应该在屏幕底部看到如下画面:

?—> 确保/protected/models(或你在Model Path 字段域填写的路径)是有Web 方式写入的权限。否则你将收到一个权限错误信息。

Gii 已经为我们创建了一个新的AR 模型类它的名字是Project.php,默认情况丅放在protected/models/目录。这个类封装了是我们的tbl_project 表表中的所有字段访问是通过Project AR 类的属性。


用户允许CRUD 操作 前面提到的测试向我们介绍了如何使用AR 类它展示了如何创建新记录,查询现有的记录更新现有的记录,并删除现有记录我们花了很多时间测试Project 表的AR 类的一些低级别的操作。泹我们的TrackStar 应用还没有公开这些功能给用户(user)我们真正是需要让用户(user)来创建,读取更新和删除项目(project)。现在我们知道了一些围绕AR 操作的方法,我们可以在控制器中开始编写一些功能代码幸运的是,我们不用做



通过脚手架为项目创建CRUD
让我们再次进入Gii 代码生成工具帮我们我苼成一个繁琐,耗时又很常见的代码Yii 为我们提供这个明确的方式,在应用程序中开发者使用共同的CRUD 进行数据库操作如果你已经熟悉了其他框架,你可能知道脚手架这个词让我们来看看在Yii 中利用它的优势。

在 这里我们看到两个表单字段域。第一个是要求我们指定模型類我们希望生成所有的CRUD操作。在我们的例子中使用Project.php 这个AR 类。所以在这个字段域中填写Project当我们输入后,我们注意到Controller ID 字段域自动填充荿了project,这是基于Yii 的约定我们现在保持默认即可。


这两个字段域填写后点击预览按钮,将会在页面底部看到如下表格:

我 们可以看到将偠生成很多的文件其实包括一个ProjectContrller.php 控制器类文件(它的包括了CRUD 的所有操作方法)和许多的视图文件,每一个单独的视图文件对应每一个操莋同时提供了可以搜索项目(project) 记录你当然也可以通过去掉复选框的选择来不生成一些相应文件。然后对我们而言,我们很喜欢Gii 为我们创建的这些文件


继续并单击Generate(生成) 按钮。我们应该在页面底部看到如下画面:

现在我们可以点击try it now 链接到这个页面去测试新功能了。

但 是這些项目是从何而来呢?你的项目(project) 列表与截图相比可能或多于或少于3 列这取决于你在之前执行单元测试时的次数。我们在单元测试中为Project AR 類编写的CRUD 操作实际上每次运行会在数据库中创建新记录。这些记录被创建出来时我们还没有完成我们的测试代码,最终的测试代码是刪除被创建的记录在这个种特殊情 况下,这已经有一些项目(project)了这样我们就可以看清它们如何被显示出来的。然而一般情况下,运行單元测试或功能测试使用开发数据库这种方 式很不好所以在后面,我们将讨论如何改变这些测试让它们运行在一个单独的测试数据库。现在让我们继续试用新生成的代码

创建一个新项目(project) 你 可能发现在项目(project) 列表页(前面的那张截图) 的右侧有一个小导航栏。点击Create Project 链接你会發现会把你们带到登录页面,而不是一个创建新项目(project) 的表单其原因是在Gii 中定义了生成代码的规则,只有验证用户(即登录用户)可以创建新的项目(project)


任何匿名用户尝试访问创建新项目(project) 页面都会被重定向到登录页面。好的让我们使用demo 作为帐号与密码进行登陆。

让 我们快速填写此表单来建立一个新项目(project)虽然这个表单中没有必填字段,让我们在Name 字段填写Test Project在Descrition 字段填写Test project description。点击Create按钮将数据发送给服务器如果出現错误,会显示错误信息并且出错字段域会高亮显示。成功保存会重定向到新创建 的项目(project) 的具体列表我们的操作成功了,页面被重定姠到 正如前面提到的有一件事是关于我们新创建的项目(project) 表单中所有字段域没有标记为必填,我们可以不输入任何数据就能提交成功但昰,我们知道每个表单至少需要一个必填字段。让我们设置一个必填字段


在Yii 中当表单与AR 模型类交互时,设置一个验证规则来限制字段域的范围这需要在Project AR 模型类的rules() 方法中,添加一个数组数组中包含特定的值。
rules() 方法返回的是一个规则数组一般每一个规则格式如下所示:
Attribute List(属性列表) 是一个字符串,需要验证的类的属性名用逗号分开Validator(验证器) 指的是使用什么样的规则执行验证。on 这个参数指定了一个scenario(情景) 列表來使用这条验证规则

!!!->  scenario(情景) 允许你限制验证规则应用在特定的上下文中。一种典型的例子是insert(插入) 或update(更新)例如:如果被指定为‘on’=>’insert’,這将表明验证规则只适用于模型的插入情景这同样适用 于’update’ 或其它的任何你希望定义的情景。你可以设置一个模型的scenario(情景) 属性或通过構造函数传给一个模型的实例


validator(验证器) 可以是模型类中的一个方法或一个单独的验证器类。如果定义为模型类中的方法它的格式必须是洳下的形式: 如果我们使用一个validator(验证器) 类,则这个类必须继承CValidator其实有三种方法可以指定validator(验证器),包括前面提到的一种格式:
1. 第一种是在模型类中定义验证方法
2. 第二种是指定一个单独的验证器类(这个类继承CValidator)
3. 第三种是你可以使用Yii 框架中现有的验证器,指定预定义的验证器别名即可

Yii 为你提供了很多预定义的验证器类,同时也指定了别名用在定义规则时。Yii1.1 版本预定义的验证器别名的完整列表如下:

类嘚别名,验证属性值是数字
? type:它是CTypedValidator 类的别名,验证属性值是一个指定的数据类型
? unique:它是CUniquedValidator 类的别名,验证属性值在表中的对应列中昰唯一的
? url:它是CUrlValidator 类的别名,验证属性值是一个有效的URL 因为我们想使项目(project) 的name 属性字段必填,这个看着好像应该使用required 别名可以满足我们嘚需要让我们添加一验证规则指定name 属性的验证器为required 别名。我们将追加到现有的规则中:
保 存项目(project) 模型文件并再次访问:http://localhost/trackstar/index.php?r=project/create, 我们看到在字段名称旁边有一个红色星号。这表明现在这个字段域是必需填写的尝试不填写任何信息提交表单,你应该看到一个错误消息指出这个芓段域不能为 空,如下图所示:

虽然我们已经做了一些改变让我们继续为Description 字段添加required 验证。我们只需将Description 字段添加到之前指定的那条规则中如下所示:


这样,我们看到我们可以在Arrtibute List(属性列表处)指定多个字段域,用逗号分隔这样,我们声明的形式表明无论是name(名称) 或description(描述) 属性都是必需有值的。尝试不填写任何信息提交表单你应该看到一个错误消息。

???->  如果我们在创建表时规定name 和description 列为NOT NULL,则当我们使用Gii 玳码生成器创建模型类时这个规则将会帮我们自动生成。它会在表中列的定义的基础上自动添加规则例如:列包含了NOT NULL 约束将会添加required 验證器,另外列有长度限制,比如name

列表页面其实包含了我们新创建的项目(project)。所以我们可以读取所有的项目(project), 以及每个项目的细节。



访问┅项目的详细信息页面可以在项目的列表中点击每个项目的ID 链接让我们在项目列表中选择这个新创建的项目ID:4。点击这个链接将把会转到此项目的详细页面本页面的几个操作(Operations) 动作列表在页面的右侧,如下图所示:

我们看到了更新项目(Update Project) 和删除项目(Delete Project) 的链接分别指的是CRUD 操作中的”U” 和”D”我们将会离开这个部份,你可以去验证这些链接所做的工作

在admin 模式中管理项目

最后,我们讲一下前面没有提到的项目操作——管理项目(Manage Project)点击这个连接,它可能看到一个授权错误如下图所示:


此错误的原因是当我们登陆应用程序创建项目时,我们使用的是demo/demo 嘚用户名/密码由于这些代码是由Gii 生成的,它限制了管理项目权由管理员可以访问


进 入管理员模式,仅仅需要使用admin/admin 的用户名/密码组合來吧,点击页面顶部导航上的Logout(demo)(注销demo 帐号)然后重新登陆,但这次使用管理员帐号如果使用admin登陆成功(你可以通过页面顶部导航上的Logout(admin) 我 們现在所看到的是一个交互度更高的项目列表页面。它在一个可交互的数据表格中显示了所有项目每一行都内置了查看、更新和删除这個项目的超链接。点击一列 的表头上的链接会将按这一列值进行排序第二行的一些输入框允许你按关键词搜索这个项目中这个列的值。Advanced Search(高级搜索) 链接展示了一个搜索表单并提供了多个搜索条件。下图展示了高级搜索表单:

在本次迭代中我们基本实现了目标提到的所有功能但并没有写太多的代码。实际上是在Gii的帮助下我们实现目标中没有期望到的基于项目(project) 的搜索功能。虽然基本但我用很少的代码完荿了项目任务踪跟系统中的一个特有的功能。


但 是现在尚不是搁置的时候脚手架的代码并没有真正完全替代应用程序开发。相反它会幫助我们建立真正的应用程序。当我们通过了解项目的功能如何工作的所有 细节和差别我们可以依靠自动生成的代码保持项目前进。我們将一样可以根据项目的求要继续前进,但这些由脚手架自动生成的代码没有完成所有的功能我们 需要一个应用程序中管理项目(project) 的完整的解决方案。

小结 虽然我们没有在这章进行实际编码但我们也完成了很多事情。我们创建一个新的数据库表并看到了Yii 中AR 的操作。我們使用Gii 代码生成器首先创建了一个封装了tbl_project 表的AR类然后我们编写了测试,去尝试了解和使用AR 类


然后我们演示了怎么使用Gii 代码生成工具生荿了Web 应用程序的CRUD 功能。有了这个非常棒的工具我们实现了本次迭代计划的提供的大部分功能。我们修改了提交表单中项目的名称(name) 和描述(description) 嘚验证功能
最后,我们介绍了Yii 中的测试夹具并利用夹具的优势对测试环境作出了一些调整。
在接下来的迭代中我们将通过我们在本嶂中学习到的知识,继续建立相关的数据模型

加载中,请稍候......

}

yii中配置文件主要是一个入口文件然后

// 改变磁盘上的路径 // 你可以使用 scriptMap 来配置脚本来自哪里。 // 对于一个生产环境的配置如下

配置环境常量,不同环境调用不同配置文件和調试级别

}

我要回帖

更多关于 如何部署项目 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信