PHP Yii框架开发——组织架构网站重构

news/2024/5/10 0:43:50/文章来源:https://blog.csdn.net/dannywj1371/article/details/17303969

最近一段时间在维护公司的组织架构网站(Org),旧版网站只是用了xampp简单搭建了一套环境部署在了windows机器上,代码结构相对简单。

整个架构如下:

image

整个架构没有用到复杂的结构,class里放了一些功能性的类库,function中是主要功能的逻辑代码,其核心就是SQL语句。

lib中放有一些第三方的扩展插件,templates里放一些页面的模板。其他的核心页面和配置文件均放在了根目录下。

如图:

image

 

此次的改进主要是使用第三方php开发框架来完成对原有部分功能的重构。

经过简单的比较,决定使用Yii这个框架来完成。

采用框架开发的主要优点在于:

1.项目结构更加规范。

2.框架为我们自动生成了一些代码。

3.框架的安全性更好,以及很多需要注意的地方都为我们考虑到了。

 

下面就总结一下我使用Yii框架进行开发过程中遇到的问题和处理流程。

 

首先去网站了解了Yii框架的大体情况,参考了一些step by step的文档。

http://www.yiichina.com/guide/

 

由于PHP不同的开发平台需要做的配置不同,所以还是首先介绍一下自己的开发平台:

操作系统:windows7 (x86)

php集成环境:Xampp 3.2.1

php 5.4.16

框架版本:Yii 1.1.13

 

将下载后的Yii更新包放在xampp的htdocs路径下

E:\xampp\htdocs\yii

image

 

浏览 http://localhost:8000/yii/requirements/index.php

检查Yii的参数配置,可以看到如下的配置清单。

Yii配置需求检查

P.S. 其中 PDO MSSQL extension (pdo_sqlsrv)  这一项在未配置MSSQL的时候是未通过状态。

 

接着,我们可以试运行Demo中提供的几个小例子,然后我们需要使用Yii框架提供的创建网站的工具(yiic.bat)来创建一个全新的基于Yii的空网站。

由于使用命令行创建,所以需要提前把php的路径添加到系统的环境变量中。

例:E:\xampp\php(根目录)

之后运行 % YiiRoot/framework/yiic webapp WebRoot/testweb
即可创建应用。

具体的创建过程:

image

创建完毕后,便生成了项目文件结构。

image

整体的MVC结构就出来了。

由于框架默认是支持sqllite和mysql的,对于sqlserver的支持需要手工进行添加

官网:http://www.yiiframework.com/wiki/192/config-use-ms-sql-server-2005-2008/

说明了添加sqlserver需要的步骤:

  1. download PDO MS EXT

  2. Install the Microsoft SQL Server 2008 R2 Native Client

    Please read: System Requirements (Microsoft Drivers for PHP for SQL Server)

  3. read the manual, copy .dll to PHP Ext Dir, and enable this EXT in php.ini.

由于开发环境已经安装好了SqlServer 2012了,第二部就省略了,所以就只需进行1,3的配置就可以了。

下载pdo扩展包,官网提供了两个版本,开发环境进行了尝试,使用的是V3.0的版本

也就是:http://www.microsoft.com/en-us/download/details.aspx?id=20098

里面

image

下载安装后,在开发环境最终使用了 php_pdo_sqlsrv_54_ts.dll 这个DLL(准生产环境的版本下文详细说明)

步骤:拷贝dll到php/ext目录,修改php.ini,添加 extension=php_pdo_sqlsrv_54_ts.dll,重启apache。

 

可以使用php命令  php –v 和php -m来检查php扩展模块安装的正确性。

 

根据权威指南提供的教程,我对整个Yii框架进行了大致的了解,并通过实体对象模型自动生成了一个userinfo的类和对应的增删改查的页面。

而重构所需要的设想就是让框架底层通过插件连接MSSQL,controller负责调用并返回JSON格式的数据,前端的页面采用框架提供的模板并且沿用JS进行AJAX方式的调用。

 

对于实际项目,我新建了一个TimeController,并在其中建立了一个测试方法,但是发现无法访问到。后来经过对比发现

新建controller里的方法,需要在类中的accessRules方法里进行权限的配置,否则无法访问(报403错误),于是进行了修改。

 

<?php
require_once 'protected/models/salaryQuery.php';
require_once 'protected/db/time.php';
 
