我正在尝试按名称创建搜索方法,但它显示此错误

Posted

技术标签:

【中文标题】我正在尝试按名称创建搜索方法,但它显示此错误【英文标题】:i'm trying to create a search method by name but it showing this error 【发布时间】:2021-08-25 21:59:10 【问题描述】:

我很困惑,我需要你的帮助,这是错误:

[Route: single.temp] [URI: singlepost/name] [Missing parameter: name] 缺少必需参数。 (查看:C:\Users\Toshiba\Desktop\working\mouhawla\resources\views\index.blade.php

搜索栏:

<div class="search">
    <form role="form" action="route('single.temp')">
        <i class="fa fa-search"></i>
        <div class="field-toggle">
            <input type="text" name="name" class="search-form" autocomplete="off" placeholder="Search">
        </div>
    </form>
</div>

方法:

public function getPostByName($name) 
    $products = DB::table('templates')
        ->where('name', $name)
        ->first();

    return view('singlepost', compact('products'));

路线:

Route::get('/singlepost/name', 'App\http\controllers\TemplatesController@getPostByName')->name('single.temp');

最终视图:

<h1 style="text-align: center;">ACH-template</h1>
<table>
    <tr>
        <td><img src="/storage/$products->image_path"></td>
        <td><img src="/storage/$products->image_path2"></td>
        <td><img src="/storage/$products->image_path3"></td>
        <td>
            <p>
                <h2 style="text-align:center;">$products->name</h2>
                </br>
                <p>$products->description</p>
            </p>
        </td>
    </tr>
</table>
<a href="/storage/$products->file_path" class="btn btn-primary">
    <button class="btn" style="width:100%">
        <i class="fa fa-download"></i> Download
    </button>
</a>

【问题讨论】:

您尝试过什么来解决此错误?据我所知,这不涉及 html 或 jQuery(因为您尚未共享任何与 jQuery 相关的代码),因此请分享有关连接的更多详细信息,或删除这些标签 【参考方案1】:

您定义了一个需要参数的路由:$name。您还使用了route 帮助器生成了一个URL,它将路由名称作为第一个参数,并将参数数组作为可选的第二个参数。

当您在 action 表单中使用 route('single.temp') 时,您还没有指定任何参数,因此 Laravel 会抛出您所看到的错误。要解决此错误,您需要将$name 参数指定为第二个参数(即route('single.temp', ['name' =&gt; 'something']))。这并不理想,就像您使用 $name 作为搜索词一样,您不知道页面首次呈现时的值,因此无法提供该值。

有几种方法可以实现搜索记录的目标,下面是一个基本示例,说明如何做到这一点。

web.php

定义两个路由,第一个返回带有表单的视图,另一个处理表单提交并显示结果。

Route::get('/templates', [TemplateController::class, 'index'])
        ->name('templates.index');
Route::get('/templates/search', [TemplateController::class, 'search')
        ->name('templates.search');

TemplateController.php

定义当请求上面定义的路由之一时将使用的两个函数。

class TemplateController extends Controller

    // return a view
    public function index()
    
        return view('templates.search', ['templates' => []]);
    

    // process the form submission
    // perform a search for the $request search term
    // return a view with the results
    public function search(Request $request)
    
        $request->validate([
            'term' => ['required', 'string']
        ]);

        $templates = Template::where('name', $request->term)->get();

        return view('templates.search', ['templates' => $templates]);
    

templates/search.blade.php

-- create a form which will submit to the search route --
-- note I use GET rather than POST here, explained later --
<form action=" route('templates.search') " method="GET">
    @csrf
    <input type="text" id="term" name="term" />
    <button type="submit">
         __('Search') 
    </button>

    -- loop over and show results if there are any --
    @forelse ($templates as $template)
         $template->name 
    @empty
         __('Empty') 
    @endforelse
</form>

以上内容应该是不言自明的。我在search 中使用GET 而不是POST 的原因是因为该值将作为查询字符串参数添加到URL,这意味着它可以轻松添加书签或共享。

【讨论】:

【参考方案2】:

这个错误很容易解释。您正在尝试使用/singlepost/name 路由,但在您的刀片文件上,您正在执行route('single.temp'),它告诉您它需要参数name,否则它无法创建URL,因为它是一个缺少的参数。

你应该有类似的东西:

<form role="form" action="route('single.temp', ['name' => VALUE'])">

但这并不能解决您的问题,因为您正在尝试进行搜索,所以您想要/singlepost/John 之类的内容,而John 将由用户在input 字段中输入。所以你必须做一个 AJAX 调用,因为 route('single.temp') 将由 PHP 渲染并提供给用户,所以它总是会错过所需的参数。

您还可以从Request 而非 URL 参数中获取该值。

【讨论】:

可以举个例子吗? 那里有很多很好的教程,已经多次解释了这个简单的主题,而且我可以在几分钟内完成更详细的说明。所以谷歌他们,但这里有一些我发现可以帮助你,有些更先进:this is advanced,here another one but simpler

以上是关于我正在尝试按名称创建搜索方法,但它显示此错误的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 搜索栏无法产生诊断错误

C++ 中的变量对象名称

为啥在 XSLT 转换期间出现此错误:XSLT 转换失败?

我正在尝试安装一个插件,但它给出了一个错误

创建新的 React 应用程序时出现此错误。也尝试了卸载命令,但它不起作用

Firebase 按类别名称搜索