2010-05-26

使用symfony filter 过滤URL

类归于: symfony — 标签:, , szn000 @ 09:30

这是一个过滤URL中 多个’/'的例子
修改 apps/myapp/config/filters.yml
添加代码
myFilter:
class: myFilter

(myFilter可自定义)
创建文件myFilter.class.php
创建位置apps/myapp/lib/
文件内容如下
使用preg_match 是因为 ereg 过时
注意preg_match 匹配正则时以’/'开始和结束
class myFilter extends sfFilter
{
public function execute ($filterChain)
{
//提取uri
$str = $_SERVER['REQUEST_URI'];
//判断是否匹配正则
if(preg_match("/(.*\/{2,}.*)((\.html)*)/",$str)){
//要跳转的页面
header("Location:/error.html");
//跳转后代码不执行
exit();
}
//执行下一个filter
$filterChain->execute();
}
}

修改apps/myapp/config/routing.yml
添加代码 此代码用来定义URL /error.html 要执行的模块和动作
Error:
url: /error.html
param: { module: index, action: error404}

2010-05-25

仿symfony机制实现不用require或者include来实例化类

类归于: PHP, symfony — 标签:, kthiz2006 @ 10:35


class MyClass {
public static function register() {
//如果解串行器发现有未定义类要被实例化,则设置spl_autoload_call函数加载请求类.
ini_set('unserialize_callback_func', 'spl_autoload_call');
//自动载入类,类似于__autoload
if (false === spl_autoload_register(array("MyClass","autoLoad"))) {
throw new Exception('wrong');
}
}
//处理自动载入类
public static function autoload($className) {
require realpath(dirname(__FILE__)).'/lib/'.strtolower($className).'.class.php';
}
}

只要在项目目录中创建一个类的目录,这里我创建的叫lib,往这里放入你要放的类的文件。
注:
1.类的文件名要统一规则,这样方便系统快速地进行查找,避免消耗更多的内存。
2.autoload的函数的载入类的规则可以依据需要进行设置,我这里规定要载入我的lib目录里文件的扩展名是class.php的类的文件。

以下是使用的例子:
在创建的lib目录里方了一个叫cache的类的文件。
接着在你要编写的程序文件里载入上边的说的自动载入类的文件,使用MyClass::register(),就可以不用载入要实例化的类的文件直接实例化刚才的cache的类的文件。

以上说的实现的效果必须是php的版本>=5.1.2

2010-05-21

symfony1.4 DateTime对于PHP低版本的兼容问题

类归于: symfony — 标签:, szn000 @ 13:17

在symfony1.4中使用DateTime 类 但是该类出现于 PHP 5.2.0以后 所以在使用(部分方法需要在PHP5.3.0以后版本才能使用)PHP5.2.0以前版本的服务器上 调用symfony调用该函数会出错 为了解决该类问题根据 PHP5.2.0 的DateTime类 写了俩个类 用以在低版本中使用该类
以重写方法
DateTime.class.php
__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
string format ( string $format )
int getOffset ( void )
int getTimestamp ( void )
DateTimeZone getTimezone ( void )
DateTime setDate ( int $year , int $month , int $day )
DateTime setISODate ( int $year , int $week [, int $day = 1 ] )
DateTime setTime ( int $hour , int $minute [, int $second = 0 ] )
DateTime setTimestamp ( int $unixtimestamp )
DateTime setTimezone ( DateTimeZone $timezone )
DateTime __wakeup ( void )

DateTimeZone.class.php
__construct ( string $timezone )
string getName ( void )
int getOffset ( DateTime $datetime )

文件下载地址: 下载点击我
附件使用时把类名中的My删除

2010-05-20

如何在fixtures.yml写循环添加数据

类归于: symfony — 标签:kthiz2006 @ 16:03

举一个简单的例子:
city表的字段有id,enabled,name
那么往city表插入字段的写法如下:

city:
<?php for ($i = 1; $i <= 6; $i++): ?>
city_<?php echo $i ?>:
enabled: 1
name:    city<?php echo $i."\n" ?>//用php写表的字段的数据结尾时一定写上"\n"
<?php endfor; ?>

注意:书写时一定要注意fixtures.yml的写法,注意空格.

2010-02-02

symfony 1.4 数据库 utf8设置

类归于: PHP, symfony — 标签:, , , bobhero @ 17:30

symfony 1.4 更新好长时间了

也准备放弃 symfony1.2 改投 1.4

1.4照比 1.2有了很多更新 官方文档 我不是很满意,感觉有很多东西在文档上找不到全靠自己看代码 及 搜 英文blog

其中  symfony 1.4 对utf8  数据库的支持 我在 官方的文档中并没有找到好的例子 ,在英文blog中找到了一些个解决办法
如下

dsn:      sqlite:%SF_DATA_DIR%/database.db
username: root
password: 123456
attributes:
default_table_collate: utf8_general_ci
default_table_charset: utf8

早前文章 »

WordPress 所驱动