class TimeController extends Controller {
    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';
    
    /**
     * @return array action filters
     */
    public function filters() {
        return array ('accessControl', // perform access control for CRUD operations
'postOnly + delete' ); // we only allow deletion via POST request
    
 
    }
    
    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules() {
        return array (array ('allow', // allow all users to perform 'index' and 'view' actions
'actions' => array ('originaltimelist', 'GetJson', 'getcardtimelist', 'Timemanage', 'Getessusercode', 'Gettimelist', 'myrequestlist', 'Getapplylist' ), 'users' => array ('*' ) ), array ('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions' => array ('create', 'update' ), 'users' => array ('@' ) ), array ('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions' => array ('admin', 'delete' ), 'users' => array ('admin' ) ), array ('deny', // deny all users
'users' => array ('*' ) ) );
    }
    
    //页面视图控制器Begin
    public function actionOriginaltimelist() {
        $this->render ( 'originaltimelist' );
    }
    
    public function actionTimemanage() {
        $this->render ( 'timemanage' );
    }
    
    public function actionMyrequestlist() {
        $this->render ( 'myrequestlist' );
    }
    //页面视图控制器End
    
    //获取已申请信息
    public function actionGetapplylist() {
        $query = $_POST ['query'];
        $appQuery = $_POST ['applyQuery'];
        
        $queryObj = json_decode ( $query );
        $timeQuery = new salaryQuery ( $queryObj->{'PageNumber'}, $queryObj->{'PageSize'}, $queryObj->{'StartNum'} );
        
        $appQueryObj = json_decode ( $appQuery );
        $applyQuery = new applyQuery ( $appQueryObj->{'ApprovalType'}, $appQueryObj->{'ApprovalTypeDetail'}, $appQueryObj->{'BeginTime'}, $appQueryObj->{'EndTime'}, $appQueryObj->{'Status'}, $appQueryObj->{'Result'}, $appQueryObj->{'Shenpiren'} );
        
        $result = get_apply_list ( $timeQuery, $applyQuery, $_SESSION ['serialnumber'] );
        $jsonstr = json_encode ( $result );
        echo $jsonstr;
    }
    
    //test function
    public function actionGetJson() {
        $connection = Yii::app ()->db;
        $sql = "select * from userinfo";
        $command = $connection->createCommand ( $sql );
        $rows = $command->queryAll ();
        
        $jsonstr_all = json_encode ( $rows );
        //echo $jsonstr_all;
        $sql = "select count(*) from userinfo";
        $command = $connection->createCommand ( $sql );
        $val = $command->queryScalar ();
        echo $val;
    }
 
}

访问的格式如下 r=控制器名称/方法名称

http://localhost:8000/mywebsite/index.php?r=Userinfo/Getjson

如果controller方法带参数,那么调用时也必须带参数,否则报错找不到controller

如http://localhost:8000/mywebsite/index.php?r=Userinfo/Getjson&id=123

 

另外,在页面引用js的时候或者配置链接地址的时候,需要使用

Yii::app ()->request->baseUrl

来获取应用程序根路径。

而且,像一些DB连接,常量等配置可以在index.php中配置,供其它地方使用。

如:define('OriginalOrgBaseUrl','http://localhost:8000/orgchart/');

经过上面所写步骤,在开发环境已经能够正常运行代码了,但是部署到准生产环境的时候,还是出了一些问题。

 

准生产环境的平台参数如下:

操作系统:windowsXP (x86)

php集成环境:Xampp 2.5.8

php 5.3.0

框架版本:Yii 1.1.13

在部署的时候,需要将Yii文件夹也复制过去提供基础框架支持。

 

部署测试的时候注意是php的MSSQL扩展安装的问题。由于准生产环境的php版本较低,所以无法使用开发环境的dll,需要重新下载。

经过尝试,最终发现了可用的dll 版本为:

php_pdo_sqlsrv_53_ts_vc6.dll

改dll在上文微软链接中的V2.0扩展包里可以找到。但是添加后,php启动正常,实际网站在调用sql连接数据库的时候,报了如下的异常信息:

 

SQLSTATE[IMSSP]: This extension requires either the Microsoft SQL Server 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native Client ODBC Driver to communicate with SQL Server. Neither of those ODBC Drivers are currently installed. Access the following URL to download the Microsoft SQL Server 2008 R2 Native Client ODBC driver for x86:

