2016-11-24 68 views
0

我正尝试在自定义PHP框架中使用Laravel的Eloquent ORM作为构造函数,并且在调用控制器中的create方法时出现奇怪的错误。Laravel Eloquent ORM - 调用方法时出错

的错误:

Fatal error: Uncaught exception 'Illuminate\Contracts\Container\BindingResolutionException' with message 'Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable.' in /Users/justin/Sites/test/vendor/illuminate/container/Container.php:763 Stack trace: #0 /Users/justin/Sites/test/vendor/illuminate/container/Container.php(644): Illuminate\Container\Container->build('Illuminate\Cont...', Array) #1 /Users/justin/Sites/test/vendor/illuminate/database/Connectors/ConnectionFactory.php(130): Illuminate\Container\Container->make('Illuminate\Cont...') #2 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors{closure}() #3 /Users/justin/Sites/test/vendor/illuminate/database/Connection.php(964): call_user_func(Object(Closure)) #4 /Users/justin/Sites/test/vendor/illuminate/database/Connection.php(832): Illuminate\Database\Connection->getPdo() #5 /Users/justin/Sites/test/vendor/illuminate/database/Connection.php(717): Illuminate\Database\Connection->rec in /Users/justin/Sites/test/vendor/illuminate/container/Container.php on line 763

数据库连接:

use Illuminate\Database\Capsule\Manager as Capsule; 
$capsule = new Capsule(); 
$capsule->addConnection([ 
    'driver' => 'mysql', 
    'host' => 'localhost', 
    'username' => 'root', 
    'password' => 'root', 
    'database' => 'database', 
    'port' => '3306', 
    'charset' => 'utf-8', 
    'collation' => 'utf8_unicode_ci' 
]); 
$capsule->bootEloquent(); 

模型:

use Illuminate\Database\Eloquent\Model as Eloquent; 

class User extends Eloquent{ 

    protected $fillable = ['username','email']; 

} 

最后的方法:

public function create($username = '', $email = ''){ 
    User::create([ 
     'username' => $username, 
     'email' => $email 
    ]); 
} 

有人能帮助我吗?

+0

''''照明/数据库“:”^ 5.3“''' –

回答

1

你的口才初始化需要可能是不完整的。

以下是我如何在Silex的应用程序来实现它:

<?php 
namespace App\Base\Provider\Database; 

use Silex\Application; 
use Illuminate\Events\Dispatcher; 
use Illuminate\Container\Container; 
use Illuminate\Database\Capsule\Manager as Capsule; 

class DatabaseSummoner 
{ 
    public static function setup(Application $app) 
    { 
     $app['db'] = $app->share(function() use ($app) { 
      # Set up Fluent Query Builder 
      $capsule  = new Capsule; 
      $db_settings = $app['config']['db']; 

      $capsule->addConnection(
       $db_settings['connections'][$db_settings['connection']] 
      ); 

      return $capsule; 
     }); 

     // Set the event dispatcher used by Eloquent models... 
     $app['db']->setEventDispatcher(new Dispatcher(new Container)); 

     // These two have to be outside closure 
     // Make the Capsule instance available globally via static methods... 
     $app['db']->setAsGlobal(); 
     // Boot Eloquent ORM 
     $app['db']->bootEloquent(); 
    } 
} 

然后在我的composer.json我需要"illuminate/database": "~5.3""illuminate/events": "~5.3"(这第二个是可选的,但有用的,如果你想使用模型事件) 。

最后,在我的Application类的__construct()中,我呼叫DatabaseSummoner::setup($this);

这与您的设置明显不同,但您可能会找到自己的方式。

1

更新:意识到我是用照亮的版本不正确,使用4.2

+0

我浪费了至少2天的时间试图弄清楚它有什么问题......最新版本完全崩溃了。谢谢。 – evsar3