我有一个严重的问题与Livewire从api响应传递数据到组件刀片文件。起初它加载良好,当我点击的时候。下拉列表会在下面抛出一个错误。
Livewire在尝试为[sign up]组件添加水合物时遇到损坏的数据。确保Livewire组件的[名称、id、数据]在请求之间未被篡改。
我有一个我正在加载的下拉列表,一开始它加载得很好,但当我从下拉列表中选择某个内容时,它抛出了那个错误。
下面是我的组件代码
<?php
namespace App\Http\Livewire;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Guzzle\Http\Exception\ClientErrorResponseException;
use Livewire\Component;
class SignUp extends Component
{
public $response = 0;
public $data;
//get all professions and their related prefixes
public $professions;
public $profession_id;
public $prefix;
public function mount()
{
$response = Http::get('http://localhost:8000/api/sign_up');
$collection = json_decode($response);
$this->professions = collect($collection->professions);
}
public function hydrate()
{
$response = Http::get('http://localhost:8000/api/sign_up');
$collection = json_decode($response);
$this->professions = collect($collection->professions);
}
public function render()
{
return view('livewire.sign-up', [
'professions' => $this->professions
]);
}
}
下面是我的组件刀片下拉列表
<div class="form-group">
<select wire:model="profession_id" name="profession_id" class="form-control form-control-lg"
id="exampleFormControlSelect2">
<option value="">Choose Profession</option>
@foreach($professions as $profession)
<option value="{{$profession->id}}">{{$profession->description}}</option>
@endforeach
</select>
</div>
关于你的问题,你已经给出了建议。
Livewire组件的[sign up]公共属性[前缀]的类型必须为:[数字、字符串、数组、null或布尔]。只有受保护或私有属性可以设置为其他类型,因为JavaScript不需要访问它们。
将集合转换为数组。
您可能只需要将集合转换为数组:
public function mount()
{
$response = Http::get('http://localhost:8000/api/sign_up');
$collection = json_decode($response);
$this->professions = collect($collection->professions)->all();
}
更进一步,我注意到您只需要专业人士提供说明
和id
。因此,您只需返回:
public function mount()
{
$response = Http::get('http://localhost:8000/api/sign_up');
$collection = json_decode($response);
$this->professions = collect($collection->professions)->pluck('description', 'id')->all();
}
当然,您需要相应地调整刀片:
@foreach($professions as $id => $desc)
<option value="{{$id}}">{{$desc}}</option>
@endforeach
注意,我没有亲自测试代码,所以可能需要做一些调整。让我知道这些评论,这样我可以改进我的答案。
当一个应用在处理完一个请求后, 这个应用会生成一个 response 响应对象并把这个响应对象发送给终端用户 这个响应对象包含的信息有 HTTP 状态码,HTTP 头和主体内容等, 从本质上说,网页应用开发最终的目标就是根据不同的请求去构建这些响应对象。 在大多数实际应用情况下,你应该主要地去处理 response 这个 应用组件, 在默认情况下,它是一个继承自 yii\web\Response
CabalPHP 的请求(Request)和响应(Response)对象依赖 zendframework/zend-diactoros 实现了 PSR-7标准 psr/http-message 中的 Psr\Http\Message\ServerRequestInterface和Psr\Http\Message\ResponseInterface 的全部接口,同时也扩展了自己的一些实用方法方便使用
在 Hyperf 里可通过 Hyperf\HttpServer\Contract\ResponseInterface 接口类来注入 Response 代理对象对响应进行处理,默认返回 Hyperf\HttpServer\Response 对象,该对象可直接调用所有 Psr\Http\Message\ResponseInterface 的方法。 注意 PSR-7 标准为 响应(Response) 进
响应对象封装了从服务器返回到客户端的所有信息。在HTTP协议中,这些信息是包含在从服务器传输到客户端的HTTP头信息或响应的消息体中。
Response对象的属性。 Response.url 最终的URL。 Response.text 响应内容,以unicode为单位。 如果Response.encoding是None且chardet模块可用,则将猜测内容的编码。 Response.content 响应内容,以字节为单位。 Response.doc 一个PyQuery响应的内容的对象。链接默认为绝对链接。 请参阅PyQuery的文
我试图用制作一个响应线图。 我用这个MWE重现了我的尝试: 如果我让浏览器更宽,线条图会像你期望的那样响应,填满空间。 我的问题是,如果我使浏览器变窄,图形不会像我使其变宽时那样调整大小以填充浏览器宽度的100%。对于新的浏览器宽度来说,它仍然太宽。有趣的是,在刷新时,图形总是占据浏览器的100%。 把浏览器做宽做窄,如何让图占据浏览器的100%?
我用IntelliJ创建了一个非常简单的流测试。 IntelliJ无法完成测试,并给了我错误 这导致假设响应程序流不执行任何操作。 启动器流被执行。我可以看到这一点,因为命令显示在日志中。但是,我不知道响应器流是否从未由发起方流启动,或者只是没有响应。也许你可以帮我。 谢谢
主要内容:HTTP响应完整格式HTTP响应完整格式 HTTP的响应也由三部分组成(响应行+响应头+响应体): 以下是一个实际的HTTP响应示例: ①报文协议及版本; ②状态码及状态描述; ③响应报文头,也是由多个属性组成; ④响应报文体,即我们真正要的“干货”。