我是joomla组件开发(J3,MVC)的新手,我正在尝试创建自定义服务器端表单验证规则。
我在表单字段中添加了validate="machinename"
并创建了文件models\rules\machinename.php
defined('_JEXEC') or die('Restricted access');
jimport('joomla.form.formrule');
class JFormRuleMachinename extends JFormRule
{
protected $regex = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/';
}
我在controllers\field.php
defined('_JEXEC') or die('Restricted access');
// import Joomla controllerform library
jimport('joomla.application.component.controllerform');
class SampleControllerField extends JControllerForm
{
}
,模型位于models\field.php
defined('_JEXEC') or die('Restricted access');
// import Joomla modelform library
jimport('joomla.application.component.modeladmin');
/**
* HelloWorld Model
*/
class SampleModelField extends JModelAdmin
{
public function getTable($type = 'Field', $prefix = 'SampleTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Method to get the record form.
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
* @return mixed A JForm object on success, false on failure
* @since 2.5
*/
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_sample.field', 'field',
array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
/**
* Method to get the data that should be injected in the form.
*
* @return mixed The data for the form.
* @since 2.5
*/
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = JFactory::getApplication()->getUserState('com_sample.edit.field.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
}
我的组件名称为com_sample
,一切正常(新增,编辑,删除)但后来我将验证规则添加到表单的字段中,现在我在提交表单时收到错误:
JForm::validateField() rule `machinename` missing.
我最好的猜测是我在命名或文件位置上有误,但我不确定,并且无法通过googleing找到任何内容。
所以请帮我PLIZ ......
答案 0 :(得分:1)
自己找到解决方案,似乎需要将rules文件夹路径添加到表单定义中,以便:
<form addrulepath="/administrator/components/com_sample/models/rules">
这解决了我的问题。
答案 1 :(得分:1)
我正在努力解决这个问题。我读错误意味着Joomla无法找到规则文件,但是当我单步执行核心时,我意识到在加载规则文件后,Jommla会检查一个适当命名的类是否在规则范围内。我在班级名称中引入了一个拼写错误。因此,对于那些在服务器端验证方面苦苦挣扎的人,我的建议是检查规则文件是否符合预期, AND 表示类名是正确的。很明显我知道,但我花了很多年的时间。