laravel - 将用户输入发送到控制器的参数
问题描述
我正在做一个我有订单的 laravel 项目,我希望人们输入他们的订单代码,他们的订单就会出现。我正在努力寻找一种解决方案,让我的控制器的“显示”功能知道要显示哪个顺序。
轨道控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Order;
class TrackController extends Controller
{
public function index()
{
return view ('track.index');
}
public function show($id)
{
$order = Order::find($id);
return view('track.show',[
'order' => $order
]);
}
}
网页.php
Route::get('/track', 'TrackController@index');
Route::get('/track/{id}', 'TrackController@show');
跟踪索引
@extends('layouts/app')
@section('content')
<div class="container">
<div class="row justify-content center">
{!! Form::open(['action' => 'TrackController@show', 'method' => 'post']) !!}
{!! csrf_field() !!}
<input type="number" name="input-order-track-id" id="order-track-id" value="">
{{ Form::button('Track', ['type' => 'submit', 'class' => 'btn btn-primary'] ) }}
{!! Form::close() !!}
</div>
</div>
@endsection
所以我的问题是:如何放置表单,以便将用户的输入作为变量发送到我的“显示”函数?
编辑:我尝试制作重定向功能,但我不断收到输出“找不到订单”。
轨道控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Order;
class TrackController extends Controller
{
public function index()
{
return view ('track.index');
}
public function show($id)
{
$order = Order::where('code', $id);
return view('track.show',[
'order' => $order
]);
}
public function redirect(Request $request)
{
$orders = Order::all();
$orderCode = $request->input('order-track-id');
if($orders->contains('code', $orderCode)){
return redirect('/track/' . $orderCode);
} else{
return redirect('/track')->with('error', 'Order not found.');
}
}
}
网页.php
Route::get('/track', 'TrackController@index');
Route::post('/track/redirect', 'TrackController@redirect');
Route::get('/track/{id}', 'TrackController@show');
跟踪索引
@extends('layouts/app')
@section('content')
<div class="container">
<div class="row justify-content center">
{!! Form::open(['action' => 'TrackController@redirect', 'method' => 'post']) !!}
{!! csrf_field() !!}
<input type="number" name="input-order-track-id" id="order-track-id">
{{ Form::button('Track', ['type' => 'submit', 'class' => 'btn btn-primary'] ) }}
{!! Form::close() !!}
</div>
</div>
@endsection
编辑2:
更改了我的 TrackController,但现在它一直中止到 404 页面,即使我在“订单”表的“代码”列中输入了一个代码
轨道控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Order;
class TrackController extends Controller
{
public function index()
{
return view ('track.index');
}
public function show($id)
{
$order = Order::where('code', $id)->first();
return view('track.show',[
'order' => $order
]);
}
public function redirect(Request $request)
{
$orderCode = $request->input('order-track-id');
$order = Order::where('code', $orderCode)->first();
if(!$order){
abort(404);
}else{
return response()->redirect('/track/' . $order->code);
}
}
}
解决方案
首先,您不应该使用,Orders::all()
因为它会从表中获取所有行。所以,你能做的是$order = Order::where('code',$orderCode)->first();
。在此之后,您可以像这样检查
if(!$order){
abort(404);
}else{
return response()->redirect('/track/'.$order->code);
}
推荐阅读
- python - 使用 WSGI 运行 Flask-Ask 和 Apache2 时如何验证 Alexa 请求
- wordpress - 无法获取自定义分类存档页面以显示帖子
- android - 使用 WorkManager 时是否可以在通知区域显示进度条 - 像 WhatsApp 数据同步
- c - 未声明的错误结构(在此函数中首次使用)
- c - 没有“Windows 安全警报”的网络程序
- mongodb - 如何找到具有多个参数.net core + mongodb的任何匹配记录
- ionic-framework - 未列出离子低功耗蓝牙设备
- javascript - 如何从科尔多瓦应用程序向服务器发送大量数据
- python - 使用 python 将图像放置到网络摄像头源 - windows 中的 pygame
- css - 使用 CSS 无限滚动图像