未找到Laravel 5自定义包类

时间:2016-01-16 14:09:24

标签: php laravel laravel-5 laravel-5.2

我正在创建laravel 5.2包,以下是我的文件

包/
-Shreeji /
--Ring /
--- composer.json
--- SRC /
---- Ring.php
---- RingModel.php
---- RingServiceProvider

composer.json

namespace Shreeji\Ring;

use Illuminate\Http\Response;

Class Ring {

private $ringmodel;
protected $table_name = null;


function __construct() {

}

function set_table($table_name)
{
    $this->table_name = $table_name;
    $this->ringmodel = New RingModel($this->table_name);
    return $this;
}

}

Ring.php

use \Illuminate\Database\Eloquent\Model as Eloquent;

class RingModel extends Eloquent {

// Set table name;
protected $table;
protected $primary_key;

public function __construct($table)
{
    $this->table = $table;
}
}

RingModel.php

namespace Shreeji\Ring;

use Illuminate\Support\ServiceProvider;

Class RingServiceProvider extends ServiceProvider
{
public function register()
{
    $this->app->bind('ring', function($app){
        return new Ring;
    });
}

public function boot()
{

}
}

RingServiceProvider.php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Shreeji\Ring;

class RingController extends Controller
{

 public function index()
 {
     $ring = New Ring();
     $ring->set_table('ring');
 }
}

在app / Http / Controllers中我创建了像这样的测试文件

RingController.php

Route::get('ringtest', [ 'as' => 'ringtest', 'uses' => 'RingController@index' ]);

在Routes.php中

Shreeji\Ring\RingServiceProvider::class,

我在config / app.php中添加了服务提供程序

.....
"psr-4": {
        "App\\": "app/",
        "Shreeji\\Ring\\": "packages/Shreeji/Ring/src"
    }
.....

在composer.json中,我将其添加为

{{1}}

当我从浏览器调用ringtest时出现以下错误。

RingController.php第19行中的FatalErrorException:Class' Shreeji \ Ring'找不到

我的代码有什么问题,为什么找不到这个类我还运行了composer dumpautoload。

2 个答案:

答案 0 :(得分:5)

在您的控制器中,您有:

use Shreeji\Ring;

但是,它一定是:

use Shreeji\Ring\Ring;

第一个'Ring'是目录(命名空间)。第二个'戒指'是班级。

您的模型不在您的命名空间中。模型的第一行必须是:

namespace Shreeji\Ring;

答案 1 :(得分:0)

您的名称空间是正确的,除非您将 Ring 类导入到Ring控制器

在您的Ring控制器中更改

use Shreeji\Ring;

use Shreeji\Ring\Ring;

其中第一个 Ring 是文件夹,第二个 Ring 是课程。

在文件第一行的下一步中,为您的 RingModel 类添加名称空间

namespace Shreeji\Ring;

并添加

use Shreeji\Ring\RingModel;

Ring 类以导入 RingModel 类。

然后更改软件包的composer文件

"Shreeji\\Ring\\": "src/"

"Shreeji\\": "packages/shreeji/ring/src"

之后,导航到您的软件包目录并运行

composer dump-autoload -o

在终端或命令提示符下重新生成 composer.json 文件。

下一步添加

"Shreeji\\": "packages/shreeji/ring/src"

autoload psr-4数组中的Laravel应用程序的 composer.json 文件,然后切换到Laravel的应用程序文件夹并运行

composer dump-autoload -o

在终端或命令提示符下重新生成 composer.json 文件。

这是Laravel软件包开发的链接。

Laravel Package Development