文章归档

[MixMVC]MixMVC3.1 Image

最新在完善upload widget的时候顺便制作的Image Model,主要是用于处理图片缩放及裁剪。 SVN: http://192.168.33.2/svn/mixmvc3/project/MST_v3.1/application/models/Image.php Class里面对每个function都有注解,可以直接查看注解的使用说明。 以下是使用例子: $img = new Image(); $img->load('test.jpg'); //load完之后调用available() 防止加载的不是图片文件 if (!$img->available()) { return; } $img->crop(100, 100); $img->save('out.jpg', IMAGETYPE_JPEG, 100); 原图 [1024×768] 使用裁剪缩放 [100×100] $img = new Image(); $img->load('test.jpg'); //load完之后调用available() 防止加载的不是图片文件 if (!$img->available()) { return; }

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 View概述

1.Layout概念: 先看一下基本的页面结构:   如上图,在MixMVC3.1中有一个布局(Layout 一些框架称之为container)的概念,它表示页面的基本容器。 一般我们把head 元素,html body页面基础元素放到layout之中。还可以把一些基本的固定页面结构如上图黑色部分,放到layout之中。   2.Layout的编写: Layout文件一般存放在application/views/__layouts 目录下 通过controller中的$layout 变量定义流程中使用的layout文件。 一个常见的layout如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><?php echo $this->systemName, ' > ', $this->pageTitle ?></title> <?php $this->stylesheet('admin.css'); $this->script(array('mootools/core-1.2.5.js', 'mootools/more-1.2.4.2.js', 'application.js')); ?> </head> <body>

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 工具及示例

1.更新了框架自带项目的后台js库,升级为bootstrap 3.0,将mootools的依赖去掉。 最新的后台效果见 http://demo2.mixmedia.com/mvctools   2.更新一个Model构建器(其实这个大家已经知道,只是没有正式发布而已) http://demo2.mixmedia.com/mvctools/database 大家只要是在33.2上新建的数据表,都可以通过此工具生成框架Model文件。   3.更新基础widget的实例代码(分别是grid及form组件的使用方法)。 http://demo2.mixmedia.com/mvctools/sample/grid

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 关于类方法中的引用传递

