亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復“在 null 上調用成員函數 update()”錯誤?

如何修復“在 null 上調用成員函數 update()”錯誤?

PHP
富國滬深 2024-01-19 16:55:03
我正在嘗試將輸入數據從表單提取到數據庫中以運行更新操作。然而,它們是一個錯誤,直接指向“$obj->update(request()->all());”行。錯誤是“在 null 上調用成員函數 update()”。我不太確定這個錯誤意味著什么,但我認為這意味著 request()->all() 為空。我想要的輸出是在將用戶輸入更新到數據庫后,用戶將通過 return redirect('/p') 重定向到 pageManagement.blade.php; 然而,當前的輸出只是一條錯誤消息,指出“Call to a member function update() on null”。public function update($URI){    $data = request()->validate([        'title' => 'required',        'URI' => 'required|min:5|max:10',        'pageContent' => 'required'    ]);    $obj = \App\Page::find($URI);    $obj->update(request()->all());    return redirect('/p');}這是我的模型 Page.php。class Page extends Model{    protected $fillable = ['title', 'URI', 'pageContent'];}這是我在 web.php 中的路線。Route::patch('/page/{URI}','PageController@update');這是我的表單,供用戶輸入輸入數據。<form action="/page/{{ $pageContent->URI }}" method="post">@csrf@method('PATCH')  <label for="title">Title:</label><br>  <input type="text" id="title" name="title" autocomplete="off" value="{{ $pageContent -> title }}"><br>  @error('title') <p style="color: red">{{ $message }}</p> @enderror  <label for="URI">URI:</label><br>  <input type="text" id="URI" name="URI" autocomplete="off" value="{{ $pageContent -> URI }}"> @error('URI') {{ $message }}@enderror 頁面內容:pageContent }}"> @error('pageContent') {{ $message }}@enderror tinymce.init({ 選擇器:'#pageContent' })我的 GitHub 存儲庫附在下面,因為表單的問題格式看起來有點搞砸了......https://github.com/xiaoheixi/wfams感謝您閱讀我的問題?。篋
查看完整描述

4 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

您正在使用Request ,因此您需要在函數中調用Requestupdate() ,您可以使用 For 方法where():


public function update(Request $request)

{

? ? $data = $request->validate([

? ? ? ? 'title' => 'required',

? ? ? ? 'URI' => 'required|min:5|max:10',

? ? ? ? 'pageContent' => 'required'

? ? ]);


? ? $obj = \App\Page::where('URI', $request->URI)

? ? ? ? ->update([

? ? ? ? ? ? 'title' => $request->title,?

? ? ? ? ? ? 'pageContent' => $request->pageContent

? ? ? ? ]);


? ? return redirect('/p');

}


查看完整回答
反對 回復 2024-01-19
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

錯誤的意思是find返回了null。這是有道理的,因為find我們將嘗試搜索主鍵字段而不是URI字段。


我不會使用URI作為該記錄的標識符。我會用它的id.


<form action="/page/{{ $pageContent->id }}" method="post">


Route::patch('/page/{page}','PageController@update');

這將使事情變得相當簡單。現在您可以輕松地使用路由模型綁定來獲取此信息Page:


use App\Page;

...


public function update(Page $page)

{

    $data = request()->validate([

        'title' => 'required',

        'URI' => 'required|min:5|max:10',

        'pageContent' => 'required'

    ]);


    $page->update(request()->all());


    return redirect('/p');

}

這將確保這$page是一個現有的模型實例。既然如此,你就可以調用update它。只需確保title,URI和pageContent是“可填充的”。


查看完整回答
反對 回復 2024-01-19
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

我看到你的github https://github.com/xiaoheixi/myFirstWebsite


在控制器中使用模型綁定的示例:


Route::patch('/page/{URI}','PageController@update');

Route::get('{URI}', 'PageController@getPage');

public function update($URI)

{

    $data = request()->validate([

        'title' => 'required',

        'URI' => 'required|min:5|max:10',

        'pageContent' => 'required'

    ]);

    $obj = \App\Page::find($URI);

    $obj->update(request()->all());

    return redirect('/p');

}

將控制器更改為:


use App\Page;


public function getPage(Page $URI)

{

    return view('page_view', compact('URI'));

}


public function update(Request $request, Page $URI)//match $URI to {URI}

{

    $data = $request->validate([

        'title' => 'required',

        'URI' => 'required|min:5|max:10|unique:pages,URI,'.$URI->id, //you dont want a duplicate URI when you search a page by URI

        'pageContent' => 'required'

    ]);

    

    $URI->update($request->all());

    return redirect('/p');

}

在刀片中:


<form action="/page/{{ $pageContent }}" method="post">

在模型中:


use Illuminate\Database\Eloquent\Model;


class Page extends Model

{

    protected $fillable = ['title', 'URI', 'pageContent'];

    public function getRouteKeyName()

    {

        return 'URI';

    }

}


查看完整回答
反對 回復 2024-01-19
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

我建議您使用驗證規則“ exists ”驗證 URI 是否存在:


  $data = request()->validate([

        'title' => 'required',

        'URI' => 'required|min:5|max:10|exists:pages,URI',

        'pageContent' => 'required'

    ]);

現在,如果 URI 不存在于您的頁面表中,laravel 將返回一個驗證錯誤,并顯示消息,如“指定的 URI 不存在于表頁面中”


查看完整回答
反對 回復 2024-01-19
  • 4 回答
  • 0 關注
  • 253 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號