Zum Inhalt springen

Verständnisfrage Eigener ViewHelper // Ständig Fehler Argument "" was not registered.

Erstellt am 15. Juni 2013 · 14 Antworten · letzte Antwort am 21. Oktober 2014

Tags: Fluid, ViewHelper, Frage

brainage ·

Hallo,

wenn ich einen eigenen ViewHelper schreibe dann definiere ich doch die
Variablen im ViewHelper selbst und brauch sie nicht
nochmal explizit registrieren oder ?

	/**
	 * Formats a given Price like '10.10' to '10,10'
	 *
	 * @param string $string Price like 10.10
	 * @return string Price
	 */
	public function render($string) {
		return str_replace('.', ',', $string);
	}

Das obere Beispiel funktioniert das untere nicht.
Aber warum ?

	/**
	 * Formats a given Price like '10.10' to '10,10'
	 *
	 * @param string $xyz Price like 10.10
	 * @return string Price
	 */
	public function render($xyz) {
		return str_replace('.', ',', $string);
	}

und wenn ich mehrere Werte werte übergeben möchte müßte es doch so gehen oder ?

	/**
	 * Formats a given Price like '10.10' to '10,10'
	 *
         * @param string $abc Price like 10.10
	 * @param string $xyz Price2 like 10.10
	 * @return string Price
	 */
	public function render($abc,$xyz) {
		return str_replace('.', ',', $string);
	}

oder ist es wieder so ein Baum Wald ding? auf jeden Fall bekomme ich immer
diese Fehler Argument "" was not registered. Meldung.

typo3 4.5 //

danke

brainage ·

Hallo

naja ich definiere den Namespace

und übergeben die Werte

<abc:format.price string='{row.price}' />

dies funktioniert ja auch prima

analog dazu sollte es bei den anderen Varianten so sein .. ,oder ?

<abc:format.price xyz='{row.price}' />

und

<abc:format.price xyz='{row.price}' abc='{row.price2}' />

danke

brainage ·

:-) ja das habe ich getan ..mehrfach ..

Dann gehe ich davon aus, dass du auch der Meinung bist, die anderen Varianten sollte eigentlich so laufen ?

oder ?

:-) danke

Unbekannter Benutzer ·

Ja absolut. Klingt nach einem Problem mit den Reflection-Daten daher meine Idee mit dem Cache. Irgendwas muss schieflaufen, ich weiß nur noch nicht was. Erbst du von einem anderen ViewHelper?

brainage ·

Eigentlich nicht .. es ist eigentlich ein klizekleiner autarker viewhelper
bzw was meinst du damit genau.. ;-) wie kann man von anderen viewhelpern erben

danke

karlchen ·

hi,

interessante Frage, hätte bisher eigentlich angenommen das da nichts ohne initializeArguments geht

public function initializeArguments() {
---
$this->registerArgument('column', 'integer', 'Name of the column to render', FALSE, 0);
---
}

Bsp von hier

brainage ·

Das habe ich zu dem Thema gefunden

Argumente mit initializeArguments() registrieren

Die Möglichkeit, Argumente des ViewHelpers direkt an der render()-Methode zu initialisieren, ist vor allem bei nicht zu vielen Argumenten extrem praktisch und intuitiv. Manchmal jedoch baut man mit ViewHelpern komplexere Vererbungshierarchien auf, wo verschiedene Ebenen der Vererbungsstruktur zusätzliche Argumente registrieren sollen. Fluid selbst macht dies z.B. bei den form-ViewHelpern.
Da Methodenparameter und Annotations nicht vererbbar sind, muss es noch einen zusätzlichen Weg zur Registrierung der Argumente eines ViewHelpers geben. Fluid stellt hierfür die Methode initializeArguments() zur Verfügung. In dieser Methode können weitere Argumente durch den Aufruf von $this->registerArgument($name, $type, $description, $required, $defaultValue) registriert werden. Auf diese Argumente können Sie dann über das Array $this->arguments zugreifen.

http://my.safaribooksonline.com/book/-/9783868993073/einen-eigenen-viewhelper-entwickeln/id2692786

