2016-06-16 10 views
2

RedBean에 문제가 있습니다. 연결 오류가 발생하여 의미가 무엇인지 파악할 수 없습니다. Google에서 이미 보았지만 유효한 해결책을 찾을 수 없습니다. 비슷한 질문을 시도했지만 답변이 도움이되지 않았습니다. .RedBean :이 키에 대해 데이터베이스가 이미 지정되었습니다.

나는 User와 DAL의 두 클래스가 있습니다.

DAL 클래스 :

namespace Models; 

use Config\Helpers as Helpers; 
use Lib\RedBean\R as R; 
use Lib\RedBean\Plugin\ModelValidation as ModelValidation; 

class DAL extends R 
{ 
    function __construct() 
    { 
     R::setup('mysql:host=localhost;dbname=angularjs', 'user', 'pass'); 

     R::ext('validate', function($bean) 
     { 
      return ModelValidation::validate($bean); 
     }); 
    } 

    public function createBean($tableName) 

    public function create($bean) 

    public function read($tableName, $id = 0) 

    function __destruct() 
    { 
     R::close(); 
    } 
} 

사용자 클래스 :

namespace Models; 

use Models\DAL as DAL; 
use Lib\JWT\JWT as JWT; 
use Config\Helpers as Helpers; 
use Lib\RedBean\SimpleModel as SimpleModel; 

class Usuario extends SimpleModel 
{ 
    public static $rules = [ 
     'login' => [ 
      'label' => 'Login', 
      'filter' => 'trim|sanitize_string', 
      'validation' => 'required|alpha_numeric', 
     ], 
     'senha' => [ 
      'label' => 'Senha', 
      'validation' => 'required|alpha_numeric|min_len,6', 
      'message' => 'I don not like this password. This is an example of a bad message.' 
     ], 
    ]; 

    public function login() 

    public function logout() 

    public function criaUsuario() 
    { 
     $DAL = new DAL(); 

     //user creation code 
    } 

    public function criaToken($usuarioId = 0) 
    { 
     $DAL = new DAL(); 

     //Token creation code 
    } 
} 

그리고이 오류입니다 :

Fatal error: Uncaught exception 'Lib\RedBean\RedException' with message 'A database has already been specified for this key.' in D:\Projetos\Market Media\backend\Lib\RedBean\Facade.php:288 
Stack trace: 
#0 D:\Projetos\Market Media\backend\Lib\RedBean\Facade.php(206): Lib\RedBean\Facade::addDatabase('default', 'mysql:host=loca...', 'angularjs', 'root', false) 
#1 D:\Projetos\Market Media\backend\Models\DAL.php(13): Lib\RedBean\Facade::setup('mysql:host=loca...', 'angularjs', 'root') 
#2 D:\Projetos\Market Media\backend\Models\Usuario.php(67): Models\DAL->__construct() 
#3 D:\Projetos\Market Media\backend\Models\Usuario.php(56): Models\Usuario->criaToken('27') 
#4 D:\Projetos\Market Media\backend\API\UsuarioAPI.php(42): Models\Usuario->criaUsuario() 
#5 D:\Projetos\Market Media\backend\API\BaseAPI.php(82): API\UsuarioAPI->criaUsuario(Array) 
#6 D:\Projetos\Market Media\backend\Controllers\UsuarioController.php(13): API\BaseAPI->processAPI() 
#7 D:\Projetos\Market Media\backend\index.php(26): Controllers\UsuarioController->start() 
# in D:\Projetos\Market Media\backend\Lib\RedBean\Facade.php on line 288 

답변

0

당신이 RO 설치를 시도 DAL의 RB의 새 인스턴스를 만들 때마다 "기본"키에 대한 데이터베이스, 응용 프로그램에 한 번 클래스의 R :: 설치를 시도하십시오

+0

이 바보 나, 생성자가 연결을 넣어 똑똑한 곳이 아니었다를! 감사합니다 – Terkhos

+0

안티 패턴 경고! – Coldstar

5

당신이 R :: 설정을 사용하는 경우() 가장이 구문을 사용 구조 방법 내부 기능 :

public __construct(){ 
    if(!R::testConnection()){ 
     R::setup($DSN, $USER, $PASSWORD); 
    } 
}