代码之家  ›  专栏  ›  技术社区  ›  Brainmaniac

如何在laravel中使用预定义的破坏方法

  •  -3
  • Brainmaniac  · 技术社区  · 6 年前

    我想知道从模型中删除对象的最佳实践方法是什么? 我见过几个类似的问题,但没有人涉及整个问题,也没有人涉及我的具体细节。

    我想创建一个删除按钮删除一个特定的对象在拉维。我知道怎么做,但恐怕我把事情复杂化了。

    假设我有一个叫波斯特的模特

    我还有控制器后置控制器。当我做这个控制器的时候,我给它提供了资源。多亏了这一点,我准备了几种方法,如销毁

     /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function destroy(Post $post)
    {
        //
    }
    

    岗位 还有$post参数?对我来说,如果它把$id作为一个参数,这是有意义的。

    但一次又一次,我不是泰泰。所以每一次对我来说没有意义的事情我都觉得我错过了什么。那么,有可能被广泛使用,我该如何制作一个删除按钮,使用预定义的销毁方法?我在寻找这三个步骤的答案:

    1. HTML(如何制作窗体/按钮)
    2. web.php(路径)
    3. PostController(如何执行销毁?我知道如何使用id,但将整个对象作为参数?一开始是怎么发送的?)

    再次为宽泛而抱歉,但是我觉得很多关于这个的问题都是为了具体而问的,但是缺乏知识会把问题缩小到很小的范围,所以可能会错过明显的答案。

    3 回复  |  直到 6 年前
        1
  •  3
  •   Tharaka Dilshan    6 年前

    他们这样做只是为了更理智。
    比如跟上 Object Oriented

    别担心。即使它有 destroy(Post $post) ,您不必提供 Post 反对那个 destroy() id 通过 request . 其余的由拉威尔处理。

    销毁() 功能。

    delete() 在上面。

    public function destroy(Post $post)
    {
        // laravel has found the post for you.
        $post->delete();
    }
    

    让我们看看你的方法。
    destroy($id)

    public function destroy($id)
    {
        // you have to find the particular post from database to delete.
        Post::where('id', $id)->delete();
    }
    

    看,这更复杂。

    形式

    <form method="post" action="{{ route('post.destroy'), 1 }}">
        <!-- here the '1' is the id of the post which you want to delete -->
    
        {{ csrf_field() }}
        {{ method_field('DELETE') }}
    
        <button type="submit">Delete</button>
    </form>
    

    路线

    Route::resource('post', 'PostController');
    

    public function destroy(Post $post)
    {
        $post->delete();
    }
    
        2
  •  1
  •   Aleksandrs    6 年前

    来自官方的Laravel文件:

    由于我们已将所有{user}参数绑定到App\user模型,因此 用户实例将被注入路由。例如,一个 对profile/1的请求将从数据库中注入用户实例 它的ID是1。

    如果在数据库中找不到匹配的模型实例,则404 HTTP 将自动生成响应。

    https://laravel.com/docs/5.7/routing#explicit-binding

        3
  •  -1
  •   Shireen Peerbuksh    6 年前

    在destroy方法中再传递一个参数id

    $post=$post->findOrFail($id);

    如果($后期->删除()){

     return Redirect::back()->withErrors($post->errors());
    

    Flash::成功(self::删除消息); return Redirect::back();

    }