在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删除
举一个简单的例子:
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的写法,注意空格.
这是由bobhero发现的一个很有趣的问题. 废话不多说, 直接上代码.
var_dump(array() > 9999); // true
结论:任何数组大于整数
var_dump(array() > 'abc'); // true
结论:任何数组大于字符串
var_dump(array() < array('a')); // true
结论:任何非空数组大于空数组, 其实这个应该是所有人都知道的
var_dump('abc' > '123');// true
这个没有结论, 是字符串比较的问题
var_dump('abcasdfad' > 123);// false
var_dump('abcasdfad' > 1);// false
var_dump('abcasdfad' > 0);// false
结论:任何整数大于字符串
以上是实验过程和结论, 刚发现的时候我也是很惊奇的, 不过最终也没弄明白其中的原理, 希望高手指点.
由于不规范的URL带有程序和数据库的结构信息会给程序带来隐患并且在程序中经常需要使用?name=value来传递变量的值所以修改URL非常重要.
在symfony中 使用 routing.yml 文件就可以修改URL
下面是一个URL修改的例子
将 project/news/show?title=123 修改成 project/news/123.html
在projiect/apps/myapp/config/routing.yml 添加下列代码
shownews:
url: /news/show
param: { module: news, action: show }
上面代码是定义一个 @shownews 路由使其访问 news/show
注意:每次修改routing.yml 后需要执行 symfony cc 清理缓存
在页面中添加如下代码
<?php echo link_to($name, '@shownews?title='. $title);?>
$name是超链接名称
$title是要传递的值
(如果 $name=’测试’ $value=’123′)
上面的php代码转换成HTML代码如下
<a href="/news/show?title=123">测试</a>
在projiect/apps/myapp/config/routing.yml 修改代码
shownews:
url: /news/:title.html
param: { module: news, action: show }
requirements:
title: \w+
PHP代码
将转换成
<a href="/news/123.html">测试</a>
SYMFONY 自带的 生成标签的函数(setTitle()) 会默认生成一个 <META NAME=’TITLE’…>这样的一个 标签,这个标签会在 SETTITLE 里受影响 即 同时设置两个TITLE 一个是 <TITLE>一个是<META> 根据客户需求有些时候需要删掉 META NAME=’TITLE’ 这种,办法如下
新建MyProject/app/MyApp/lib/myWebResponse.class.php 文件
插入如下代码
class myWebResponse extends sfWebResponse
{
protected $title = null;
/*
* 在Web Response 里搜索Title
*
* 返回Title字符串
*/
public function getTitle()
{
return $this->title;
}
/*
* 设置Title为响应Title
*
* 参数 title string ,Title内容
* 参数 rscape boolean true, 用以确认是否格式化字符串
* 参数 replace boolean true, 用以确认是否覆盖字符串
*/
public function setTitle($title, $escape = true, $replace = true)
{
if (is_null($title))
{
unset($this->title);
return;
}
// 注意: 如果你使用i18n 曾转码 该判断将不会工作
// 查看 include_metas() 在源文件的 AssetHelper
if ($escape)
{
$title = htmlspecialchars($title, ENT_QUOTES, $this->options['charset']);
}
if ($replace || is_null($this->title))
{
$this->title = $title;
}
}
}
在文件MyProjiect/apps/MyApps/config/factories.yml
里使用 myWebResponse 替换 sfWebResponse
例如 在factories.yml中添加(替换成)如下代码
all:
response:
class: myWebResponse
param:
send_http_headers: false
上面代码中的all可以替换成相应的模式(生产,开发等)
执行 symfony cc (用于清理symfony产生的缓存文件)
注:该程序执行原理是重写了sfWebResponse setTitle 和 getTitle 两个方法
使setTitle 添加title的时候不添加 mate name = title
sfWebResponse setTitle源代码如下
public function setTitle($title, $escape = true)
{
$this->addMeta('title', $title, true, $escape);
}