我正在创建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。
答案 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软件包开发的链接。