Laravel Type error: Too few arguments to function
Laravel Type error: Too few arguments to function
我创建了一个带有索引控制器的控制器:
public function index(EntityRepository $vcs, EntityRepository $vcskns)
{
$entitiesLists = $vcs->getEntities();
$entitiesWithKnLists = $vcskns->getEntitiesWithKeyneeds();
return view('admin.home', compact('entitiesLists', 'entitiesWithKnLists'));
}
在 EntityRepository 中我创建了 getEntitiesWithKeyneeds :
public function getEntitiesWithKeyneeds()
{
$valuechains = Valuechain::orderBy('valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where('langs.isMainlanguage', '=', '1')
->with('segments')
->with('keyneeds')
->withCount('segments')
->withCount('keyneeds')
->get();
foreach ($valuechains as $valuechain) {
$ids[] = $valuechain->id;
}
foreach ($ids as $id) {
$vcskns[] = Segment::select(
'lang_valuechain.vcname', 'lang_valuechain.vcshortname',
'lang_segment.segname', 'lang_segment.segshortname', 'segments.id',
'lang_segment.created_at', 'lang_segment.updated_at', 'lang_segment.deleted_at'
)
->distinct()
->withCount('keyneeds')
->join('lang_segment', 'segments.id', '=', 'lang_segment.segment_id')
->join('valuechains', 'segments.valuechain_id', '=', 'valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
->join('lang_sector', 'sectors.id', '=', 'lang_sector.sector_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where([
['langs.isMainlanguage', '=', '1'],
['valuechains.id', '=', $id]
])
->whereNull('valuechains.deleted_at')
->whereNull('sectors.deleted_at')
->whereNull('segments.deleted_at')
->get();
}
return $vcskns;
}
我收到一条错误消息:
类型错误:函数 App\Http\Controllers\BackOffice\StatsController::index() 的参数太少,1 个已通过,正好是 2 个预期
我希望我能解决这个问题。
另一个问题是知道如何强制后端的每个视图都具有 EntityRepository 的 returns。理论上我必须在我所有的方法中声明我的变量...
我不得不这样创建一个界面:
<?php
namespace App\Contracts;
interface EntityInterface {
public function getEntities();
public function getEntitiesWithKeyneeds();
}
我的 EntityRepository 如下所示:
<?php
namespace App\Http\Controllers\BackOffice\Repository;
use App\Contracts\EntityInterface;
use App\Segment;
use App\Valuechain;
class EntityRepository implements EntityInterface
{
public function getEntities()
{
$vcs = Valuechain::select('valuechains.id', 'lang_valuechain.vcname',
'lang_valuechain.vcshortname')
->withCount('segments')
->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where('langs.isMainlanguage', '=', '1')
->whereNull('valuechains.deleted_at')
->whereNull('sectors.deleted_at')
->get();
return $vcs;
}
public function getEntitiesWithKeyneeds()
{
// liste des cdv
$valuechains = Valuechain::orderBy('valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where('langs.isMainlanguage', '=', '1')
->with('segments')
->with('keyneeds')
->withCount('segments')
->withCount('keyneeds')
->get();
foreach ($valuechains as $valuechain) {
$ids[] = $valuechain->id;
}
foreach ($ids as $id) {
$vcskns[] = Segment::select(
'lang_valuechain.vcname', 'lang_valuechain.vcshortname',
'lang_segment.segname', 'lang_segment.segshortname', 'segments.id',
'lang_segment.created_at', 'lang_segment.updated_at',
'lang_segment.deleted_at'
)
->distinct()
->withCount('keyneeds')
->join('lang_segment', 'segments.id', '=', 'lang_segment.segment_id')
->join('valuechains', 'segments.valuechain_id', '=', 'valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
->join('lang_sector', 'sectors.id', '=', 'lang_sector.sector_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where([
['langs.isMainlanguage', '=', '1'],
['valuechains.id', '=', $id]
])
->whereNull('valuechains.deleted_at')
->whereNull('sectors.deleted_at')
->whereNull('segments.deleted_at')
->get();
}
return $vcskns;
}
}
在 app/Providers/AppServiceProvider.php 中,我必须绑定接口。我想我必须使用 Illuminate\Support\ServiceProvider 覆盖构造函数:
public function __construct($app)
{
$this->app = $app;
$this->app->bind(
'App\Contracts\EntityInterface',
'App\Http\Controllers\BackOffice\Repository\EntityRepository'
);
}
我使用这些值的控制器看起来像这样(这是我的索引方法):
public function index(EntityInterface $vcs)
{
$entitiesLists = $vcs->getEntities();
$entitiesWithKnLists = $vcs->getEntitiesWithKeyneeds();
return view('admin.home', compact('entitiesLists', 'entitiesWithKnLists'));
}
我创建了一个带有索引控制器的控制器:
public function index(EntityRepository $vcs, EntityRepository $vcskns)
{
$entitiesLists = $vcs->getEntities();
$entitiesWithKnLists = $vcskns->getEntitiesWithKeyneeds();
return view('admin.home', compact('entitiesLists', 'entitiesWithKnLists'));
}
在 EntityRepository 中我创建了 getEntitiesWithKeyneeds :
public function getEntitiesWithKeyneeds()
{
$valuechains = Valuechain::orderBy('valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where('langs.isMainlanguage', '=', '1')
->with('segments')
->with('keyneeds')
->withCount('segments')
->withCount('keyneeds')
->get();
foreach ($valuechains as $valuechain) {
$ids[] = $valuechain->id;
}
foreach ($ids as $id) {
$vcskns[] = Segment::select(
'lang_valuechain.vcname', 'lang_valuechain.vcshortname',
'lang_segment.segname', 'lang_segment.segshortname', 'segments.id',
'lang_segment.created_at', 'lang_segment.updated_at', 'lang_segment.deleted_at'
)
->distinct()
->withCount('keyneeds')
->join('lang_segment', 'segments.id', '=', 'lang_segment.segment_id')
->join('valuechains', 'segments.valuechain_id', '=', 'valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
->join('lang_sector', 'sectors.id', '=', 'lang_sector.sector_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where([
['langs.isMainlanguage', '=', '1'],
['valuechains.id', '=', $id]
])
->whereNull('valuechains.deleted_at')
->whereNull('sectors.deleted_at')
->whereNull('segments.deleted_at')
->get();
}
return $vcskns;
}
我收到一条错误消息:
类型错误:函数 App\Http\Controllers\BackOffice\StatsController::index() 的参数太少,1 个已通过,正好是 2 个预期
我希望我能解决这个问题。
另一个问题是知道如何强制后端的每个视图都具有 EntityRepository 的 returns。理论上我必须在我所有的方法中声明我的变量...
我不得不这样创建一个界面:
<?php
namespace App\Contracts;
interface EntityInterface {
public function getEntities();
public function getEntitiesWithKeyneeds();
}
我的 EntityRepository 如下所示:
<?php
namespace App\Http\Controllers\BackOffice\Repository;
use App\Contracts\EntityInterface;
use App\Segment;
use App\Valuechain;
class EntityRepository implements EntityInterface
{
public function getEntities()
{
$vcs = Valuechain::select('valuechains.id', 'lang_valuechain.vcname',
'lang_valuechain.vcshortname')
->withCount('segments')
->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where('langs.isMainlanguage', '=', '1')
->whereNull('valuechains.deleted_at')
->whereNull('sectors.deleted_at')
->get();
return $vcs;
}
public function getEntitiesWithKeyneeds()
{
// liste des cdv
$valuechains = Valuechain::orderBy('valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where('langs.isMainlanguage', '=', '1')
->with('segments')
->with('keyneeds')
->withCount('segments')
->withCount('keyneeds')
->get();
foreach ($valuechains as $valuechain) {
$ids[] = $valuechain->id;
}
foreach ($ids as $id) {
$vcskns[] = Segment::select(
'lang_valuechain.vcname', 'lang_valuechain.vcshortname',
'lang_segment.segname', 'lang_segment.segshortname', 'segments.id',
'lang_segment.created_at', 'lang_segment.updated_at',
'lang_segment.deleted_at'
)
->distinct()
->withCount('keyneeds')
->join('lang_segment', 'segments.id', '=', 'lang_segment.segment_id')
->join('valuechains', 'segments.valuechain_id', '=', 'valuechains.id')
->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
->join('sectors', 'valuechains.sector_id', '=', 'sectors.id')
->join('lang_sector', 'sectors.id', '=', 'lang_sector.sector_id')
->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
->where([
['langs.isMainlanguage', '=', '1'],
['valuechains.id', '=', $id]
])
->whereNull('valuechains.deleted_at')
->whereNull('sectors.deleted_at')
->whereNull('segments.deleted_at')
->get();
}
return $vcskns;
}
}
在 app/Providers/AppServiceProvider.php 中,我必须绑定接口。我想我必须使用 Illuminate\Support\ServiceProvider 覆盖构造函数:
public function __construct($app)
{
$this->app = $app;
$this->app->bind(
'App\Contracts\EntityInterface',
'App\Http\Controllers\BackOffice\Repository\EntityRepository'
);
}
我使用这些值的控制器看起来像这样(这是我的索引方法):
public function index(EntityInterface $vcs)
{
$entitiesLists = $vcs->getEntities();
$entitiesWithKnLists = $vcs->getEntitiesWithKeyneeds();
return view('admin.home', compact('entitiesLists', 'entitiesWithKnLists'));
}