PHP服务器意外终止(Symfony)

时间:2016-06-06 18:37:53

标签: php doctrine symfony

我刚开始学习Symfony框架,我注意到几乎每次我的代码中都有一些有意义的错误(例如我错过了一些“使用”语句)我的服务器意外终止,我不知道如何获得有关究竟是什么原因造成的任何信息。

大多数时候我能够自己解决这个问题,但现在我刚开始使用Doctrine,我想将一些对象保存到数据库中,但是当我运行代码时,我的服务器终止了。我发现“flush()”方法导致问题,但现在我卡住了,因为我无法获得有关错误的更多信息。所以我实际上有两个问题 - 如何获得有关此类错误的更多信息以及如何解决这一问题呢?

代码如下:

控制器

/* 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("test@test.com");
        $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");
    }
}

和实体

/* 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;
    }
}

3 个答案:

答案 0 :(得分:0)

使用stream()作为您的终端。 所以你的网址就像web/app_dev.php

答案 1 :(得分:0)

您是否使用网络浏览器访问远程主机上的Symfony实例 - 我的意思是一台机器不是本地主机'?如果是这样,您需要修改' web / app_dev.php'文件所在的行如下:

|| !(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')

输入您尝试访问您的网址的远程主机的IP地址。使用DEV网址:" http://ip_address/app_dev.php/"将是排除故障的最佳方式。

使用此链接时,您会看到有用的帮助信息 - 我强烈推荐它。

我也注意到这一行:

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

我不确定你是否需要这些反击。试试这个:

@ORM\Table(name="user")

答案 2 :(得分:0)

我最近遇到了这个问题,经过大量调查发现日期导致了我的问题。我可以看到这是一个老问题,但答案可能对某人有所帮助。

在插入datetime / datetimetz字段时,Doctrine看起来需要一个完整的日期时间对象:

尝试替换

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

使用

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