EDIT2: Scrollen Sie nach unten, um die aktuellsten Informationen zu erhalten!Die benutzerdefinierte Callback-Validierungsregel kann nicht gefunden werden (CodeIgniter 3 HMVC)
In CodeIgniter 3 habe ich kürzlich Callback-Regeln über alle meine Controller auf application/libraries/MY_Form_validation.php
verschoben, um Code-Wiederholungen usw. zu verhindern und zu bereinigen.
Im Moment scheinen sie nicht mehr zu funktionieren.
MY_Form_validation.php beginnt wie folgt aus:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{
public $CI;
function run($module = '', $group = '')
{
log_message('debug',"Now running the MY_Form_validation");
(is_object($module)) AND $this->CI = &$module;
return parent::run($group);
}
Dann eine ganze Liste von Callback-Funktion folgt, die alle als public function callback_name(){}
definiert.
Ich habe auch eine (in der gleichen Klasse), die überprüft, ob die bereitgestellten Benutzeranmeldeinformationen korrekt sind (und somit, wenn der Benutzer sich anmelden kann usw.), aber die Formularüberprüfung kann die Regel nicht finden.
Das Fehlerprotokoll sieht wie folgt aus:
INFO - 2016-06-23 13:33:18 --> Form Validation Class Initialized
DEBUG - 2016-06-23 13:33:18 --> Now running the MY_Form_validation
INFO - 2016-06-23 13:33:18 --> Language file loaded: language/english/form_validation_lang.php
DEBUG - 2016-06-23 13:33:18 --> Unable to find callback validation rule: check_database
Die erste DEBUG Nachricht zeigt an, dass MY_Form_validation
geladen wird (als überschrieben run()
Methode wird verwendet, damit die Debug-Protokollierung), aber es kann irgendwie nicht finden die Callback-Funktionen sind im Folgenden klar definiert.
Ich habe auch Sprachdatei application/language/english/form_validation_lang.php
mit der folgenden Zeile:
$lang['form_validation_check_database'] = 'The password does not match the username. Try again.';
, die es richtig fängt (das heißt diese Meldung angezeigt wird, wenn die Formularvalidierung durchführt), aber es kann irgendwie nicht die Callback-Funktion selbst finden.
EDIT: Ich überprüfte, ob Methoden nicht korrekt vererbt wurden:
public function __construct($rules = array())
{
$this->CI =& get_instance();
var_dump(get_class_methods($this));
Die var_dump()
tut Ausgang die korrekte, vollständige Palette von Methoden, die beide meiner eigenen benutzerdefinierten Rückrufe und den eingebauten in denjenigen.
EDIT2: Ich las die system/libraries/Form_validation.php
und untersucht, wo die Debug-Meldung auftritt, das in diesem Codebeispiel zu sehen ist (Zeile 734-749):
// Call the function that corresponds to the rule
if ($callback OR $callable !== FALSE)
{
if ($callback)
{
if (! method_exists($this->CI, $rule))
{
log_message('debug', 'Unable to find callback validation rule: '.$rule);
$result = FALSE;
}
else
{
// Run the function and grab the result
$result = $this->CI->$rule($postdata, $param);
}
}
Es scheint, als ob Rückrufe nur gesucht werden im Haupt-CI-Objekt, aber nicht in der Formularüberprüfungsbibliothek selbst. Ich könnte einige hacky Ausnahmen hinzufügen, die die Rückrufe der Bibliothek auswählen würden, aber ich bezweifle, dass das das beste Ding ist, und ich denke, dass ich etwas einfaches übersehe ...
Wenn irgendwelche zusätzlichen Informationen erforderlich sind, lass es mich wissen .