我在看框架内的class MST_DBC 时,该类中的一个final static public function & connect($remote = null) 方法 引起了我的好奇!因为读了下这方法的代码,它最终是: self::$_register[$remote] = new $adapterClass($config); return self::$_register[$remote]; 看上去是返回了数组return self::$_register[$remote];值,但是看它上面这数组的赋值是一个new 出来的对象。这里就引起兴趣的地方。 我查了相关资料,并实践了一下: <?php class A { public $str = 'Hello'; public $arr = array(1,2,3); public function & arr(){ return $this->arr;

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1] 中 ActionView基类的提议

用了一段时间的公司框架,发现在controller上动态加上的属性,在view里要额外判断才能正确无误的输出,那么能利PHP5类的特性来简化代码呢?我实现了一下,测试可行。还请大师审视!let me go! 我在Controller里写入一个demoController.php代码如下: <?php class DemoController extends __Application { public function indexAction() { return false; } public function testaAction() { $this->dynamicPro = '这是动态添加的属性'; return $this->render(self::VIEW, 'demo'); } public function testbAction() { return $this->render(self::VIEW, 'demo'); } } 然后View层里新建demo.phtml <?php echo

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 Validator

在MixMVC中,DBO集合中提供一个非常便利的数据验证模块,MST_DBO_Validator该类已经集成到DBO中,我们也可以独立调用,在最近完成的安装程序中就有独立调用MST_DBO_Validator的例子。   为什么要有数据验证模块? 我们在开发中,所以提交表单(form)最常见的逻辑处理就是数据验证,例如一些字段是必填的,一些字段是数字等,很多时候我们都要重复写这些验证代码。所以很多框架中都会实现一个通用的数据验证模板。当然MixMVC也用这个功能。   数据验证的基本规则 MST_DBO_Validator中定义了一些规则,用于一些基本的验证处理。其他再特殊一点的验证处理请使用DBO中beforeValidate回调自己实现。 具体规则如下: $columns = array( 'username' => array( 'require' => 1, //该字段必填 'isNumber' => 1, //该字段是数字 'isFloat' => 1, //该字段是浮点数 'numMax' => 100, //该字段允许的最大值 'numMin' => 1, //该字段允许的最小值 'max' => 10, //该字段允许最大字符长度,跟项目的编码计算字符长度 'min' =>

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 Model

在MixMVC中,model代表具体是数据逻辑封装,其中包括数据库访问、外部接口访问[外部web service、memcached、smtp]等,一切跟数据有关的逻辑都会封装到Model里面,最常用的当时数据库访问的封装了。 Model结构 在MixMVC中,如果需要使用数据库相关的接口,我们需要model继承MST_DBO,MST_DBO 封装了常用的CRUD操作API。配合不同的MST_DBC后端,可以实现对不同的数据库的操作,暂时已经实现的DBC只支持MySQL及Oracle。 PS: 有兴趣的同学可以继续向下研究。 更快捷的方式是,到 http://192.168.33.6/mvctools 使用这个生成工具,直接生成相关的Model php文件。 当我们继承了MST_DBO后,我们首页需要建立Model与数据表之间的映射,我们需要在继承类中设置一下静态变量: 一个Model文件的基本模板: //所有model一般都是有关于操作数据库的,所以一般我们都会继承自MST_DBO。 //这里的类名是使用的pear风格的命名规范,其中Edm_Admin 是命名空间(namespace), //该文件会放到application/models/edm/admin/Session.php //注意文件夹的命名都是小写的,而类名(ClassName)中是首字母大写的,而已文件名就跟类名(ClassName)一样是首字母大写的。 class Edm_Admin_Session extends MST_DBO { protected static //$columns数组,所有继承于MST_DBO的类,必须包含的定义,用于定义具体的字段参数。 //数组中包含多个配置定义,分别用于自动生成form组件,及数据验证时使用。 //基本格式为 $key => array($type, 'title' => $title) $key 字段在数据库中的名称, //$type form组件类型会根据此值生成相关的input[text/datepicker/radiogroup等] //$title 关于该字段的文字描述,

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 示例项目更新

本次更新主要优化了项目创建的流程,添加了安装程序,方便入门者快捷的完成项目的初始配置。然后把默认的内置后台添加到示例项目中,用于代码参考。 有兴趣的朋友可以导出 SVN: http://192.168.33.6/svn/mixmvc3/project/MST_v3.1 到本地目录,然后访问public/install.php 体验项目安装。     2014-05-12更新 精简了widget组件,只保留了grid/form,后台UI更换成bootstrap V3 / jQuery, 去掉mootools库的依赖。 MVCTools 更新了 Form/Grid的实例代码。 http://demo2.mixmedia.com/mvctools/sample/form http://demo2.mixmedia.com/mvctools/sample/grid    

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 Request

MixMVC为了在整个请求流程中,添加MVC相关的一些参数又不想污染全局的$_GET,$_POST,$_REQUEST对象,所以重新将$_GET,$_POST,$_REQUEST封装成MST_ActionController_Request对象。MST_ActionController_Router会根据请求的URL,将MVC的相关参数填充到MST_ActionController_Request之中,在Controller及View中,都可以通过$this->params 变量获取MST_ActionController_Request对象。 预定义参数 MST_ActionController_Request的预定义参数需要使用类属性的方式获取,使用array的[key_name]方式获取参数将会报错。 class IndexController extends MST_ActionController { public function indexAction() { $this->params->get; //获取$_GET $this->params->post; //获取$_POST $this->params->files; //获取$_FILES } } 预定义函数 MST_ActionController_Request预定义了一些的函数,去简化了一下流程。 class IndexController extends MST_ActionController { public function indexAction() { $this->params->getRequestIp(); //获取请求IP(字符串格式 如:192.168.33.1) $this->params->getRequestIp(true); //获取请求IP(整形格式) $this->params->isPost('register'); //判断POST提交,配合MST_Core::generateValidCode($prefix)使用,用于验证请求来源,防止恶意提交 $this->params->isAjax();

文章分类 MixMVC, 经验分享

[MixMVC]MixMVC3.1 Controller

MixMVC 中所有的controller继承于MST_ActionController,负责View与Model之间的调度。一般只建议把调用代码写到Controller中,尽量减少把具体逻辑的实现写在Controller中。 命名规则: 定义Controller的文件放在application/controller目录下,文件命名规则是首字母大写。 例如:定义了Class IndecController, 那对应的PHP文件应该是IndexController.php 默认URL路由: MixMVC中预定于一套UrlReWrite规则 默认的规则{:controller}/{:action}/{:target}/{:others}.{:format} MST_ActionController_Router会将URL按以上默认规则,然后填充到MST_ActionController_Request中,然后调用相关的Controller。 例子: URL:http://localhost/index/index/article.html 这个URL中MST_ActionController_Router会理解成 调用IndexController中的indexAction() 方法,而MST_ActionController_Request填充后会包含以下内容: $this->params = array( 'controller' => 'index', //controller名称 'action' => 'index', //action名称 'target' => 'artcle', //target参数 'format' => 'html', //请求格式 ); 备注:在controller中$this->params一个MST_ActionController_Request对象。   MixMVC中对URL路由默认的匹配参数,如果url中没有明确指定controller 及

文章分类 MixMVC, 经验分享