在我的Laravel应用程序中,我有以下控制器,它将Elastic search的实例作为第一个参数,然后是另一个变量:
use Elasticsearch'Client;
use App'Http'Requests;
use App'Http'Controllers'Controller;
use Illuminate'Http'Request;
class AngularController extends Controller {
public function selectRandom(Client $es, $numRows) {
# ...search params here
$results = $es->search($searchParams);
return $results;
}
}
我需要从另一个控制器调用上面的控制器的方法,我这样做:
class HomeCtrl extends Controller {
public function index() {
$featured = new AngularController();
return $featured->selectRandom(12);
}
}
我得到以下错误
传递给的参数1App'Http'Controllers'AngularController::selectRandom()必须是一个实例的Elasticsearch'Client,整数给定
我不太精通OOP。我叫错了吗?因为我认为我调用的方法会获取在控制器中注入的实例,而不是从我调用它的地方
当你从你的控制器调用一个方法到另一个 控制器,意味着你做错了。为此,您应该 使用服务。
在app'Services Utility.php中创建一个类
use Elasticsearch'Client;
class Utility {
public function selectRandom(Client $es, $numRows) {
# ...search params here
$results = $es->search($searchParams);
return $results;
}
}
然后把这个类注入到控制器中
在你的AngularController类selectRandom方法中,第一个参数是一个类实例,第二个参数是number,这就是为什么你会得到这个错误。如果你想使用另一个控制器的对象来访问这个方法,你需要设置这个对象的第一个参数,第二个参数是你的id。另一个解决方案在这里
对selecrandom方法的一些修改
public function selectRandom($numRows) {
# ...search params here
$es = new Client();
$results = $es->search($searchParams);
return $results;
}
然后使用这个函数
public function index() {
$featured = new AngularController();
return $featured->selectRandom(12);
}