php - PHP - Laravel - 基于多个表单输入构建请求
问题描述
如何设置以下控制器和视图以将多个表单输入映射到 api 参数
我有一个支持单个输入条件的表单的视图。然后控制器使用表单输入来查询第 3 方 API 并从响应中返回结果。我正在使用 Laravel 框架,并且无法让控制器支持多个搜索条件并映射到其他 API 参数。
控制器(处理来自漫画路由的请求。)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use GuzzleHttp\Client;
use Cache;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
class HomeController extends Controller
{
private $client;
public function __construct(){
$ts = time();
$hash = md5($ts . config('marvel.private_key') . config('marvel.public_key'));
$this->client = new Client([
'base_uri' => 'http://gateway.marvel.com/v1/public/',
'query' => [
'apikey' => config('marvel.public_key'),
'ts' => $ts,
'hash' => $hash
]
]);
}
public function comics(Request $request){
$search_term = '';
if($request->has('query')){
$search_term = $request->input('query');
$query = $this->client->getConfig('query');
$query['titleStartsWith'] = $search_term;
$response = $this->client->get('comics', ['query' => $query]);
$response = json_decode($response->getBody(), true);
$comics = $response['data']['results'];
}else{
$comics = Cache::get('comics');
shuffle($comics);
$comics = array_slice($comics, 0, 20);
}
return view('comics', ['comics' => $comics, 'query' => $search_term]);
}
Comcis 视图包含输入表单/渲染:
@extends('layouts.default')
@section('content')
<div id="content">
<h2>Comics</h2>
<form action="/comics">
<p>
<label for="query">Query</label>
<input type="text" name="query" id="query" value="{{ $query }}">
<button>Search</button>
</p>
</form>
<div id="comics" class="results">
@foreach($comics as $com)
<article class="card">
<img src="{{ $com['thumbnail']['path'] }}/portrait_incredible.jpg" alt="{{ $com['title'] }} thumbnail">
<footer>
<h5>
<a href="/comics/{{ $com['id'] }}" class="card-title">{{ $com['title'] }}</a>
</h5>
<p>
{{ str_limit($com['description'], 160) }}
</p>
</footer>
</article>
@endforeach
</div>
</div>
@stop
解决方案
您可以使用
$input = $request->all()
要将表单中的所有参数作为数组读取,您可以将它们添加到您的 Guzzle 请求中。
推荐阅读
- excel - 求和公式错误:显示 1,73472E-17 而不是 0
- sql-server - SQL Server 代理的凭据无效 [2018]
- reactjs - 这是如何在反应中创建项目符号数组
- android - 退出时片段到片段共享元素的转换不起作用
- r - 如何在 R 中使用标准输入
- mule - 使用 OAuth 的方法级授权
- swagger - 我可以为其他 Swagger 化的 API 构建 Swagger UI 吗?
- python - CNTK 中的训练对象检测错误
- javascript - webrtc:通过 ontrack 处理程序接收时,RTCTrackEvent 不包括收发器
- continuous-integration - 编写测试是持续集成的必要部分吗?