首页 > 解决方案 > 将用户输入发送到控制器的参数

问题描述

我正在做一个我有订单的 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);
       }
    }
}

标签: laravel

解决方案


首先,您不应该使用,Orders::all()因为它会从表中获取所有行。所以,你能做的是$order = Order::where('code',$orderCode)->first();。在此之后,您可以像这样检查

if(!$order){
 abort(404);
}else{
 return response()->redirect('/track/'.$order->code);
}

推荐阅读