![](/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.