Laravel 4-Formularüberprüfung, Erweiterung der __call () -Methode
Ich möchte die Form Validation-Klasse erweitern, um Array-Formularelemente wie beschrieben zu unterstützenhier für L3 in L4.
Zuerst habe ich den Validator-Alias in meinem geändertapp/config/app.php
:
'Validator' => 'app\lib\Support\Facades\Validator',
Dann habe ich diese Codes als app / lib / Support / Facades / Validator.php gespeichert
<?php namespace app\lib\Support\Facades;
class Validator extends \Illuminate\Support\Facades\Validator {
public function __call($method, $parameters) {
if (substr($method, -6) === '_array') {
$method = substr($method, 0, -6);
$values = $parameters[1];
$success = true;
foreach ($values as $value) {
$parameters[1] = $value;
$rule = snake_case(substr($method, 8));
if (isset($this->extensions[$rule]))
{
$success &= $this->callExtension($rule, $parameters);
}
throw new \BadMethodCallException("Method [$method] does not exist.");
}
return $success;
} else {
return parent::__call($method, $parameters);
}
}
protected function getMessage($attribute, $rule) {
if (substr($rule, -6) === '_array') {
$rule = substr($rule, 0, -6);
}
return parent::getMessage($attribute, $rule);
}
}
Dann habe ich mich vergewissertcomposer.json
hat den Ordner für Autoload enthalten:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/lib",
"app/lib/Support",
"app/lib/Support/Facades"
]
},
Dann rannte ichphp composer.phar dump-autoload
Autoload-Klassen zu generieren.
Die Sache ist, dass es so aussieht, als würde das nicht funktionieren. Ich habe sogar versucht, eine benutzerdefinierte Überprüfungsmethode in die von mir generierte Datei einzufügen:
protected function validateTest($attribute, $value) {
return $value=='test';
}
Es sagt:Method [validateTest] does not exist.
. Ich habe das geändertprotected
zupublic
, immer noch das gleiche.
get_class(Validator::getFacadeRoot())
gibt mir\Illuminate\Validation\Factory
Wenn ich die Klasse, die ich geschrieben habe, erweitere, erhalte ich den folgenden Fehler:Non-static method Illuminate\Validation\Factory::make() should not be called statically
.
Hinweis: Ja, ich habe die Regeln nicht wie in L4 erweitert, weil ich keine neue Regel hinzufügen möchte, sondern die Methode ändern möchte__call()
undgetMessage()
Verhalten.
Was fehlt mir, wie kann ich diese Arbeit machen?