![](/img/trans.png)
[英]How do I set up a global method or Vue directive that can access the shared data in a Laravel Inertia app to help restrict features by permissions?
[英]Access json data with Laravel and Inertia
我有一个带有 1 个输入字段和一个提交按钮的简单表单。
所做的只是获取用户输入,将其与外部 API 匹配,然后将这两个记录提交到数据库。
来自外部 API 的响应是 JSON 格式,像这样但我只想检索choices
下的text
字段
{
"id": "123",
"object": "tc",
"created": 1655642237,
"model": "text-code",
"choices": [
{
"text": "paragraph text here",
"index": 0,
"logprobs": null,
"finish_reason": "length"
}
]
}
这存储在变量$complete
中,因此当我在视图中访问它时,我无法仅针对特定元素获得所有这些。
这是我的 controller
public function index()
{
$prompts = Writer::all();
return Inertia::render('Writer', [
'prompts' => $prompts
]);
}
public function store(Request $request)
{
$complete = $start->complete([
'engine' => '002',
'prompt' => $request->input('inputText')
]);
$data = json_decode($complete, true);
Validator::make($request->all(), [
'inputText' => 'required|min:5|max:255|string',
])->validate();
Writer::create([
'request' => $request->input('inputText'),
'response' => $data['choices']
]);
return redirect()->back()->with('message', 'success.');
}
我必须将$complete
传递给create()
方法,因为传递$data
会出错
数组到字符串的转换
和
class stdClass 的 Object 无法转换为字符串
但是,如果我在变量之后return $data['choices']
,我会得到仅在choices
下的字段
视图非常简单
<div class="card w-100 bg-light mt-4 mb-4" v-for="prompt in $page.props.prompts">
<div class="card-body">
<h5 class="card-title">{{ prompt.request }}</h5>
<p class="card-text">{{ prompt.response }}</p>
</div>
</div>
为了访问$choices
-array 中的数据(它是一个数组,而不是一个字符串,这就是相应地出现错误的原因),将store
-method 中的相应行更改为
Writer::create([
'request' => $request->input('inputText'),
'response' => $data['choices'][0]['text']
]);
但请注意$data[ 'choices' ]
可能为空,因此在存储任何值之前,请确保检查是否存在并提供默认值,例如
$text = $data['choices'][0]['text'] ?? 'my-default-value';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.