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
我哪裏錯了?
我不能那樣做Marcin,因爲那樣你告訴MyClass類應該是一個靜態類。我知道,因爲這個對象有個別名,容器會處理剩下的事情。 – JulianoMartins 2014-10-06 19:17:12
@JulianoMartins不是。如果你在這裏使用'MyClass ::',你告訴PHP你想從當前命名空間使用MyClass。解決這個問題的唯一方法是添加主要的反斜槓,以便在全局命名空間中告訴該類(如您定義的別名)或使用使用'use'導入命名空間。如果Controller不在全局名稱空間中,則沒有其他方法。 – 2014-10-06 19:19:53
MarcinNabiałek,你是對的。現在效果很好!謝謝! – JulianoMartins 2014-10-06 19:25:28