0

在 Laravel 5 中,我尝试将 MyClass 添加到 IoC 容器中。

所以我添加了以下结构:

应用程序/库/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';
        }
}

app/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/config/app.php(在提供者中)

'App\Providers\MyClassServiceProvider',

app/config/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' => 'MyClassController@index'));

然后我运行命令

composer update

composer dump-autoload

但是我得到了这个错误:

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

我哪里错了?

4

1 回答 1

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 特定的问题。这就是您使用命名空间的方式。更多关于如何使用来自其他命名空间的对象以及如何在 PHP 中导入命名空间

于 2014-10-06T19:03:57.590 回答