到 http://go.microsoft.com/fwlink/?LinkID=188400&clcid=0x409 这个网站上去下一个驱动文件 sqlncli.msi,安装即可。

 

提示主要说了系统缺少与sqlserver连接的odbc组件,于是上网搜索了一个可行的解决方案:

http://blog.csdn.net/nicki0923/article/details/6984627

 

文章里提供了一个微软的工具包:sqlncli.msi的下载,安装后问题解决!

 

所以证明了,在开发环境完成的程序,在生产环境并不一定能成功运行,需要多尝试,多积累处理错误的经验和方法,才能解决类似这样的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_754072.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站

2019独角兽企业重金招聘Python工程师标准>>> facebook&#xff1a; news feed&#xff1a;消息提要 消息推送 Feed&#xff0c;本意是“饲料、饲养、&#xff08;新闻的&#xff09;广播等”&#xff0c;RSS订阅过程中用到的“Feed”&#xff0c;引申为用来接收该信…

10数据集解压成图片_全球最大照片网站 Unsplash 开放图片检索数据集

内容概要&#xff1a;全球最大的照片网站 Unsplash 宣布平台已经开放了超过 20 万名摄影师的近 200 万张免费图片的&#xff0c;并开放了两个图片检索结果的数据集。原创&#xff1a;HyperAI超神经关键词&#xff1a;数据集 图片搜索 图像分类Unsplash 是世界上最大的照片摄影网…

ios图标素材_icon图标类网站

1.unDrawhttps://undraw.co/illustrationsunDraw可商用、可在线修改颜色的扁平化图形设计图库&#xff0c;图案设计很有质感&#xff0c;据说原作者Katerina Limpitsouni还在持续更新中。里面所有的图片&#xff0c;都可以免注册&#xff0c;直接下载&#xff0c;操作十分简单。…

jpg c语言读取_光城归来之C语言开发网站

C语言开发网站0.导语最近要把防火墙项目做个页面&#xff0c;而底层全部c语言实现&#xff0c;那么就得做个web页面&#xff0c;想了一下&#xff0c;C大法这么厉害&#xff0c;也应该可以的&#xff0c;然后大家就见到了这篇文章。本篇文章主要讲使用C语言如何开发网站&#x…

squid代理快速搭建_网站安全渗透 之squid代理漏洞挖掘与修复

在对网站进行渗透测试的时候&#xff0c;发现很多网站都在使用squid反向代理系统&#xff0c;该系统存在可以执行远程代码的漏洞&#xff0c;很多客户找我们做渗透测试服务的同时&#xff0c;我们会先对客户的网站进行信息搜集工作&#xff0c;包括域名&#xff0c;二级域名收集…

图片展示网站源码_arcgis api 4.x for js 自定义叠加图片图层实现地图叠加图片展示(附源码下载)...

前言关于本篇功能实现用到的 api 涉及类看不懂的&#xff0c;请参照 esri 官网的 arcgis api 4.x for js&#xff1a;esri 官网 api&#xff0c;里面详细的介绍 arcgis api 4.x 各个类的介绍&#xff0c;还有就是在线例子&#xff1a;esri 官网在线例子&#xff0c;这个也是学习…

pygame.image.load()找不到图片_PPT背景low?找不到好看的图片?那是因为你不知道这几个图片网站...

大家都知道&#xff0c;做PPT想要做得高大上一点&#xff0c;一些精美、高逼格的图片就不可缺少了。那么日常你是不是总是为PPT的背景、图片而烦恼&#xff0c;觉得PPT的背景太单调了&#xff0c;里面的图片太low了&#xff0c;想要换成高大上一点的图片&#xff0c;但是又不知…

最新ie图标变灰css,网站变灰的CSS代码(兼容火狐、Chrome、IE系浏览器)——w3cdream|前端学习-开发...

之前找了一些代码在火狐下无效&#xff0c;于是百度谷歌一起上&#xff0c;终于被我找到了支持火狐、谷歌等浏览器的把网页变黑白代码&#xff1a;/* 网站黑白代码 */html{ filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filt…

使用Python-Flask框架开发Web网站系列课程(四)构建前端

版权声明&#xff1a;如需转载&#xff0c;请注明转载地址。 https://blog.csdn.net/oJohnny123/article/details/81988424 前言 使用IDE&#xff1a;PyCharm 操作系统&#xff1a;Mac Python的版本&#xff1a;3.6 我的邮箱&#xff1a;51263921qq.com 交流群&#xff1a;3724…

