2016-06-06 13 views
0

Ich habe gerade angefangen zu lernen Symfony-Framework und ich bemerkte, dass fast jedes Mal gibt es einige sinnvolle Fehler in meinem Code (zum Beispiel verpasste ich einige "verwenden" -Anweisung) mein Server unerwartet beendet und Ich weiß nicht, wie ich herausfinden soll, was genau das verursacht hat.PHP-Server unerwartet beendet (Symfony)

Die meiste Zeit war ich in der Lage, es herauszufinden, aber jetzt habe ich gerade begonnen, Doctrine zu verwenden, und ich möchte ein Objekt in der Datenbank speichern, aber wenn ich den Code ausführen, wird mein Server beendet. Ich habe herausgefunden, dass die "flush()" Methode das Problem verursacht, aber jetzt bin ich fest, da ich keine weiteren Informationen über den Fehler bekomme. Ich habe also zwei Fragen - wie kann ich mehr Informationen über Fehler wie diesen bekommen und wie kann ich diesen Teil lösen?

Die Codes sind unter:

Der Controller

/* UserController.php */ 
namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use AppBundle\Entity\User; 
use Symfony\Component\HttpFoundation\Response; 

class UserController extends Controller 
{ 
    /** 
    * @Route("/user/test") 
    */ 
    public function testAction(Request $request) 
    { 
     $user = new User(); 
     $user->setLogin("Test"); 
     $user->setEmail("[email protected]"); 
     $user->setPassword(hash("sha256", "test")); 
     $user->setJoined(date("Y-m-d H:i:s")); 
     $user->setActivationCode(NULL); 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($user); 
     $em->flush(); /* The line that causes server to terminate! */ 
     return new Response("Hello"); 
    } 
} 

Und das Unternehmen

/* User.php (Entity) */ 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
/** 
* @ORM\Entity 
* @ORM\Table(name="`user`") 
*/ 
class User 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    /** 
    * @ORM\Column(type="string", length=128) 
    */ 
    private $email; 
    /** 
    * @ORM\Column(type="string", length=64) 
    */ 
    private $login; 
    /** 
    * @ORM\Column(type="string", length=64) 
    */ 
    private $password; 
    /** 
    * @ORM\Column(type="datetime") 
    */ 
    private $joined; 
    /** 
    * @ORM\Column(type="string", length=64, nullable=TRUE) 
    */ 
    private $activation_code; 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set email 
    * 
    * @param string $email 
    * 
    * @return User 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

    /** 
    * Get email 
    * 
    * @return string 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 

    /** 
    * Set login 
    * 
    * @param string $login 
    * 
    * @return User 
    */ 
    public function setLogin($login) 
    { 
     $this->login = $login; 

     return $this; 
    } 

    /** 
    * Get login 
    * 
    * @return string 
    */ 
    public function getLogin() 
    { 
     return $this->login; 
    } 

    /** 
    * Set password 
    * 
    * @param string $password 
    * 
    * @return User 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Set joined 
    * 
    * @param \DateTime $joined 
    * 
    * @return User 
    */ 
    public function setJoined($joined) 
    { 
     $this->joined = $joined; 

     return $this; 
    } 

    /** 
    * Get joined 
    * 
    * @return \DateTime 
    */ 
    public function getJoined() 
    { 
     return $this->joined; 
    } 

    /** 
    * Set activationCode 
    * 
    * @param string $activationCode 
    * 
    * @return User 
    */ 
    public function setActivationCode($activationCode) 
    { 
     $this->activation_code = $activationCode; 

     return $this; 
    } 

    /** 
    * Get activationCode 
    * 
    * @return string 
    */ 
    public function getActivationCode() 
    { 
     return $this->activation_code; 
    } 
} 
+1

Prüfen Sie die Symfony-Protokolle zu ersetzen. Aktivieren Sie die PHP-Protokollierung, wenn sie nicht aktiviert ist, und überprüfen Sie das Protokoll, nachdem Sie den Fehler wiederholt haben. Wenn Sie den PHP-Server verwenden, richten Sie ihn stattdessen in Apache ein und Sie werden sich dort ebenfalls anmelden. – Shazbot

+0

Thak du, das hat wirklich geholfen! –

Antwort

0

Verwenden web/app_dev.php als Endpunkt. So ist Ihre URL wie localhost:8000/app_dev.php/<your-routing-alias>

+0

Danke für die Antwort, aber in diesem Fall, auch wenn ich app_dev.php benutze, wird der Server immer noch beendet und ich kann immer noch keine Fehlermeldung erhalten. –

0

Verwenden Sie einen Webbrowser für den Zugriff auf Ihre Symfony-Instanz auf einem Remote-Host - ich meine eine Maschine, die nicht der "localhost" ist? Wenn ja, müssen Sie die ‚Web/app_dev.php‘ Datei bearbeiten, wo es eine Linie hat etwa so:

|| !(in_array(@$_SERVER['REMOTE_ADDR'], ['192.168.40.208', '192.168.255.74', 
      '127.0.0.1', 'fe80::1', '::1']) || php_sapi_name() === 'cli-server') 

Geben Sie die IP-Adresse der Remote-Hosts, die Sie versuchen, Ihre Web zugreifen URL von. Die Verwendung der DEV URL: von "" wäre der beste Weg zur Fehlerbehebung.

Sie sehen nützliche Hilfeinformationen, wenn Sie diesen Link verwenden - ich empfehle es sehr.

Ich bemerke auch diese eine Zeile:

@ORM\Table(name="`user`") 

Ich bin nicht sicher, wenn Sie diese brauchen Backticks. Versuchen Sie dies:

+0

Danke, aber ich benutze localhost und die Verwendung der Dev-Umgebung hat nicht geholfen. Ich denke auch, dass es standardmäßig in der Dev-Umgebung ist (?).Und die Backticks sind notwendig, weil "user" das reservierte MySql-Wort ist. Jedoch habe ich es geschafft, mein Problem zu lösen, indem ich die php-Protokolldatei überprüfe. Es stellte sich heraus, dass ich das Datetime-Objekt erstellen musste, anstatt das Datum als String anzugeben. –

+0

Hallo - das ist falsch. Ich habe die gleichen Anmerkungen '@ORM \ Table (name =" Benutzer ") und es funktioniert gut. –

+1

Vielleicht, aber in der Doktrin-Dokumentation heißt es, du solltest MySql reservierte Wörter zurücklesen, also wollte ich einfach nicht das Risiko eingehen. Es funktioniert auch gut mit Backticks. –

0

Ich hatte vor kurzem dieses Problem und nach einer Menge von Untersuchungen entdeckte das Datum verursachte mein Problem. Ich kann sehen, dass dies eine alte Frage ist, aber die Antwort kann jemandem helfen.

Es ist wie Lehre sieht erfordert ein vollständiges Objekt Datum Zeit, wenn sie in einem Datetime/datetimetz Feld einfügen:

Versuchen

$user->setJoined(date("Y-m-d H:i:s")); 

Mit

$user->setJoined(new \DateTime("now")); 
Verwandte Themen