【问题标题】:Creating a search form in laravel 5.6在 laravel 5.6 中创建搜索表单
【发布时间】:2018-06-30 23:06:26
【问题描述】:

过去一天左右我一直在学习 Laravel,并成功地在 WAMP 设置上创建了一些页面,这些页面显示了数据库查询的结果。我正在尝试在页面上添加一个表单,允许我对结果进行过滤和排序。我遇到了一个问题,我收到一个 ReflectionException 说明“Class App\Http\Controllers\Result 不存在。”

我有一个控制器

 <?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Input;

class ResultsController2 extends Controller
{
    /*  
        Display results for search query on cars table.
    */

    public function show_all()
    {
        //This will query the database for our cars
        //$cars = DB::connection('mysql')->select("select * from cars");

        $cars = \DB::select('SELECT * FROM `cars` INNER JOIN makes on cars.make=makes.id INNER JOIN models on cars.model=models.id');
        $makes = \DB::select('SELECT * FROM `makes`');

        return view('results2',['cars'=>$cars,'makes'=>$makes]);
    }

    public function show_all_filtered(Result $result)
    {
        $QueryAppend = "";
        if(Input::post())
        {
            $formMake = Input::post('make');
            $QueryAppend = ' WHERE cars.make=`'.$formMake.'`';//This only filters the results if there has been a form selection
        }
        //This will query the database for our cars
        //$cars = DB::connection('mysql')->select("select * from cars");

        $cars = \DB::select(
            'SELECT * FROM `cars` 
            INNER JOIN makes on cars.make=makes.id 
            INNER JOIN models on cars.model=models.id'
            .$QueryAppend);
        $makes = \DB::select('SELECT * FROM `makes`');

        return view('results2',['cars'=>$cars, 'makes'=>$makes]);
    }   
}

我的路线如下所示:

    Route::get('/', 'ResultsController@show_all');

Route::get('/question3','ResultsController2@show_all');
Route::post('/question3','ResultsController2@show_all_filtered');

Route::get('/question4','ResultsController2@show_all');

我的 Blade 看起来像这样:

    <!== This should be the template for the results for the database query -->


@extends('layouts.app')

@section('title', 'Question 2')

@section('content')
    <p>Results</p>
    <div class="grid">
        <div class="col100">Make</div><div class="col100">Model</div><div class="col100">Reg</div><div class="col100">Mileage</div>
    </div>
    <div class="clear"></div>
    @foreach ($cars as $car)
        <div class="grid">

                <div class="col100">
                {{ $car->make }}        
                </div>
                <div class="col100">
                {{ $car->model }}       
                </div>
                <div class="col100">
                {{ $car->number_plate }}        
                </div>
                <div class="col100">
                {{ $car->mileage }}     
                </div>

        </div>
        <div class="clear"></div>
    @endforeach
    <div class="clear"></div>
    {{ Form::open( ['action'=> 'ResultsController2@show_all_filtered'] ) }}

        <select name"make">
            @foreach ($makes as $make)
                <option value="{{ $make->make }}">{{ $make->make}}</option>
            @endforeach
        </select>
        {{ Form::submit('Update') }}
    {{ Form::close() }}
    <div class="grid">
        <div class="col300">
@endsection

当我导航到 /question3 时,我会得到一个结果列表和搜索表单,但是当我提交表单时,就会发生错误。如果您还有其他问题,我很乐意为您解答

【问题讨论】:

    标签: php html mysql laravel forms


    【解决方案1】:

    您需要在控制器顶部导入Result 类:

    use App\Path\To\Result;
    

    其中App\Path\To\ 部分是Result 类的完整命名空间。

    问题出在这个函数上:

    public function show_all_filtered(Result $result)
    

    PHP 假定类 Result 的当前命名空间,因为它不是通过 use 显式导入的。

    【讨论】:

    • 我完全错过了。看起来我包含了请求而不是响应!
    • 哦,实际上比这更糟。我从来没有打算包括结果。我应该向函数输入变量添加请求而不是结果
    • 仅供参考,如果Request $request 是控制器函数中的唯一参数,您可以省略它并使用request() 辅助方法或Request:: 外观。两者是等价的。
    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多