:-) erklärt aber nicht warum es bei mir nicht geht #angry# .. aber gut zu wissen, dass es eigentlich funktionieren sollte. wie auch kitsunet schon erwähnt hat (danke dafür :-) )daher muss ich den Fehler wo anders suchen..
und ich hab jetzt auch nen Tipp wo ich mir ein Beispiel für ne Vererbungsstruktur ansehen kann.

Gruß

juhu es wird heller im kopp :-)

Unbekannter Benutzer ·

Jap, registerArgument und die Method-Arguments stehen nebeneinander, entweder eins oder das andere. Eigetnlich sollte es daher klappen. Schau mal von was deine VH class erbt.

harald1972 ·

Hallo,

ich will hier noch mal auf den Initial-Post eingehen...

brainage schrieb
	/**
	 * @param string $string Price like 10.10
	 * @return string Price
	 */
	public function render($string) {
		return str_replace('.', ',', $string);
	}

Das obere Beispiel funktioniert das untere nicht.
Aber warum ?

	/**
	 * @param string $xyz Price like 10.10
	 * @return string Price
	 */
	public function render($xyz) {
		return str_replace('.', ',', $string);
	}

und wenn ich mehrere Werte werte übergeben möchte müßte es doch so gehen oder ?

	/**
	 * @param string $abc Price like 10.10
	 * @param string $xyz Price2 like 10.10
	 * @return string Price
	 */
	public function render($abc,$xyz) {
		return str_replace('.', ',', $string);
	}

Die erste render-Methode erhält ein Argument namens $string, damit machst du dann das str_replace
Es existiert kein Unterschied zwischen der zweiten und der dritten. Ob die Argumente $abc oder $xyz heißen spielt insofern keine Rolle - auch nicht wie viele Argumente du hier übergibst.
Allerdings übergibst du der str_replace jedesmal eine Variable namens $string.
So wie ich das verstehe, existiert diese aber noch nicht mal innerhalb der render-Methode.
Deine render-Methode erhält zwar $abc, $xyz, tut aber nichts damit.

cephei ·
harald1972 schrieb

Allerdings übergibst du der str_replace jedesmal eine Variable namens $string.
So wie ich das verstehe, existiert diese aber noch nicht mal innerhalb der render-Methode.
Deine render-Methode erhält zwar $abc, $xyz, tut aber nichts damit.

Ich denke, das war nur als Beispiel gedacht und im richtigen Code sieht das dann schon valid aus...

Ich hatte heute dasselbe Problem. Ich möchte 2 Parameter an den ViewHelper senden. Er akzeptiert aber nur einen und gibt als Fehler an, dass der andere nicht registriert sei. Wenn ich den jetzt mit der oben genannten Registrier-funktion anmelden will, kommt der Fehler, dass der Parameter nicht 2 mal registriert werden soll. Hab auch keine Lösung gefunden bisher.

einpraegsam.​net ·

Wenn bei uns Fehler mit den ViewHelper-Parameter auftreten, kontrolliere ich immer:

  • Ist der Kommentar über render() korrekt gesetzt? (keine Tabs, sondern Leerzeichen, etc...)

  • Hilft auch Cache leeren nichts, kümmere ich mich um den Reflection Cache: http://blog.recent.ch/extbase-reflection-cache-wahrend-entwicklung-deaktivieren/

  • In einem Fall hatten wir nach einer ViewHelper Änderung überhaupt erst erfolg, als wir einen neuen, etwas anders lautenden ViewHelper mit gleichen Methoden erstellt hatten

cephei ·

Hatte das Problem auch gerade. Bei mir hat es funktioniert, nachdem ich in der Funktionsbeschreibung den Parameter hinzugefügt habe. Da muss man bei Extbase immer ein bisschen aufpassen, das alles schön sauber in den comments steht.

/**
     * Makes a List of selected Days
     *
     * @param string $daylist
     * @param boolean $crop
     * @return string
     * @author *** *** <***@****.**>
     */
    public function render($daylist, $crop) {
...
}