【问题标题】:Delete and Update Method of CRUD is not passing all the parametersCRUD 的删除和更新方法未传递所有参数
【发布时间】:2022-11-28 02:02:24
【问题描述】:

我在我的网站上实现了一个模式类型更新和删除函数,但它总是返回 Too few arguments to function App\Http\Controllers\AdminController::destroy(), 1 passed in D:\SUDRTest\vendor\laravel\framework\ src\Illuminate\Routing\Controller.php 在第 54 行,正好是 2 个预期 更新功能也一样

这是我的 CRUD 路线

 Route::resource('papers', AdminController::class)->only(['edit', 'update', 'destroy']);

这是视图

<li class="pdfpaperInfo">
                <div class="colpdf col-1" data-label="Title:">{{ $paper->PaperTitle }}</div>
                <div class="colpdf" data-label="Paper Type:">{{ $paper->PaperType }}</div>
                <div class="colpdf" data-label="College:">{{ $paper->College }}</div>
                <div class="colpdf" data-label="Author(s):">{{ $paper->Authors }}</div>
                <div class="colpdf" data-label="Date Published:">{{ $paper->DatePublished }}</div>
                <div class="pdfbtnCont">
                    <button class="pdfBtn redBtn" onclick="location.href='{{route('MyProfile')}}'">Back</button>
                    <button class="pdfBtn redBtn" id="modalOneBtn" onclick="location.href='{{route('papers.edit', $paper->PaperID)}}'">Update</button>
                    <button class="pdfBtn redBtn" id="modalTwoBtn">Delete</button>
                </div>
            </li>

            <div id="modalOne" class="modal">

                <!-- Modal content -->
                <div class="modal-content">
                    <span class="m1Close close">&times;</span>
                    <div class="modalinfoCont">

                        <h2>Update Paper</h2>

                            @include('admin.updatepaper')
                    </div>
                </div>
            
            </div>

            <div id="modalTwo" class="modal">

                <!-- Modal content -->
                <div class="modal-content">
                    <span class="m2Close close">&times;</span>
                    <div class="modalTwoCont modalinfoCont">

                        <h2>Delete Paper</h2>
                        <br>
                        Are you sure you want to delete this paper?
                        <br>
                        <br>
                        <div class="modalbtnCont">
                            <form method="POST" action="{{route('papers.destroy', $paper->PaperID) }}">
                            @csrf
                            @method('DELETE')
                                <button class="redBtn" type="submit">Yes</button>
                            </form>
                            <button class="redBtn" type="submit">No</button>
                        </div>
                    </div>
                </div>
            
            </div>

        </div>

和控制器

public function destroy(Papers $paper, $PaperID)
   {
       $paper=Papers::find($PaperID);
       $paper->delete();
       return redirect()->back();
   }

   public function edit(Papers $paper, $PaperID)
   {
       $paper=Papers::find($PaperID);
       return view('admin.updatepaper',compact('paper'));
   }

   public function update(Request $request,Papers $paper, $PaperID )
   {
        $request->validate([
            'PaperTitle' => 'required',
            'PaperType' => 'required',
            'file' => [
                'required',
                File::types('pdf')
                    ->max(12 * 1024),
        ],
    ]);

        $paper=new Papers();

        $file=$request->file;

        $filename=time().'.'.$file->getClientOriginalExtension();
                $request->file->move('assets', $filename);
                $paper->file=$filename;

            $paper->DatePublished=$request->DatePublished;
            $paper->PaperTitle=$request->PaperTitle;
            $paper->PaperType=$request->PaperType;
            $paper->Authors=$request->Authors;


            $paper->update();
            return redirect()->back();
   }

我尝试不以模态形式执行此操作,但它仍然继续显示相同的错误,而且我不知道缺少的参数是什么,因为它没有告诉我

【问题讨论】:

    标签: php laravel crud


    【解决方案1】:

    你需要再看看route-model binding

    Laravel 默认执行 Papers::find($paperID) 并将 Papers 模型作为 Papers $papers 参数传递给您的方法。

    所以销毁方法应该是:

       public function destroy(Papers $paper)
       {
           $paper->delete();
           return redirect()->back();
       }
    

    当然你可以禁用路由模型绑定并做你自己的事情,但在这里似乎没有必要。

    目前尚不清楚您打算在更新方法中做什么。如果你想创建一篇关于更新的新论文并保留旧的,那么将$paper-&gt;update()更改为$paper-&gt;save(),你应该会很好。但是如果你想做一个实际的更新,你应该这样做:

    update(Papers $paper, Request $request) {
        // validate
    
        $paper->DatePublished=$request->DatePublished;
        // update other fields
    
        $paper->save();
    
         return redirect()->back();
    }
    

    【讨论】:

    • 删除功能现在有效,但更新仍然相同我尝试删除更新功能中的$PaperID,但它根本不更新任何值,也没有错误
    • 我也添加了关于更新方法的注释。我不想太苛刻,但是你混淆方法的方式我认为你应该考虑再看看 Laravel 文档或者更好的是,Jeffery Way 在 Laracasts 提供的 Laravel 免费初学者课程。
    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 2021-07-15
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多