【问题标题】:Show method from resource controller returns null来自资源控制器的显示方法返回 null
【发布时间】:2018-03-25 14:16:12
【问题描述】:

我在学习 laravel 时遇到问题,由于无法通过 Google 等方式找到答案,因此决定在这里提出我的问题。

我正在尝试通过 Id 从数据库中返回一个客户端,可能稍后通过名称返回。

这是我的表格:

<<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Klant invoeren</title>
<link rel="stylesheet" href="{{asset('css/app.css')}}">
</head>
<body>

<p><<form action="{{route('client/'.$client->id.'/show/')}}"
      method="get">
<div class="row">
<div class="col-md-4"></div>
<div class="form-group col-md-4">
    <label for="price">Achternaam:</label>
    <input type="text" class="form-control" name="id">
</div>
</div>
<div class="row">
    <div class="col-md-4"></div>
    <div class="form-group col-md-4">
        {{csrf_field()}}
        <button type="submit" class="btn btn-success" style="margin-        
left:38px">Zoek klant</button>
    </div>
</div>
</form></p>
</body>
</html>

重定向到:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Klant invoeren</title>
<link rel="stylesheet" href="{{asset('css/app.css')}}">
</head>
<body>
<div class="container">
    <h2>Voer een klant in</h2><br  />
    <h1>Showing {{ var_dump($client) }}</h1>


    </div>
</body>
</html>`

这是来自 Clientcontroller 的 show 方法:

public function show($id)
{
    $client = Client::find($id);
    return view('clients.show', compact('client'));
}

这是我正在使用的路线:

Route::get('client/{id}/show','ClientController@show');

有人能发现我的错误吗,因为在过去的几个小时里我搞砸了这个。

编辑:更新代码并添加路由,现在收到客户端变量未在

中定义的错误

【问题讨论】:

    标签: forms laravel variables controller resources


    【解决方案1】:

    您必须在表单操作中回显客户端 ID。因此,从 $client->id 中删除 反逗号。使用以下代码:

    <form action="{{action('ClientController@show', $client->id)}}"             
    method="get">
    

    此外,从代码中删除 backtick。使用以下代码:

    public function show($id)
    {
        $client = Client::find($id);
        return view('clients.show', compact('client')); 
    }
    

    【讨论】:

    • 如果我这样做,我会收到来自 $client-id 的 $client 未定义的错误:/
    • 我只是在您的代码中发现了一个错误。我不知道使用哪种方法来显示具有上述形式的视图。
    • 好吧,我使用的是 return View::make('clients.show') ->with('client', $client);但任何一个都有效
    【解决方案2】:

    在您的路线/web.php 中

           Route::get('client/{id}/show','ClientController@show');
    

    在您的表单中:

           <form action="{{URL::to('client/'.$client->id.'/show/')}}"             
    

    method="get">

    在您的控制器中:

    public function show($id)
    {
        $client = Client::find($id);
        return view('clients.show', compact('client')); 
    }
    

    【讨论】:

    • 感谢您的回答卢西亚诺。我复制了您的代码,但在我的视图中仍然出现未定义变量 $client 错误
    • 在这里:ErrorException (E_ERROR) 未定义变量:客户端(查看:/var/www/html/LaravelProjects/GroepOef1/resources/views/clients/showClient.blade.php)
    • 你返回了错误的视图,改变这个: public function show($id) { $client = Client::find($id);返回视图('clients.showClient',紧凑('client')); }
    • 我这样做了,但我仍然遇到同样的错误。表单是变量未定义的地方
    • 编辑您的问题,发布您的视图、控制器和路由/web.php
    【解决方案3】:

    确保在您的客户端控制器中使用您所引用的模型

    假设 App\Client.php 如果您指的是用户,请将其更改为 App\User.php

    客户端控制器

    use App\Client;
    
    public function show($id)
    {
        $client = Client::find($id);
        return view('clients.show', compact('client')); 
    }
    

    现在您可以使用 $client 获取客户端模型 例如 $client->id

    确保在路由中传递 {id} 参数

    【讨论】:

    • 不幸的是,这仍然没有改变任何东西:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2022-07-27
    • 1970-01-01
    相关资源
    最近更新 更多