【问题标题】:How to use a static class method as a filter for Kohana's Validation Library?如何使用静态类方法作为 Kohana 验证库的过滤器?
【发布时间】:2010-01-18 18:14:28
【问题描述】:

Kohana 的验证库有一个 pre_filter() 方法,可让您将任何 PHP 函数应用于要验证的字段,如 trim() 等。
我尝试使用静态方法作为过滤器,但不起作用:
$validation->pre_filter( 'field_name', 'class::method' )

这样做是创建两个过滤器,一个带有class,另一个带有method

有什么线索吗?

【问题讨论】:

    标签: php validation kohana


    【解决方案1】:

    回调是 PHP 的 pseudo-types 之一。它会让你通过一个

    1. 功能
    2. 实例化对象的方法
    3. 静态方法/类方法

    到一个期待回调的 PHP 函数/方法,PHP 函数/方法会知道如何处理它。

    来自手册

    PHP 函数通过其名称作为字符串传递。可以使用任何内置或用户定义的函数,但语言结构除外,例如:array()、echo()、empty()、eval()、exit()、isset()、list()、print()或 unset()。

    实例化对象的方法作为数组传递,其中包含索引 0 处的对象和索引 1 处的方法名称。

    静态类方法也可以在不实例化该类对象的情况下传递,方法是传递类名而不是索引 0 处的对象。

    因此,要使用静态方法代替回调字符串,您可以使用

    array('className','methodName');
    

    如果 Kohana 使用标准 PHP 回调,这应该可以满足您的需求。

    【讨论】:

    • 感谢这两个答案,它们看起来像正确的 PHP,但是我怀疑 Kohana 的验证库正在做一些顽皮的 eval() 或其他事情,因为它不适用于此。不过谢谢!
    【解决方案2】:

    要使用静态方法回调,回调需要是一个数组。例如:

    array('MyCoolClassName', 'methodName');

    所以假设它使用 call_user_func 那么你的方法调用应该是:

    $validation->pre_filter( 'field_name', array('MyCoolClassName', 'methodName'));

    或者如果您需要使用对象实例:

    $validation->pre_filter( 'field_name', array($objectInstance, 'methodName'));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-05
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多