更多内容在
http://www.onepie.org
symfony自动生成的Filter有一些局限性,比如不能过滤关联表的特定字段,过滤的表单只有input和select两种,
下面介绍处理上面两个问题的解决方案。
1. 关联表字段查询
假设我们有Order和User两张表,Order中有user_id和User关联,Syfmony默认可以通过user_id来过滤,现在想通过User的name字段模糊查询获得用户的所有订单。
在
sfFormFilterDoctrine中有方法doBuildQuery,
if ($this->getTable()->hasField($field))
{
$method = sprintf('add%sColumnQuery', self::camelize($this->getFieldName($field)));
}
else if (!method_exists($this, $method = sprintf('add%sColumnQuery', self::camelize($field))) && null !== $type)
{
throw new LogicException(sprintf('You must define a "%s" method to be able to filter with the "%s" field.', $method, $field));
}
从上面的代码可以看出只要增加一个add%FiledName%ColumnQuery方法即可以自定义每个字段的查询,所以只要添加如下代码
public function addUsernameColumnQuery(Doctrine_Query $query, $field, $value)
{
$query->leftJoin('r.User u');
if(!empty($value)){
$query->andWhere('u.name like ?', "%$value%");
}
}
2. 自定义Filter表单字段类型
假设我们有一张商品表Product, 其中有一个字段status,我们需要使用checkbox选择多个状态来过滤商品
首先在ProductFormFilter的configure函数中添加
$this->widgetSchema['status'] = new sfWidgetFormChoice(array(
'choices' => self::$STATUS_TEXT,
'multiple' => true,
'expanded' => true,
));
$this->validatorSchema['status'] = new sfValidatorChoice(array(
'required' => false,
'multiple' => true,
'choices' => array_keys(self::$STATUS_TEXT),
));
这和定义Form的widget一样,但是如果这样的还不行, 因为涉及到多选,但默认status是input的类型,所以我们需要让symfony知道我们现在传过来的参数可能是数组,在filter中重载getFields方法,把status字段设为ForeignKey类型
public function getFields()
{
$fields = parent::getFields();
$fields["status"] = "ForeignKey";
return $fields;
}
分享到:
相关推荐
过滤器的灵活性很高,可以轻松地添加自定义逻辑。在 Symfony 中,过滤器可以分为两类: - **前置过滤器**:在动作执行前运行。 - **后置过滤器**:在动作执行后运行。 这些过滤器可以用来处理诸如权限验证、日志...
这些过滤器可以通过注解的方式添加到实体类中,从而实现自定义的过滤行为。 #### 三、使用Search Filter进行模糊查询 ##### 3.1 Search Filter简介 Search Filter是最常用的一种过滤器,它可以实现对实体属性的...
本文将深入探讨“logical-filter-bundle”这一主题,它涉及到Symfony和API平台中的过滤器和逻辑,帮助开发者更好地理解如何利用这些工具进行数据筛选和处理。 首先,让我们了解什么是过滤器。在软件开发中,过滤器...
- **filter**:对变量应用过滤器进行转换。 - **embed**:嵌入另一个模板中的部分。 - **extends**:继承自另一个模板。 - **for**:循环遍历数组或迭代器。 - **if**:条件语句。 - **include**:包含另一个模板...
原则关联映射支持表单和过滤器中的多对一,一对一和多对多(如果关系是拥有方) 排序 每页项目 多行批量操作(删除) 从索引中删除 在生成的视图中设置基本模板。 可以为所有生成的文件设置保存路径(默认情况下...
预加载默认过滤器并重置本地存储过滤器 智能过滤多个单词(Filter :: TYPE_LIKE_WORDS_AND) (测试版)支持api调用以通过网络服务加载资源 计划功能: 更多翻译 添加高级模板 新的列显示类型(现在:仅原始文本值...
例如,创建一个自定义过滤器: ```php use Spatie\TwigBridge\TwigExtensions; use Illuminate\Support\Facades\App; App::make(TwigExtensions::class)->addFilter('my_filter', function ($value) { // 过滤器...
- 输入验证:使用filter_var等函数过滤非法字符。 - SQL注入防护:使用预处理语句或ORM操作数据库。 - 密码加密:使用bcrypt等算法存储密码。 #### 六、总结 本系列视频教程详细介绍了如何使用PHP语言构建一个...
4. **过滤器**:`filter_var`函数是PHP提供的一个强大过滤器,可以用于验证和清理用户输入,例如验证URL、IP地址、邮箱等。 5. **自定义函数**:对于特定需求,开发者可以编写自定义函数进行验证,例如,验证密码...
创建自定义过滤器涉及实现`Twig_Filter`接口或使用`twig_filter`函数注册。 2. **函数(Functions)**:函数在模板中作为独立的表达式出现,返回值可以在模板中使用。例如,`asset()` 是一个内置函数,用于获取应用...
`filter_name`可以是各种内置或自定义的过滤器,如`e`用于转义HTML实体。 **set标签**用于创建变量: ```twig {% set myVariable = 'Hello World' %} ``` **extends和block标签**用于模板继承和重写,使得代码复用...
在齐博企业网站中,可能使用自定义的路由规则或框架如Laravel、Symfony的内置路由功能。 7. **表单处理**:PHP能够接收和验证HTTP请求中的表单数据,用于用户注册、登录或其他交互。开发者会利用`$_POST`超级全局...
- 函数:自定义函数,内置函数如echo、print、isset、unset等。 2. **PHP进阶** - 引用与值传递:理解引用传递和值传递的区别,如何使用引用进行复杂数据交换。 - 类与对象:面向对象编程基础,类的定义、属性、...
5. **安全性**:PHP提供了许多安全功能,如过滤输入数据(filter_var)、防止SQL注入(预处理语句)、XSS防护(htmlspecialchars)等,以确保网站的安全运行。 6. **会话管理**:PHP内置的session功能可以用来跟踪...
7. **错误处理和日志记录**:良好的错误处理是任何项目的关键,源码中可能包含自定义错误处理函数和日志记录机制,如使用`error_reporting`和`error_log`。 8. **性能优化**:可能运用缓存技术(如Memcached或Redis...
13. **框架与库的使用**:了解Laravel、Symfony、Yii等流行PHP框架的工作原理,以及Composer包管理器的使用。 14. **PHP扩展开发**:虽然不是每个开发者都需要,但了解如何编写和编译PHP扩展可以显示更深层次的技术...
4. PHP安全:学习防止SQL注入、XSS攻击、CSRF攻击等常见的Web安全问题,了解如何使用htmlspecialchars()、filter_var()等函数进行数据过滤和验证。 四、其他相关知识点 1. PHP与HTML的结合:理解如何在PHP文件中...
13. **安全防护**:防止SQL注入、XSS攻击等网络安全威胁是博客系统设计的重要部分,需要使用预处理语句、过滤用户输入等方式确保安全性。 14. **版本控制**:开发过程中,版本控制工具如Git是必不可少的,它可以...
通过`$_POST`或`$_GET`接收表单数据,`filter_var()`函数进行数据过滤和验证,防止SQL注入和跨站脚本攻击。 **面向对象编程** PHP5引入了完整的面向对象编程支持,包括类、对象、继承、封装、多态等概念。`class`...
8. **表单处理**:在Web开发中,PHP经常用来处理HTML表单提交的数据,使用 `filter_var()` 进行数据验证和过滤,`htmlspecialchars()` 防止XSS攻击。 9. **数据库交互**:PHP与MySQL数据库的连接和查询是常见的应用...