如何测试原则 2 中的连接是否有效?

问题描述 投票:0回答:3

我正在寻找一种方法来测试连接是否与 Doctrine 2 一起工作。

由于在我的应用程序中用户可以自行更改信息连接,因此我想检查用户是否输入了正确的登录名和密码。

我怎样才能做到这一点?

我尝试将此代码放入 try/catch 块中:

try{
    $entityManager = $this->getEntityManager() ;
    $repository = $entityManager->getRepository('Authentification\Entity\User');
    $userToIdentify = $repository->findOneBy(array('login' => $this->_username, 'password' => $this->_password));
}catch(Exception $e){
    $code = Result::FAILURE ;
    $identity = "unknow" ;
    $messages = array(
       "message" => "Wrong login/password combination",
    ) ;
}

问题是即使信息连接正确,我也无法捕获异常。

否则我会收到以下错误:

<b>Fatal error</b>:  Uncaught exception 'Zend\View\Exception\RuntimeException'
  with message 'Zend\View\Renderer\PhpRenderer::render: Unable to render template 
  &quot;layout/layout&quot;; resolver could not resolve to a file' in C:\xampp\htdocs\poemsV3\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php:451 Stack trace: #0 C:\xampp\htdocs\poemsV3\vendor\zendframework\zendframework\library\Zend\View\View.php(203): Zend\View\Renderer\PhpRenderer-&gt;render(Object(Zend\View\Model\ViewModel)) #1 C:\xampp\htdocs\poemsV3\vendor\zendframework\zendframework\library\Zend\Mvc\View\Http\DefaultRenderingStrategy.php(128): Zend\View\View-&gt;render(Object(Zend\View\Model\ViewModel)) #2 [internal function]: Zend\Mvc\View\Http\DefaultRenderingStrategy-&gt;render(Object(Zend\Mvc\MvcEvent))#3 C:\xampp\htdocs\poemsV3\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(469): call_user_func(Array, Object(Zend\Mvc\MvcEvent))#4 C:\xampp\htdocs\poemsV3\vendor\zendframework\zendframework\library\Zend\EventManager\EventMa in <b>C:\xampp\htdocs\poemsV3\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php</b> on line <b>451</b><br />

您知道如何测试连接是否有效吗?

谢谢你。

doctrine-orm zend-framework2
3个回答
18
投票

请勿直接使用

EntityManager
。您可以使用以下命令来检查连接参数:

try {
    $entityManager->getConnection()->connect();
} catch (\Exception $e) {
    // failed to connect
}

遗憾的是,这是检查是否出现问题的唯一真正方法,因为异常类型会根据您使用的驱动程序而变化。

对于另一种例外(与视图相关的例外),您只需调整视图脚本路径即可。我建议您保持骨架应用程序模块启用,以便默认布局始终存在:您可以随时覆盖它


5
投票

可以使用。

$cnx = $this->getDoctrine()->getConnection();

$cnx->isConnected() ? 
  'Connected' : 
  'not connected';

0
投票

从@mrDjouk的回答来看,这是值得注意的。

    $conn = DriverManager::getConnection($dbConfig);
    print_r(['$conn1' => $conn->isConnected()]);
    
    $sql = "SELECT * FROM $myTable";
    $stmt = $conn->query($sql);

    print_r(['$conn2' => $conn->isConnected()]);

$conn1
是假的并且
$conn2
是真的

学说/dbal:3.7.2,postgresql 16,php 8.3

© www.soinside.com 2019 - 2024. All rights reserved.