2014-10-06 103 views
0

在Laravel 5中,我嘗試將MyClass添加到IoC容器中。在IoC容器上註冊時找不到Laravel 5中的類

所以我加了如下結構:

應用程序/利布斯/ MyClass.php

<?php namespace App\Libs; 

use App\Interfaces\MyClassInterface; 

class MyClass implements MyClassInterface { 

    public function list($itemId) 
    { 
     // do any things 
    } 

} 

應用程序/幕牆/ MyClassFacade.php

<?php namespace App\Facades; 

use Illuminate\Support\Facades\Facade; 

class MyClassFacade extends Facade { 

     protected static function getFacadeAccessor() 
     { 
       return 'myclass'; 
     } 
} 

應用程序/ Providers/MyClassServiceProvider.php

<?php namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 

use App\Libs\MyClass; 
class MyClassServiceProvider extends ServiceProvider { 
    public function boot() 
    { 
     // 
    } 
    public function register() 
    { 
     $this->app->bind('myclass', function() { 
      return new MyClass(); 
     }); 
    } 
} 

應用/配置/ app.php(在供應商)

'App\Providers\MyClassServiceProvider', 

應用/配置/ app.php(別名)

'MyClass' => 'App\Facades\MyClassFacade', 

應用程序/ Http/Controllers/MyClassController.php

<?php namespace App\Http\Controllers; 

class MyClassController { 

public function index($itemId = null) 
{ 
    $itemList = MyClass::list($itemId); // this is line error 

    return view('item.list')->with($itemList); 
} 

應用程序/ HTTP/routes.php文件

Route::pattern('numeric', '[0-9]+'); 
Route::get('item/{numeric?}', array('as' => 'item_list', 'uses' => '[email protected]')); 

然後我跑的命令

composer update 

composer dump-autoload 

但是贈品我得到這個錯誤:

Class 'App\Http\Controllers\MyClass' not found 

我哪裏錯了?

回答

1

與錯誤的行你需要使用:的

$itemList = \MyClass::list($itemId); // this is line error 

代替:

$itemList = MyClass::list($itemId); // this is line error 

或更改該文件到:

<?php namespace App\Http\Controllers; 

use MyClass; 

class MyClassController { 

public function index($itemId = null) 
{ 
    $itemList = MyClass::list($itemId); // this is line error 

    return view('item.list')->with($itemList); 
} 

這不是Laravel具體問題。這是你如何使用命名空間。更多在How to use objects from other namespaces and how to import namespaces in PHP

+0

我不能那樣做Marcin,因爲那樣你告訴MyClass類應該是一個靜態類。我知道,因爲這個對象有個別名,容器會處理剩下的事情。 – JulianoMartins 2014-10-06 19:17:12

+0

@JulianoMartins不是。如果你在這裏使用'MyClass ::',你告訴PHP你想從當前命名空間使用MyClass。解決這個問題的唯一方法是添加主要的反斜槓,以便在全局命名空間中告訴該類(如您定義的別名)或使用使用'use'導入命名空間。如果Controller不在全局名稱空間中,則沒有其他方法。 – 2014-10-06 19:19:53

+0

MarcinNabiałek,你是對的。現在效果很好!謝謝! – JulianoMartins 2014-10-06 19:25:28