我刚开始学习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;
}
}
答案 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"));