2016-11-24 69 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