ZheX Blog Idea来源于生活的经验

17十二/090

解决PHP内存溢出

有时候我们在运行php程序的时候会发现 Fatal Error: Out of memory 这样的提示。 这有可能是程序中用到了大量了变量和对象,导致分配的内存不够用。

我们可以在php.ini文件中把memory_limit参数默认的128M修改为256M或者更大:

memory_limit = 128M

如果是虚拟主机,我们可以在程序需要用到大内存的地方添加:

init_set("memory_limit", "128M");

这些可以在硬件环境方面解决我们的问题,不过最好的方法还是严格控制程序中内存的损耗。及时unset一些大而不用的变量或对象。

13十二/090

利用 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>
11十二/090

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));
10十二/090

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(); 
}
9十二/090

Yii: 利用Clip片段构建复杂界面

大家都知道Yii里为我们提供了layout效果,我们可以把一个view嵌入事先设计好的layout。但随着网站设计越来越多变,越来越复杂,光光layout内一个$content 变量在载入view似乎有时候并不能满足我们的需求。如果页面中有好几个地方需要时时变动呢? 没关系, Yii还为我们提供了Clip这个方法,这个其实有点类似与Django中的block。

比如现在我们需要构建一个布局,左边是主要内容,侧边栏上有个子菜单和一段介绍文字,在每个不同的页面上,子菜单和介绍文字都是是不同的。让我们看看代码,这个应该更直接:

8十二/090

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代码中做的最多的事。

7十二/098

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'
    )
));
5十二/090

扩展 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);
13七/092

如何在 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 这样的参数设置。 然后记得在参数间用“;”分开, 就这么简单:)

18六/096

yii framework翻译:闭门造车?

今天才发现我的 yii framework blog tutorial 的翻译工作原来是造车。 在我之前,原来已经有前人把所有的 blog 教程都已经翻译完成了,可见 yii 的社区的志愿者是多么的热情。

在这里我们没有必要反复的去做轮子,所以blog 教程的翻译工作就此停止。 如果有谁希望看完整的blog 教程,可以访问 http://www.yiiframework.net/index.php?r=post/show&id=1

最后在这里感谢这位贡献者。

   下一页