1.symfony如何添加自己定义的错误验证信息。
http://www.symfony-project.org/forms/1_2/en/02-Form-Validation
$nameValidator=new sfValidatorDoctrineChoice(array('model' => 'User', 'column' =>'name'),array( 'invalid' =>'Name not exist' ));
编辑默认的提示,如果默认提示为invalid 那么添加array('invalid'=>'your invalid message') 再比如Required array('Required'=>"This filed is required")
添加自定义的时候需要声明一个数据array,保证有invalid这个键值。框架就是框架不明白就不知道在哪加,我找了好半天才找到添加方法。
2. 有时候项目文件需要打包压缩和解压缩 记录一下
把整个文件夹 folderTared 的内容打包成一个gz文件:
tar czvf folderTared.tar.gz /theDir/folderTared
把压缩的gz文件恢复到指定目录下:
tar xzvf folderTared.tar.gz /theDir/
3.在生成了默认的CRUD操作之后,如何修改默认的模板。
因为symfony默认生成了CRUD后,比如在new操作的时候,就是默认的模板,如何修改这个模板呢?如果有一个表:user。字段name,password .
首先看看 baseUserForm里的Function SetUp里
$this->setWidgets(array(
'name' => new sfWidgetFormInput(),
'password' => new sfWidgetFormInput()
));
$this->widgetSchema->setNameFormat('user[%s]');
生成两个文本狂,文本框的名字为这样的样式。
<input type="text" name="user[]" />
<input type="text" name="user[password]" />
所以只要自己的form是这样的格式,就可以了。
至于如何绑定,就是symfony帮我们做的了。
知道了数据格式是这样的,如果我们要加什么样式,那么就直接编辑html了。只要对应的input保持一样的就ok.
4.Symonfy1.2版本文件上传。
今天学习文件上传,找了好多例子,很多都是1.0的,可是symfony1.0的API在Symonfy1.2里面通不过,根本就没提供手动上传文件的方法,还是得借助PHP本身
文件上传的方法。
Code
5. Symfony分页。
symfony分页显得尤其简单,直接上代码。
//excute里的代码
public function executeIndex(sfWebRequest $request)
{
//对应的是User模块,也就是对应的是User表的记录。
//????如果我这个分页要实现多个表单记录呢?有时间再学习下。
$this->pager = new sfDoctrinePager('User',5);
$this->pager->getQuery();
$this->pager->setPage($this->getRequestParameter('page',1));
$this->pager->init();
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//indexSuccess里的代码
<table>
<tbody>
<?php foreach ($pager->getResults()as $user): ?>
<tr>
<td><a href="<?php echo url_for('user/show?id='.$user->getId()) ?>"><?php echo $user->getId() ?></a></td>
<td><?php echo $user->getName() ?></td>
<td><?php echo $user->getPassword() ?></td>
<td><?php echo $user->getCreatedAt() ?></td>
<td><?php echo $user->getUpdatedAt() ?></td>
</tr>
<?php endforeach; ?>
<?php if ($pager->haveToPaginate()): ?>
<tr>
<td colspan="5">
<?php echo link_to('First', 'user/index?page='.$pager->getFirstPage()) ?>
<?php echo link_to('Pre', 'user/index?page='.$pager->getPreviousPage()) ?>
<?php $links = $pager->getLinks(); foreach ($links as $page): ?>
<?php echo ($page == $pager->getPage()) ? $page : link_to($page, 'user/index?page='.$page) ?>
<?php if ($page != $pager->getCurrentMaxLink()): ?> - <?php endif ?>
<?php endforeach ?>
<?php echo link_to('Next', 'user/index?page='.$pager->getNextPage()) ?>
<?php echo link_to('Last', 'user/index?page='.$pager->getLastPage()) ?>
<?php endif ?>
</td>
</tr>
</tbody>
</table>
http://www.symfony-project.org/forms/1_2/en/02-Form-Validation
$nameValidator=new sfValidatorDoctrineChoice(array('model' => 'User', 'column' =>'name'),array( 'invalid' =>'Name not exist' ));
编辑默认的提示,如果默认提示为invalid 那么添加array('invalid'=>'your invalid message') 再比如Required array('Required'=>"This filed is required")
添加自定义的时候需要声明一个数据array,保证有invalid这个键值。框架就是框架不明白就不知道在哪加,我找了好半天才找到添加方法。
2. 有时候项目文件需要打包压缩和解压缩 记录一下
把整个文件夹 folderTared 的内容打包成一个gz文件:
tar czvf folderTared.tar.gz /theDir/folderTared
把压缩的gz文件恢复到指定目录下:
tar xzvf folderTared.tar.gz /theDir/
3.在生成了默认的CRUD操作之后,如何修改默认的模板。
因为symfony默认生成了CRUD后,比如在new操作的时候,就是默认的模板,如何修改这个模板呢?如果有一个表:user。字段name,password .
首先看看 baseUserForm里的Function SetUp里
$this->setWidgets(array(
'name' => new sfWidgetFormInput(),
'password' => new sfWidgetFormInput()
));
$this->widgetSchema->setNameFormat('user[%s]');
生成两个文本狂,文本框的名字为这样的样式。
<input type="text" name="user[]" />
<input type="text" name="user[password]" />
所以只要自己的form是这样的格式,就可以了。
至于如何绑定,就是symfony帮我们做的了。
知道了数据格式是这样的,如果我们要加什么样式,那么就直接编辑html了。只要对应的input保持一样的就ok.
4.Symonfy1.2版本文件上传。
今天学习文件上传,找了好多例子,很多都是1.0的,可是symfony1.0的API在Symonfy1.2里面通不过,根本就没提供手动上传文件的方法,还是得借助PHP本身
文件上传的方法。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
5. Symfony分页。
symfony分页显得尤其简单,直接上代码。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)