2016-07-22 4 views
0

Viele von Ihnen werden mir sagen, dass ich einen Weg finden sollte, Beziehungen besser in meinen Tabellen zu tun, aber ich habe eine "Produkt" -Tabelle und eine "Product_images" -Tabelle sind leicht in einer Abfrage verbunden, aber weil der Pfad zu den Bildern radikal anders sein kann und ich keine Pfadnamen in der Tabelle speichern möchte, brauche ich eine Funktion, um einige Berechnungen durchzuführen, um herauszufinden, um welchen Pfad es sich handelt. Ich brauche die Methode, die für jedes Produkt ausgeführt wird, während ich über jedes einzelne iteriere, um den Pfad zum Bild zu erhalten.Wie rufe ich eine Entity-Methode aus Zweig

Was ich tun möchte, und vielleicht denken, ich bin nicht richtig, in Zweig ist würde Ich mag für ein Verfahren bitten für das Produkt Entity zu laufen

{% for product in products %} 
    {{product.getImageUrl()}} 
{% endfor %} 

, die ein Verfahren nennen würde in mein Produkt Entity

//AppBundle:Entity:Product 
public function getImageUrl() 
{ 
    $repository = $this->getDoctrine()->getRepository('AppBundle:Product'); 
    return $repository->getImagePath($this->id); 
} 

In meinem Repository:

//AppBundle:Repositiories:ProductRepository 
public function getImagePath($id) 
{ 
    return 'http://domain.com/path/to/image.jpg'//simplified for my question 
} 

Wie kann ich das tun? Als ich dies versuche zur Zeit, erhalte ich folgende Fehlermeldung:

An exception has been thrown during the rendering of a template ("Notice: Array to string conversion") in product/index.html.twig at line 19. 

wo 19 Linie ist

<img src="{{product.getImageUrl()}}" alt="img"> 

Wie kann ich eine Methode aus der Entity accomplish verwenden? Oder sag mir, wie ich das sonst noch machen kann. Danke im Voraus.

+1

Sie sollten sich wirklich herausfinden, wie Sie Ihre Beziehungen besser zu machen. Ich mache nur Spaß. Dein Zweig ist korrekt. Habe Product :: getImageUrl() gib einfach eine einfache Zeichenfolge zurück, um es zu beweisen. Ihre Produkteinheit ist alles vermasselt. Sie haben den Container nicht zugänglich. Sie benötigen wahrscheinlich etwas wie ProductImagManager :: getImageUrl ($ product) und greifen dann über eine Zweig-Erweiterung auf den Zweig zu. Ich gehe davon aus, dass Sie tatsächlich ein Array von Produkt-Entities und nicht ein Array von Produkt-Arrays übergeben. Welche Art von Fehlermeldung scheint Ihre Fehlermeldung anzuzeigen. – Cerad

+1

{{product.imageUrl}}? – Alsatian

Antwort

0

Die Antwort auf Ihre Frage ist in der Fehlermeldung richtig. Wie es Ihnen erklärt, kann Zweig ein Array nicht in eine Zeichenfolge konvertieren. Warum haben wir jetzt sogar ein Array?

Ich nehme an, dass Sie in Ihrer public function getImagePath($id) Methode getResult() am Ende aufrufen, um den gewünschten Bildpfad zu erhalten. getResult gibt jedoch immer ein Array mit Ergebnissen zurück, auch wenn nur ein Ergebnis vorliegt.

Wenn Sie sicher sind, dass Sie nur ein Ergebnis zu bekommen, versuchen getOneOrNullResult() stattdessen aufrufen, die Ihr Problem lösen

sollte
Verwandte Themen