基本上我想使代码通用,并在给定的Route参数上使用不同的服务。
以下作品:
路线:
Route::get('socialmediaAccount/authorize/twitter', function(TwitterApi $client){ return ['Works'];});
同样有效:
路线
Route::get('socialmediaAccount/authorize/twitter', ['uses' => 'SocialmediaController@authorizeAccount']);
控制器的
class SocialmediaController extends Controller
{
public function authorizeAccount(TwitterApi $client)
{
return ['Works as well'];
}
}
现在我想添加脸谱版,想法就是这样:
路线
Route::get('socialmediaAccount/authorize/{type}', ['uses' => 'SocialmediaController@authorizeAccount']);
控制器的
class SocialmediaController extends Controller
{
public function authorizeAccount($type)
{
if($type == 'twitter') {
$client->call TwitterApi-method(); //????????????
return ['???'];
}
if($type == 'facebook') {
$client->call FacebookApi-method(); //????????????
return ['???'];
}
}
}
由于这项工作没有成功,我尝试了以下操作失败:
现在在我的Controller方法的定义中,我不能再使用Type Hint了,如果我尝试创建单独的方法ala authorizeTwitter
,我就无法使用Type Hint调用它。我试过以下:
路线 - 是相同的
控制器的
class SocialmediaController extends Controller
{
public function authorizeAccount($type)
{
if($type == 'twitter') {
$this->authorizeTwitter();
return ['???'];
}
if($type == 'facebook') {
$this->authorizeFacebook();
return ['???'];
}
}
private function authorizeTwitter(TwitterApi $client) //????????????
{
call TwitterApi-method();
}
private function authorizeFacebook(FacebookApi $client) //????????????
{
call TwitterApi-method();
}
}
这里的错误是'传递给...的参数1必须是... TwitterApi的实例,没有给出。
答案 0 :(得分:1)
您无法在手动调用的方法上使用依赖项注入。仅适用于路线方法,因为路线方法将自动解决。
这说以下应该有效:
class SocialmediaController extends Controller
{
public function authorizeAccount($type, TwitterApi $twitterClient, FacebookApi $facebookClient)
{
if($type == 'twitter') {
// do Twitter authorization using $twitterClient here
}
if($type == 'facebook') {
// do Facebook authorization using $facebookClient here
}
}
}