Closed alxndr-w closed 7 years ago
Wo werden diese Funktionen üblicherweise abgelegt?
Vermutlich im Project-Addon.
Ich brauche trotzdem noch Hilfe bei der Syntax - ein einfaches Beispiel würde mir genügen.
@dergel @polarpixel @Goldfischpeter
genau.. wenn du irgendeine eigene überprüfung haben willst ..du erstellst z.b. diese function in dem project addon und benutzt sie in dieser validierung. Spezielle Beispiel sind z.B. api calls ob irgendeine ID passt oder was ähnlöiches.
Danke @dergel
Was mir wirklich fehlt, so blöd es klingt, ist ein idiotensicheres Beispiel, was ich da jetzt als Wert eintragen soll. Also nur den Namen der Funktion, mit oder ohne Klammern und in welcher Form Parameter angegeben werden sollen: In einem Array, als PHP-Variablen mit $-Zeichen, Feldnamen...
meine_funktion()
vs meine_funktion
und
$parameter, $parameter2
vs feld1,feld2,feld3
vs array($p1, $p2)
und wie die Funktion dann aufgebaut sein muss, weil die ja soweit ich weiß eh schon Parameter übergeben bekommt.
function($welche, $werte, $sind, $das) { return: true; }
Gregor hatte mir da ein Beispiel geschickt aus yrewrite, das customfunction benutzt, allerdings fällt es mir schwer, mich in den Code einzulesen: https://github.com/yakamara/redaxo_yrewrite/blob/1b5c151163b84c4132a15ed8c00a40974ab2edef/pages/content.yrewrite_url.php#L55-L57
@skerbis lustig, scheinbar habe ich mich schon mal selbst damit beschäftigt :D
Allerdings weiß ich dabei immer noch nicht, wie die Parameter verwendet werden. Es gibt dafür im Table Manager ein Feld, trotzdem weiß ich nicht, wie ich es befüllen soll.
['article_id' => $article_id, "domain" => $domain, "clang" => $clang]
Hier werden zwar Parameter verwendet, allerdings sind ja bspw. $clang etc. im Backend gar nicht verfügbar, deswegen verstehe ich auch hier nicht die Verwendung für "Parameter" im Backend.
Umdas nochmal klar zu machen: Ich brauche ein Beispiel, wie... ... das hier ausgefüllt ist und eine Funktion, die mir zeigt, wie ich auf die Werte (und zusätzliche Parameter) reagiere.
Falls Parameter aber nur für das YForm-Modul gedacht sind, und nicht für den Table Manager (unter "Datensatz hinzufügen"), dann muss das auch klar aus der Doku hervorgehen.
function foo($_label, $_value, $_additional_param) sagt doch alles aus .... In Name kommt foo Weitere Parameter ($_additional_param) gibt es oder gibt es eben nicht in deiner Funktion. Wie diese übergeben und ausgelesen werden musst du in der Funktion selbst entscheiden.
Wo die Funktion abgelegt wird interessiert mich allerdings mehr
d.h. wenn ich in "weitere Parameter" ein Array eintrage, steht mir das auch als Array zur Verfügung, wenn ich was kommagetrenntes eintrage, eben ein String? Dann ist jetzt der Groschen gefallen. (Hätte ja auch sein können, dass mir immer nur ein String zur Verfügung steht, egal, was ich eingebe)
Ich denke, ich war zu fixiert darauf, dass YForm an anderer Stelle (bspw. be_manager_relation > Filter oder bei Feldnamen) manchmal einen ganz eigenen und festgelegten Syntax verlangt.
Wo legst du denn deine eigenen Funktionen i.d.R. ab? project-Addon? Man müsste mal testen, ob er die Funktion von überall aus erreicht...
Ich würde es jetzt in dem Project-Addon ablegen wollen, denke ich.
Wenn Du eine Funktion zum Spielen brauchst, hier ohne zusätzliche Parameter. Aber da kannste sicher was fummeln.
Hier ein Beispiel.
function getValidIban($_label,$iban, $_additional_param)
{
// normalize
$iban = str_replace(array(
' ',
'-',
'.',
','
), '', strtoupper($iban));
$pattern = '#(?P<value>((?=[0-9A-Z]{28}$)AL\d{10}[0-9A-Z]{16}$|^(?=[0-9A-Z]{24}$)AD\d{10}[0-9A-Z]{12}$|^(?=[0-9A-Z]{20}$)AT\d{18}$|^(?=[0-9A-Z]{22}$)BH\d{2}[A-Z]{4}[0-9A-Z]{14}$|^(?=[0-9A-Z]{16}$)BE\d{14}$|^(?=[0-9A-Z]{20}$)BA\d{18}$|^(?=[0-9A-Z]{22}$)BG\d{2}[A-Z]{4}\d{6}[0-9A-Z]{8}$|^(?=[0-9A-Z]{21}$)HR\d{19}$|^(?=[0-9A-Z]{28}$)CY\d{10}[0-9A-Z]{16}$|^(?=[0-9A-Z]{24}$)CZ\d{22}$|^(?=[0-9A-Z]{18}$)DK\d{16}$|^FO\d{16}$|^GL\d{16}$|^(?=[0-9A-Z]{28}$)DO\d{2}[0-9A-Z]{4}\d{20}$|^(?=[0-9A-Z]{20}$)EE\d{18}$|^(?=[0-9A-Z]{18}$)FI\d{16}$|^(?=[0-9A-Z]{27}$)FR\d{12}[0-9A-Z]{11}\d{2}$|^(?=[0-9A-Z]{22}$)GE\d{2}[A-Z]{2}\d{16}$|^(?=[0-9A-Z]{22}$)DE\d{20}$|^(?=[0-9A-Z]{23}$)GI\d{2}[A-Z]{4}[0-9A-Z]{15}$|^(?=[0-9A-Z]{27}$)GR\d{9}[0-9A-Z]{16}$|^(?=[0-9A-Z]{28}$)HU\d{26}$|^(?=[0-9A-Z]{26}$)IS\d{24}$|^(?=[0-9A-Z]{22}$)IE\d{2}[A-Z]{4}\d{14}$|^(?=[0-9A-Z]{23}$)IL\d{21}$|^(?=[0-9A-Z]{27}$)IT\d{2}[A-Z]\d{10}[0-9A-Z]{12}$|^(?=[0-9A-Z]{20}$)[A-Z]{2}\d{5}[0-9A-Z]{13}$|^(?=[0-9A-Z]{30}$)KW\d{2}[A-Z]{4}22!$|^(?=[0-9A-Z]{21}$)LV\d{2}[A-Z]{4}[0-9A-Z]{13}$|^(?=[0-9A-Z]{,28}$)LB\d{6}[0-9A-Z]{20}$|^(?=[0-9A-Z]{21}$)LI\d{7}[0-9A-Z]{12}$|^(?=[0-9A-Z]{20}$)LT\d{18}$|^(?=[0-9A-Z]{20}$)LU\d{5}[0-9A-Z]{13}$|^(?=[0-9A-Z]{19}$)MK\d{5}[0-9A-Z]{10}\d{2}$|^(?=[0-9A-Z]{31}$)MT\d{2}[A-Z]{4}\d{5}[0-9A-Z]{18}$|^(?=[0-9A-Z]{27}$)MR13\d{23}$|^(?=[0-9A-Z]{30}$)MU\d{2}[A-Z]{4}\d{19}[A-Z]{3}$|^(?=[0-9A-Z]{27}$)MC\d{12}[0-9A-Z]{11}\d{2}$|^(?=[0-9A-Z]{22}$)ME\d{20}$|^(?=[0-9A-Z]{18}$)NL\d{2}[A-Z]{4}\d{10}$|^(?=[0-9A-Z]{15}$)NO\d{13}$|^(?=[0-9A-Z]{28}$)PL\d{10}[0-9A-Z]{,16}n$|^(?=[0-9A-Z]{25}$)PT\d{23}$|^(?=[0-9A-Z]{24}$)RO\d{2}[A-Z]{4}[0-9A-Z]{16}$|^(?=[0-9A-Z]{27}$)SM\d{2}[A-Z]\d{10}[0-9A-Z]{12}$|^(?=[0-9A-Z]{,24}$)SA\d{4}[0-9A-Z]{18}$|^(?=[0-9A-Z]{22}$)RS\d{20}$|^(?=[0-9A-Z]{24}$)SK\d{22}$|^(?=[0-9A-Z]{19}$)SI\d{17}$|^(?=[0-9A-Z]{24}$)ES\d{22}$|^(?=[0-9A-Z]{24}$)SE\d{22}$|^(?=[0-9A-Z]{21}$)CH\d{7}[0-9A-Z]{12}$|^(?=[0-9A-Z]{24}$)TN59\d{20}$|^(?=[0-9A-Z]{26}$)TR\d{7}[0-9A-Z]{17}$|^(?=[0-9A-Z]{,23}$)AE\d{21}$|^(?=[0-9A-Z]{22}$)GB\d{2}[A-Z]{4}\d{14}))#';
// check
if (preg_match($pattern, $iban, $matches)) {
return false;
} else {
return true;
}
}
$_additional_param könnte z.B. ein anderes Pattern sein?
Das ist auf jeden Fall ein anschauliches und nützliches Beispiel. Das werde ich so übernehmen und noch vorher ein wenig testen. Danke!
Hinzugefügt, aber noch nicht verlinkt.
@skerbis, das kannst du mir evtl. ganz easy beantworten:
Sehe ich das richtig: Wenn die customfunction false
zurückliefert, dann gilt die Validierung als bestanden? Und wenn true
, dann ist die Validierung fehlgeschlagen / die Eingabe ungültig?
Ja, bei true sollte die Fehlermeldung kommen.
Das ist ja mal sowas von unintuitiv :D (Ich hau es in die Doku)
Wie funktionieren sie? Was gibt es da für gebräuchliche Szenarien?