
joomla服务器端的校验比较容易,官网并没有给出相应的实例说明。但依据对PHP编程的经验,服务器端的校验就是在数据进行存储到数据库之前的对数据进行校验。这就是所谓的服务器端的校验,用PHP代码来完成。
很清楚,我们需要做的就是明白后台存储数据的流程,并且在存储之前进行校验。Joomla后台数据的操作一般是通过JTable这个类来完成的。而在JTable这个类中有一个方法叫做check方法。具体的使用如下:
class TableZmax extends JTable { /** @var int primark key */ function __construct(& $db) { parent::__construct('#__zm_zmax' ,'id' ,$db); } function check() { if(!$this->checkEmail(trim($this->email))) { $this->setError(JText::_("COM_ZMAX_EMAIL_NOT_EXIST_IN_DB").":".$this->email); return false; } return true; }
在你的Table中增加check方法,然后在这个方法中对你需要校验的字段的进行校验。当然,校验的代码得你自己写。如果校验成 功,则返回true.如果失败那么就调用$this->setError();向用户输出一个提示功能,并且返回false.这样就表单就不会提交 了。
系统在提交表单的过程中,会自动的调用JTable的check方法。因此在这里进行校验是最好的时机。
于2014-07-19日改: 上面虽然的代码虽然也能达到在服务器端校验的目的,但是在仔细的阅读了joomla官网提供的例子的时候,感觉这种方法并不太好。下面推荐使用一种更加友好,且独立性强的方法来实现服务器端校验。
在服务器端校验表单
在服务器端校验表单字段是通过继承JControllerForm类来实现的。首先需要在表单的XML文件中中指定服务器端校验需要用的文件。一般这个文件放在/admin/models/rules/下面。
下面是一段典型的代码:
<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import Joomla formrule library jimport('joomla.form.formrule'); /** * Form Rule class for the Joomla Framework. */ class JFormRuleGreeting extends JFormRule { /** * The regular expression. * * @access protected * @var string * @since 2.5 */ protected $regex = '^[^0-9]+$'; }
注意:这个类里面并没有功能函数。而只有一个成员变量。这是因为我们扩展自JFormRule(/libriies/joomla/form/rule.php),在这个类中实现了我们需要的功能。因此我们的子类中只需要一个正则表达式就行了。
评论 (0)