【问题标题】:Laravel: Missing 1 argument for App\Http\Controllers\ProfileController::show()Laravel:App\Http\Controllers\ProfileController::show() 缺少 1 个参数
【发布时间】:2018-02-23 02:17:48
【问题描述】:

当我在 home.blade.php 中单击“配置文件”时出现错误,“缺少 App\Http\Controllers\ProfileController::show() 的 1 个参数”如何解决此错误?

home.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="sidebar col-md-3">
            <div class="panel panel-default">
                <div class="panel-heading">Navigation</div>
                  @if (Auth::user()->type === "Admin")
                    <ul class="list-group">
                        <li class="list-group-item"><a href="{{ URL::to('users') }}">Users</a></li>
                        <li class="list-group-item"><a href="{{ URL::to('adlogs') }}">Logs</a></li>
                    </ul>
                 @elseif (Auth::user()->type === "Employee")
                    <ul class="list-group">
                        <li class="list-group-item"><a href="{{ URL::to('profile') }}">Profile</a></li>
                        <li class="list-group-item"><a href="{{ URL::to('logs') }}"> Logs</a></li>
                    </ul>
                @else

                @endif
            </div>
        </div>  
        <div class="col-md-9">
            <div class="panel panel-default">
                <div class="panel-heading">Dashboard</div>

                <div class="panel-body">
                    You are logged in!
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

路线:

Route::get('/home', 'HomeController@index');
Route::resource('/profile', 'ProfileController@show');

HomeController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {

        return view('home');
    }

}

ProfileController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
class ProfileController extends Controller
{

    public function index()
    {

    }


    public function create()
    {
        //
    }


    public function store(Request $request)
    {
        //
    }


    public function show($id)
    {
        $users = User::find($id);

        return view('profile.index',compact('users'));


    }


    public function edit($id)
    {
        //
    }


    public function update(Request $request, $id)
    {
        //
    }


    public function destroy($id)
    {
        //
    }
}

这是 Profile 文件夹的 index.blade.php。这应该是输出。

@extends('layouts.app')
@section('content')
    <div class="container">
        <div class="row">

            <div class="table-responsive">
                <table class="table table-striped">
                    <thead>
                        <td>User ID</td>
                        <td>First Name</td>
                        <td>Last Name</td>
                        <td>Email</td>
                        <td>Job Title</td>
                        <td>Contact No</td>
                        <td>ABN Number</td>
                        <td>Status</td>
                        <td>Type</td>
                        <td>Action</td>
                    </thead>
                    <tbody>                                     
                        @foreach($users as $value)  
                            <tr>
                                <td>{{ $value->id }}</td>                           
                                <td>{{ $value->first_name }}</td>
                                <td>{{ $value->last_name }}</td>
                                <td>{{ $value->email }}</td>
                                <td>{{ $value->job_title }}</td>
                                <td>{{ $value->contact_no }}</td>
                                <td>{{ $value->abn_number }}</td>
                                <td>{{ $value->status }}</td>
                                <td>{{ $value->type }}</td>
                                <td>
                                    <a href="{{ URL::to('users/' . $value->id . '/edit') }}">
                                        Edit
                                    </a>                                                    
                                    <a href="{{ URL::to('users/' . $value->id . '/destroy') }}">
                                        Delete
                                    </a>
                                </td>   
                            </tr>                   
                         @endforeach                                         
                    </tbody>
                </table>
            </div>



        </div>
    </div>
 @endsection

如何解决这个问题?

【问题讨论】:

  • 为什么选择 laravel 5.3?当前版本是 5.5
  • 这是客户想要的
  • 如何解决这个问题?
  • 5.3 于 2016 年 8 月 23 日发布,很久以前
  • 为每个方法定义单独的路由,而不是使用路由资源

标签: php laravel laravel-5 laravel-5.3


【解决方案1】:

使用时

Route::resource...

您不能指定函数。只需使用:

Route::resource('/profile', 'ProfileController');

编辑:

Route::resource 为您创建 6 条路线。请参阅下面的图片。


由于您的路线需要一个参数($id),您需要向它传递一个参数。也许使用命名路线也更容易。所以不是

<a href="{{ URL::to('profile') }}">Profile</a>

你会写

<a href="{{ route('profile.show', Auth::user()->id) }}">Profile</a>


可以通过命令查看所有可用路由

php artisan route:list

输出应如下所示:

【讨论】:

  • 问题仍未解决。我删除了@show,它没有输出。当我使用“get”而不是“resource”时,我仍然得到同样的错误,“Missing 1 argument”
  • 如果使用 get 你需要传递 id 值,你使用 show($id) 路由就像 Route::get('/profile/{id}', 'ProfileController@show');
  • 我使用你的方法,我得到另一个错误:RouteCollection.php 第 161 行中的 NotFoundHttpException:
  • NotFoundHttpException 表示没有定义路由。您是否在您的 routes/web.php 中定义了Route::resource('/profile', 'ProfileController');?
  • @PKeidel profile.show 在使用路由列表时在名称列中不可见
【解决方案2】:

这种情况会有很多解决办法。

解决方案一

你可以像这样改变路线

Route::resource('/profile/{id}', 'ProfileController@show');

解决方案二

使用相同的路线,你可以改变你的控制器看起来像这样

public function show()
{
    $id = Auth::id();
    $users = User::find($id);

    return view('profile.index',compact('users'));

}

我希望这个答案可以帮助您解决问题

【讨论】:

  • 我遇到了一个错误:路由模式“/profile/{id}/{{id}}”不能多次引用变量名“id”。
  • 这不适用于 Route::resource,因为资源不能使用路由占位符
  • 可以尝试这样使用,Route::resource('user', 'AdminUserController', ['parameters' => [ 'id' => 'admin_id' ]]);跨度>
  • 您的资源路径错误,您通过获取经过身份验证的用户的方式浪费了大量资源(提示:Auth::user() 是一回事)
  • 不,使用 $id = Auth::id();用于获取当前已认证用户的 ID。而且我们不需要从 get url 再次发送它
【解决方案3】:

here is the route list

profile{id} 中没有名字

【讨论】:

    【解决方案4】:

    在路线中

    Route::resource('/profile', 'ProfileController');    
    

    在视图中

         <ul class="list-group">
          <li class="list-group-item"><a href="{{ URL::to('profile/'.Auth::user()->id)}}">Profile</a></li>
          <li class="list-group-item"><a href="{{ URL::to('logs') }}"> Logs</a</li>
        </ul>
    

    例如。 $id 可能为 1,然后会被路由到 show 方法中 ProfileController.php

                 public function show($id){
                        $users = User::find($id);
                        return view('profile.index',compact('users'));
                    }
    

    【讨论】:

    • 出现错误:未定义变量:id(查看:C:\xampp\htdocs\DTR\resources\views\home.blade.php)
    • 你必须将 $id 传递给视图,实际上我的意思是配置文件 id,public function index() { $id = Auth::user()->id;返回视图('home',紧凑('id')); } 或者使用可以直接在视图中使用,比如
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多