解决PHP内存溢出
有时候我们在运行php程序的时候会发现 Fatal Error: Out of memory 这样的提示。 这有可能是程序中用到了大量了变量和对象,导致分配的内存不够用。
我们可以在php.ini文件中把memory_limit参数默认的128M修改为256M或者更大:
memory_limit = 128M如果是虚拟主机,我们可以在程序需要用到大内存的地方添加:
init_set("memory_limit", "128M");
这些可以在硬件环境方面解决我们的问题,不过最好的方法还是严格控制程序中内存的损耗。及时unset一些大而不用的变量或对象。
利用 Yii Component 的特性为 Model 添加额外属性
Yii的使用者都知道Yii是一个基于Component开发的框架,我们平时用到的Controller,Model等其实都是Component,因此我们也可以利用Component的特性来为我们的model添加一些功能。
平时我们建立的user表总是会涉及到first_name, last_name, 而在系统中我们要用到的却经常是完整人名。
//action $user = User::model()->findByPk($id); $this->render('show', array('user' => $user));
//view <span>< ?php echo $user->first_name . ' ' . $user->last_name ?></span>
Yii 1.1 新元素 CForm
1.1中增加了表单构建器CForm,对于表单构建器大家总是褒贬不一,有的人认为简化了工作,有的人认为把原来简单的事情复杂化了。个人认为对于构建不需要有复杂界面修饰布局的表单,表单构建器还是不错的选择,这还增加了表单的复用性。
让我们看看代码,CForm是如何工作的:
// action: $config = array( 'action' => array('site/login'), 'method' => 'post', 'elements' => array( 'username' => array('type' => 'text'), 'password' => array('type' => 'password'), ), 'buttons' => array( 'login' => array('type' => 'submit', 'label' => '登录'), ), ); $form = new CForm($config, new User); if ($form->submitted() && $form->validate()) { //....... } $this->render('test', array('form' => $form));
Yii: 1.1 scenario在验证中的变化
1.1中对CActiveRecord中的scenario作了一些改变
1.0.x的代码
$user = new User; if(isset($_POST['User'])) { $user->attributes = $_POST['User']; $user->validate('register'); }
在1.1以后已经不能在各个函数中单独设定scenario的值,需要通过公共属性来改变当前scenario。
1.1的代码
$user = new User; if(isset($_POST['User'])) { $user->attributes = $_POST['User']; $user->scenario = 'register'; $user->validate(); }
Yii: 利用Clip片段构建复杂界面
大家都知道Yii里为我们提供了layout效果,我们可以把一个view嵌入事先设计好的layout。但随着网站设计越来越多变,越来越复杂,光光layout内一个$content 变量在载入view似乎有时候并不能满足我们的需求。如果页面中有好几个地方需要时时变动呢? 没关系, Yii还为我们提供了Clip这个方法,这个其实有点类似与Django中的block。
比如现在我们需要构建一个布局,左边是主要内容,侧边栏上有个子菜单和一段介绍文字,在每个不同的页面上,子菜单和介绍文字都是是不同的。让我们看看代码,这个应该更直接:
Yii: Just another way to use GridView
在上一篇 “Yii GridView 初探 ” 中介绍了如何使用Yii的GridView新插件。 今天当我翻阅Yii 代码的时候发现qiang还给我们提供了CDetailView这个类来完成类似的功能。两者到底有什么区别呢? 我们都知道 CGridView是根据数据表结构来生成我们需要的数据,而CDetailView是根据我们平时一直用到的model实例来生成数据。
同样以上一个列子来写,看看有什么不同:
$criteria = new CDbCriteria; $criteria->select = 'user.id, username, fullname, email, last_login, company.name'; $criteria->order = 'username'; $users = User::model()->with('company')->together()->findAll($criteria);
很容易发现,这是我们以前在写Yii代码中做的最多的事。
Yii GridView 初探
最近在社区成员的强烈要求下,qiang也开始开发了Yii的GridView widget。根据qiang的意思此widget应该会在1.1rc的时候发布。不过今天当我更新svn的时候发现这个插件已经出现在zii的插件包中了,新东西当然都试下,接下来让我们看看 CGridView是怎么工作的。
首先通过下面这段代码,我们在action中生成了一个dataProvider可以提供给view中的widget调用
$userData = new CActiveDataProvider('User', array( 'pagination'=>array( //所以关于pagination的设置都可以在这里进行 'pageSize'=>10, ), 'sort' => array( //所以关于csort的设置都可以在这里进行 'defaultOrder' => 'username' ) ));
扩展 Yii Framework 的控制台功能
Yii已经为我们提供了很好的控制台功能,我们可以利用控制台创建webapp,controller, action等来加速我们的开发。同时我们还可以自己来扩展控制台应用(console application)来满足我们更多的项目需求。
console app 和 web app 类似,我们需要一个入口文件,默认的情况我们可以在protected目录发现这些文件(yiic.php, yiic, yiic.bat),其中yiic.php为入口文件,yiic为linux的执行文件,yiic.bat为windows上的执行文件。这3个文件会在我们创建webapp 的时候自动生成, 如果没有我们也可以手动加入这3个文件。
< ?php //yiic.php // change the following paths if necessary $yiic=dirname(__FILE__).'/../framework/yiic.php'; $config=dirname(__FILE__).'/config/console.php'; require_once($yiic);
如何在 Yii 配置中为 MySQL 设置自定义端口
在 Yii 的教程中并没有提到如何为 MySQL 自定义数据库端口,其实也很简单,我们只需要把connectionString稍作修改就可以了。
先让我们看看原始的设置:
'db' => array( 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=localhost;dbname=db1', 'username' => 'root', 'password' => '', ),
下面是修改过的代码:
'db' => array( 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=localhost;port=3317;dbname=db1', 'username' => 'root', 'password' => '', ),
看到区别了吗? 我们在connectionString中插入了port=3317 这样的参数设置。 然后记得在参数间用“;”分开, 就这么简单:)
yii framework翻译:闭门造车?
今天才发现我的 yii framework blog tutorial 的翻译工作原来是造车。 在我之前,原来已经有前人把所有的 blog 教程都已经翻译完成了,可见 yii 的社区的志愿者是多么的热情。
在这里我们没有必要反复的去做轮子,所以blog 教程的翻译工作就此停止。 如果有谁希望看完整的blog 教程,可以访问 http://www.yiiframework.net/index.php?r=post/show&id=1
最后在这里感谢这位贡献者。