【问题标题】:How to fix 'call to a member functuin delete() on null' in Laravel 5.7如何在 Laravel 5.7 中修复“在 null 上调用成员函数 delete()”
【发布时间】:2019-11-12 03:55:54
【问题描述】:

我正在发出表单删除请求,每次我尝试删除一些内容时都会收到错误消息“调用成员函数在 null 上删除”。我很长时间没有使用 Laravel,我已经忘记了它是如何工作的,现在我正在从头开始学习,遵​​循 Laracast 的教程。我比较了代码,一切都很好,但我总是遇到一些错误,我找不到问题......

web.php

Route::resource('projects', 'ProjectsController');

项目控制器

public function destroy($id)
    {
      $project = Project::find($id);

      $project->delete();

      return redirect('/projects');
    }

edit.blade.php

@extends('layout')


@section('content')

<h1>Edit Project</h1>

<form method="POST" action="{{ url('/projects/$project->id') }}" >

  {{ method_field('PATCH') }}

  {{ csrf_field() }}

  <div class="field">
    <label class="label" for="title">Title</label>

    <div class="control">
      <input type="text" class="input" name="title" placeholder="Title" value="{{ $project->title }}">
    </div>
  </div>

  <div class="field">
    <label class="label" for="description">Description</label>

    <div class="control">
      <textarea name="description" class="textarea">{{ $project->description }}</textarea>
    </div>
  </div>

  <div class="field">
    <div class="control">
      <button type="submit" class="button is-link">Update Project</button>
    </div>
  </div>

</form>

<form method="POST" action="{{ url('/projects/$project->id') }}">

  {{  method_field('DELETE') }}

  {{ csrf_field() }}

  <div class="field">
    <div class="control">
       <button type="submit" class="button">Delete Project</button>
    </div>
  </div>
</form>

@endsection()

【问题讨论】:

  • 检查您发布到的 URL。 {{ url('/projects/$project-&gt;id') }} 可能无法创建正确的 URL,请尝试使用 {{ url('/projects/'.$project-&gt;id) }}(正确附加 ID)
  • 哇...谢谢兄弟!!这真的帮了我很多...我花了几个小时试图找出问题所在
  • 没问题!下面的答案扩展了这个概念,因此请考虑支持并接受它。并且不要忘记dd() 函数;如果您已完成dd($id),则在致电::find($id) 之前;您将能够调试 $id 不是您所期望的。

标签: php laravel


【解决方案1】:

您的这部分代码是错误的: &lt;form method="POST" action="{{ url('/projects/$project-&gt;id') }}"

它传递 $project->id 作为 ID 而不是评估。你有两种方法:

  1. &lt;form method="POST" action="{{ url('/projects/'.$project-&gt;id) }}"
  2. &lt;form method="POST" action="{{ url("/projects/$project-&gt;id") }}"

作为补充, 在您的控制器方法中,您可能希望使用findOrFail() 而不是find(),以便在找不到模型时返回 404。如果找不到模型,find() 将返回 null,并且您已经尝试在 null 上调用 -&gt;delete()

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多