2017-06-03 7 views
3

Ich versuche eine Funktion in meiner Serviceklasse zu machen, die eine Zweigseite rendert. Ich habe versucht, wie dies zu tun: service.yml:Wie rende ich eine Ansicht von Service-Klasse in Symfony?

******** 
parameters: 
    error.class: AppBundle\Utils\Error 
services: 
    app.error: 
     class: '%error.class%' 
     arguments: [@templating] 

error.php (Serviceklasse):

**** 
class Error 
{ 
    public function __construct($templating) 
    { 
     $this->templating = $templating; 
    } 

    public function redirectToError($condition,$message) 
    { 
     if($condition){ 
      return $this->templating->render('default/error.html.twig',array(
       'error_message' => $message, 
      )); 
     } 
    } 

} 

und error.html.twig, die haben ein zufälliger Text, um zu sehen, ob es dort ankommt.

Danach erhalte ich diese Antwort von Browser:

enter image description here

Kann jemand mir sagen, was das Problem ist?

Antwort

4

YAML kann in Bezug auf die Syntax ein wenig fragwürdig sein, stellen Sie sicher, dass Sie alle Leerzeichen (keine Tab-Zeichen) verwenden. Und stellt sicher, dass jede Einrückung die gleiche Anzahl von Leerzeichen ist. Wie 2/4/6/8 für jedes Level oder 4/8/12 etc, wenn Sie 4 breit bevorzugen.

Der Code, den Sie gepostet haben, sollte in Ordnung sein, aber es ist wahrscheinlich etwas albern wie oben beschrieben. Wenn es sich tatsächlich um einen falschen Abschnitt/Parameter in der Datei handelt, sollte Ihnen symfony mitteilen, was unerwartet ist, da YAML-Dateien tatsächlich auf ihren Inhalt überprüft werden.


Allright so nimmt ['@templating'] Pflege des YAML Parse-Fehler, der nächste Teil ist, wie eine Dienstleistung in Anspruch. Was geschieht mit der service container.

In einem Controller gibt es ein Alias ​​für sie und man kann so etwas tun:

// required at the top to use the response class we use to return 
use Symfony\Component\HttpFoundation\Response; 

// in the action we use the service container alias 
// short for $this->container->get('app.error'); 
$content = $this->get('app.error')->redirectToError(true, 'Hello world'); 
// as your redirectToError function returns a templating->render, which only returns a 
// string containing the the rendered template, however symfony 
// requires a Response class as its return argument. 
// so we create a response object and add the content to it using its constructor 
return new Response($content); 

ein paar kleine Dinge:

$condition, ist wahrscheinlich wahrscheinlich zu ändern, wenn es nicht scheint Es sollte nicht in der Funktion sein, aber um den Funktionsaufruf herum, da es merkwürdig erscheint, einen redirectToError aufzurufen, aber es gibt keinen Fehler, stattdessen rufen wir es nur an, wenn wir einen Fehler haben.

Und seine empfohlen, wenn Sie eine Klassenvariable setzen, sie zu definieren (details on visibility):

class Error { 
    // visibility public, private, protected 
    protected $templating; 
+0

Ich habe und gleiche probem geprüft. –

+0

Ich habe auch ['@template'] benutzt ...... es zeigt mir nicht den Fehler, aber ... richte die Ansicht nicht –

+0

Ich nehme an Sie ['@templating'] wie in der ursprüngliche Beitrag als das ist der Standardname –

0

sollten Sie setzen ' um @templating

services: 
    app.error: 
     class: AppBundle\Utils\Error 
     arguments: ['@templating'] 
Verwandte Themen