【2018可信云大会】CTO袁国成:HTTPS网站安全评估与监测告警解决方案

2019独角兽企业重金招聘Python工程师标准>>> 袁国成&#xff1a;现在下午时间大家都比较累了&#xff0c;给大家带来一些干货。我今天分享的主题是关于HTTPS网站的安全评估与告警监测。 以往我们在分享安全话题的时候&#xff0c;比较多的是关于网络安全的&#xff…

【Gridsome】静态网站生成

Gridsome 介绍 Gridsome 是一个免费、开源、基于 Vue.js技术栈的静态网站生成器 什么是静态网站生成器静态网站的好处常见的静态网站生成器JAMStack静态应用的使用场景 不适合管理系统 简单页面展示 想要有更好的 SEO 想要有更好的渲染性能 Gridsome 是由Vue.js驱动的Jamsta…

echarts 各种图表网站,留着有用

2019独角兽企业重金招聘Python工程师标准>>> https://echarts.baidu.com/examples/#chart-type-treemap 转载于:https://my.oschina.net/u/3222944/blog/3001309

Java程序员的职业发展路线 附:大型网站 -- 架构技能进阶图谱

职业发展道路基本有3条&#xff1a; 第一条路线&#xff08;技术专精&#xff09;&#xff1a; 初级Java开发---中级--高级---项目主管--Java项目经理---网站架构师----资深专家 第二条路线&#xff08;技术转产品&#xff09;&#xff1a;初级Java开发---中级--产品策划--产品…

宜春网站建设

2019年“五一”小长假结束&#xff0c;很多人给假期生活的总结估计是“人从众”、“买买买”&#xff0c;以致文化和旅游部都用“繁荣超预期”来形容“五一”的文化和旅游市场。据调查&#xff0c;许多人都是通过网上购买火车票、飞机票、各景点门票以及预订酒店&#xff0c;很…

jquery 当页面图片加载之后_谷歌SEO页面速度的重要性

什么是页面速度&#xff1f;页面速度是指网页加载所需的时间。一个页面的加载速度是由几个不同的因素决定的&#xff0c;包括网站的服务器、页面文件大小和图片压缩。也就是说&#xff0c;"页面速度 "并不像 "网页速度 "那么重要。"页面速度 "并…

网站建设协议_了解这几个企业建站流程做出来的网站更让客户喜欢

网站建设步骤是网站建设当中一个重要环节&#xff0c;一个网站看它好不好&#xff0c;重要一点就是这个网站建设了。因为好的网站建设能够让浏览网站用户&#xff0c;一直停留在网站当中。很多人会问这个网站建设要怎么样才能够让用户喜欢&#xff0c;为什么宁开亮传媒免费做的…

javamail发送html_SpringBoot入门建站全系列(十)邮件发送功能

SpringBoot入门建站全系列&#xff08;十&#xff09;邮件发送功能Spring Mail API都在org.springframework.mail及其子包org.springframework.mail.javamail中封装。 JavaMailSenderImpl: 邮件发送器&#xff0c;主要提供了邮件发送接口、透明创建Java Mail的MimeMessage、及邮…

访问调用https_(二)http协议的网站装ssl升级成https

最终目标&#xff1a;微信小程序要想上线 必须内部所有域名都是https&#xff0c;比如网络图片&#xff0c;比如后端接口&#xff0c;比如其他链接。问&#xff1a;既然https://minihome.top/能直接访问了&#xff0c;那我用eggjs(node)写的后端接口是不是就可以正常访问了&…

推荐几个很好很好用的网站

1. MSDN 这是非官方性质的微软网站&#xff0c;但是它无广告&#xff0c;提供了很多的微软资源&#xff0c;却是相当的良心。如果要安装操作系统、office、VS、Visio等都可以从这个网站上进行下载。 2. 高清图片 该网站提供很多高清壁纸&#xff0c;风格清新&#xff0c;艺术风…

大型网站架构技术一览

大型网站的挑战主要来自庞大的用户&#xff0c;高并发的访问和海量数据&#xff0c;任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户&#xff0c;问题就会变得棘手。大型网站架构主要就是解决这类问题。 本文内容大部分来自《大型网站技术架构》,这本书很值得一…