你好我正在创建一个包,我试图在我的类上实现依赖注入而没有成功。我遵循所有的指示去做它的工作。我越来越疯狂。 当我尝试调用接口laravel不绑定为什么?
Player::team_players(2);
扔我一个错误:
Argument 1 passed to Team\Player\Player::__construct() must be an instance of Team\Player\StatusPlayerInterface, none given, called in C:\wamp\www\ultima\workbench\team\player\src\Team\Player\PlayerServiceProvider.php on line 35 and defined
我创造了我的课Player.php
<?php namespace Team\Player;
use Team\Player\Models\User;
use Team\Player\Models\Team;
use Team\Player\Models\Fighter;
use Team\Player\StatusPlayerInterface;
use DB;
class Player {
protected $player;
function __construct(StatusPlayerInterface $player) {
$this->player = $player;
}
public function team_players($team_id) {
return $player->team($team_id);
}
}
StatusPlayerInterface.php
<?php namespace Team\Player;
interface StatusPlayerInterface {
public function team($team_id); // active - retired - injured by team id
}
Active.php
<?php namespace Team\Player;
use Team\Player\Models\User;
use Team\Player\Models\Team;
use Team\Player\Models\Fighter;
/**
*
*/
class Active implements StatusPlayerInterface
{
protected $user;
protected $team;
protected $fighter;
function __construct(User $user,Team $team,Fighter $fighter)
{
$this->user = $user;
$this->team = $team;
$this->fighter = $fighter;
}
public function team($team_id)
{
return $fighters = $this->fighter->with('user')->where('team_id',$team_id)->active()->Confirmed()->get();
}
}
PlayerServiceProvider.php
public function register()
{
$this->app->bind('Team\Player\StatusPlayerInterface','Team\Player\Player'); // bind the interface
$this->app['player'] = $this->app->share(function($app)
{
return new Player; // line 35
});
$this->app->booting(function()
{
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Player', 'Team\Player\Facades\Player');
});
}
编辑:
我想要做的是遵循一个原则,即杰弗里建议遵循的方式。它说 实体应该开放延期,但关闭修改。
I 2人类,对退役
的例子
- 活动//然后我有主类球员和方法team_players它sh应该自动调用实例调用的功能团队。这种方法用于不做
class Player { .... function team_player($team_id,$status) { if (is_a($status) == "Active") { $fighters = $this->fighter->with('user')->where('team_id',$team_id)->active()->Confirmed()->get(); } elseif(is_a($status) == "Retired") { $fighters = $this->fighter->with('user')->where('team_id',$team_id)->retired()->Confirmed()->get(); } // ecc } }
,但我可以抛出的接口传递给构造函数并只返回接口的功能团队,因为该接口与合同类似,因此可以相信,存在即功能。但问题是我找不到在构造函数中传递该接口的方法。
谢谢你的答案,像往常一样清晰。我只是编辑我的问题,我很确定你可以更好地理解我想要做的事情。 – Fabrizio
已更新Cheerse! – Fabrizio
您的编辑未保存。但是我并没有谈论我看到的代码,而是你打算如何使用这个包,这会影响你构建包的方式。刚编辑回答更多。 –