it-swarm.com.de

Die JViewLegacy :: getForm-Methode funktioniert in der Admin-Komponente einwandfrei, im Front-End wurde keine Methode gefunden

Ich stehe vor einem seltsamen Problem. Ich habe das gleiche Setup für meine Komponente sowohl für die Front-End- als auch für die Back-End-Komponente. Hier ist meine Ansicht Klassensignatur.

MyComponentViewForm extends JViewLegacy

Jetzt in meiner view.html.php, ich var_dump $this->getForm(),

  • Funktioniert einwandfrei und gibt das Objekt aus der Ansichtsklasse der Administratorkomponente aus
  • Fatal error: Call to undefined method Fehler in der Front-End-Ansichtsklasse.

Irgendwelche Ideen?

2
Nagarjun

Ich bin nicht sicher, wie viel das richtig ist, aber ich habe dieses Problem gelöst, indem ich eine Proxy-Methode in meine view.html.php eingefügt habe:

public function getForm()
{
    if (!is_object($this->form))
    {
        $this->form = $this->get('Form');
    }

    return $this->form;
}

Ich bin nicht sicher, warum die Ansichtsklasse GetForm Methode der Ansicht anstelle des Modells aufruft. Dies ist für mich immer noch eine unbekannte Frage. Der seltsame Teil ist $this->get('Form') innerhalb dieser Proxy-Methode. Rufen Sie erneut die Methode im Modell auf. Wenn jemand eine bessere Lösung hat, lass es mich wissen, ich hasse diese Hacks.

0
Nagarjun

es liegt nicht am problem in deiner ansicht. Sie müssen sicherstellen, dass Ihr Modell das JModelForm (oder JModelAdmin) erweitert und die Methode getForm implementiert:

YourComponentModelForm extends JModelForm
{
    public function getForm($data = array(), $loadData = true)
    {
        $form = $this->loadForm('com_yourcomponent.formname', 'formname', array('control' => 'jform', 'load_data' => $loadData));
        if (empty($form))
        {
           return false;
        }
        return $form;
    }
}
1
Fedik