使用laravel 7/livewire应用程序,我使用Repository制作crud,并获得了数据列表,在装载事件中,我分配了受保护的var$FacilityRepository,它在render方法中正常工作,
但在编辑方法中为空,我得到错误:
Call to a member function getById() on null
当用户单击“编辑链接”时
<?php
namespace App\Http\Livewire\Admin;
use App\library\CheckValueType;
use App\Settings;
use DB;
use Livewire\Component;
use App\Facility;
use Livewire\WithPagination;
use App\Repositories\Interfaces\FacilityRepositoryInterface;
class Facilities extends Component
{
use WithPagination;
public $form= [
'name'=>'',
'descr'=> '',
'created_at'=> '',
'is_reopen' => false,
];
public $current_facility_id;
public $filter_name= '';
public $updateMode = 'browse';
protected $FacilityRepository;
public function render()
{
$this->facility_rows_count = Facility
::getByName($this->filter_name, true)
->count();
$backend_per_page = Settings::getValue('backend_per_page', CheckValueType::cvtInteger, 20);
\Log::info( 'render -10 $this->FacilityRepository::' . print_r( json_encode($this->FacilityRepository), true ) );
// line above logged as : [2020-09-04 16:46:26] local.INFO: render -10 $this->FacilityRepository::{}
return view('livewire.admin.facilities.container', [
'facilityDataRows' => $this->FacilityRepository->filterWithPagination(
[
'name'=>$this->filter_name,
],
$backend_per_page
),
'facility_rows_count'=> $this->facility_rows_count
]); // this listing is rendered OK
}
public function mount( FacilityRepositoryInterface $FacilityRepository ) {
$this->FacilityRepository = $FacilityRepository;
\Log::info( '-101mount $this->FacilityRepository::' . print_r( json_encode($this->FacilityRepository), true ) );
// line above logged as : [2020-09-04 16:46:26] local.INFO: -101mount $this->FacilityRepository::{}
}
public function edit($id)
{
\Log::info( '-1 edit $id::' . print_r( json_encode( $id ), true ) );
\Log::info( '-1 edit $this->FacilityRepository::' . print_r( $this->FacilityRepository, true ) );
// line above logged as : [2020-09-04 16:46:28] local.INFO: -1 edit $this->FacilityRepository::
// AND ERROR NEXT
$this->form = $this->FacilityRepository->getById($id)->toArray();
\Log::info( '-1023 $this->form ::' . print_r( json_encode( $this->form ), true ) );
$this->current_facility_id = $id;
$this->form['created_at'] = getCFFormattedDateTime($this->form['created_at']);
$this->emit('facility_opened',[ 'mode'=>'edit', 'id'=>$id ]);
$this->updateMode = 'edit';
}
在模板中,编辑链接定义为:
@foreach($facilityDataRows as $nextFacilityDataRow)
<tr>
<td class="text-right m-0">
<a wire:click="edit({{$nextFacilityDataRow->id}})"
class="p-1 a_edit_item_{{$nextFacilityDataRow->id}} a_link">
{{$nextFacilityDataRow->id}}
</a>
</td>
...
为什么会出现错误以及如何修复?
修改#2:
>
类设施扩展组件{...公共$FacilityRepository;}
我得到错误:
Livewire component's [admin.facilities] public property [FacilityRepository] must be of type: [numeric, string, array, null, or boolean]. Only protected or private properties can be set as other types because JavaScript doesn't need to access them.
我试图将方法edit声明为:
公共函数编辑(FacilityRepositoryInterface$facilityRepository,int$id){//你是说这个吗?…}
我得到错误:
Call to a member function filterWithPagination() on null
当我显示数据列表时,在呈现方法中使用的方法filterBackPagation上。哪条路是正确的?
修改#3:如果要修改:
public function render(FacilityRepositoryInterface $facilityRepository)
{
我得到错误:
Declaration of App\Http\Livewire\Admin\Facilities::render(App\Repositories\Interfaces\FacilityRepositoryInterface $facilityRepository) should be compatible with Livewire\Component::render()
?
修改#4:在模式I中打开页面时有2个定义了惰性的输入,如
<dd class="horiz_divider_right_23" wire:model="form.title.lazy" x-data="{ name: '{{$form['name']}}'}">
<input
x-model="name"
x-on:blur="$dispatch('name', name)"
id="name"
class="form-control editable_field admin_control_input"
placeholder="Enter descriptive name"
autocomplete=off
>
@error('form.name')
<div class="validation_error">{{ clearValidationError($message,['form.'=>'']) }}</div> @enderror
</dd>
而当我编辑一些字段在blur ervent我得到了同样的错误:
Call to a member function filterWithPagination() on null
错误描述中的url:
VM5783:1 POST http://local-hostels3.com/livewire/message/admin.facilities 500 (Internal Server Error)
哪里http://local-hostels3.com 是我的本地主机吗
我有以某种方式覆盖消息方法吗?
"laravel/framework": "^7.0",
"livewire/livewire": "^1.3",
谢谢
受保护和私有属性不会在Livewire更新之间持续存在。一般来说,应该避免使用它们来存储状态。
https://laravel-livewire.com/docs/properties/#important-notes
也就是说,您可以再次使用依赖项注入,只需传递所需的任何内容(FacilityRepositoryInterface,在本例中为
edit
方法的第一个参数)。
这同样适用于
render
方法,因此您可以跳过mount
。
我原始答案中的最后一点是错误的,您不能在渲染方法中使用DI。
因此,在渲染中使用,使用挂载方法,在编辑中使用,通过第一个参数带来它。如果渲染抱怨在使用编辑后没有它,也保存到编辑内的受保护属性。
最后的代码,应该可以
class Facilities extends Component
{
protected $FacilityRepository;
public function mount(FacilityRepositoryInterface $FacilityRepository)
{
$this->FacilityRepository = $FacilityRepository;
}
public function render()
{
// use $this->FacilityRepository->...
}
public function edit(FacilityRepositoryInterface $FacilityRepository, $id)
{
$this->FacilityRepository = $FacilityRepository;
// rest of the edit method from your code
}
}
我正在尝试实现一个简单的REST服务,该服务基于具有Spring启动和Spring数据Rest的JPA存储库。(请参阅此教程)如果将以下代码与 gradle 一起使用,则运行良好: 为了让事情变得更简单,我使用Spring boot CLI(“Spring run”命令)尝试了相同的代码。 不幸的是,这似乎不起作用@RepositoryRestResource似乎无法像@RestControlle
我正在尝试将我的maven配置为使用Nexus存储库。我试图实现的应该是非常常见的:我希望有一个Nexus存储库作为中心依赖项的代理,还有两个用于快照和发布的存储库。那里有很多文档,但我无法让它运行。我编辑了my settings.xml,使其如下所示: 但我总是收到以下错误消息: 有人能帮帮我吗?我错过了什么?
搜索仓库和镜像 你可以使用 Docker 来搜索所有公开可用的仓库和镜像。 $ docker search ubuntu 这将通过 Docker 提供的关键字匹配来显示您可用的仓库列表。 私有仓库将不会显示到仓库搜索结果上。你可以通过 Docker Hub 的简况页面来查看仓库的状态。 仓库 你的 Docker Hub 仓库有许多特性。 stars 你的仓库可以用星被标记,你也可以用星标记别的仓
我使用artifactory(OSS 5.1.3)作为通用的构建依赖缓存。我注意到,在存储库浏览器中,每个远程存储库都有一个附加了缓存的第二个条目。例如:“jcenter”和“jcenter缓存”。 自动创建缓存条目。在我向缓存中添加了一个通用的“gradle distributions”存储库之后https://services.gradle.org/distributions/,我发现我在树中
这很可能通过Nexus配置得到解决。 我们使用maven进行hadoop开发。Nexus被配置为所有存储库的镜像,存储库被添加到Nexus公共组中。(参见Nexus中有没有更好的配置存储库的方法?) 我发现hadoop-core工件版本1.0.4显示来自spring-roo-repositoryhttp://spring-roo-repository.springsource.org/releas
什么是Maven存储库? 在Maven术语中,存储库是存储所有项目jar,库jar,插件或任何其他项目特定工件的目录,并且可以由Maven轻松使用。 Maven存储库有三种类型。 下图将给出关于这三种类型的想法。 local central remote 本地存储库 Maven本地存储库是计算机上的文件夹位置。 它是在第一次运行任何maven命令时创建的。 Maven本地存储库保存您项目的所有依赖