php - CodeIgniter 4 delete Post Method

Good Day all

before this get removes i must note that i have tried searching for this but i still cant understand why this is not working

Please can someone help me with this i tried doing this for a few weeks now and i cannot figure out why my delete button does not work i did it on the code igniter3 and it work but i canot seem to get it to work as i am still learning and is new all i want to do is delete a post with a button that i have created ! that all please explain what i did wrong so i can learn this is just a test project to teach myself code igniter 4 thank you so much sorry for my bad english

so here is my code

Model (Newsmodel.php)

<?php

namespace App\Models;

use CodeIgniter\Model;

class NewsModel extends Model
{
 protected $table = 'news';

 protected $allowedFields = ['title', 'slug', 'body'];

 public function getNews($slug = false)
 {
  if ($slug === false) {
   return $this->findAll();
  }

  return $this->asArray()
   ->where(['slug' => $slug])
   ->first();
 }
}

here is Controller(News.php)

<?php

namespace App\Controllers;

use App\Models\NewsModel;
use CodeIgniter\Controller;

class News extends Controller
{
 public function index()
 {
  $model = new NewsModel();

  $data = [
   'news' => $model->getNews(),
   'title' => 'News archive',
  ];

  echo view('templates/header', $data);
  echo view('news/overview', $data);
  echo view('templates/footer', $data);
 }

 public function view($slug = null)
 {
  $model = new NewsModel();

  $data['news'] = $model->getNews($slug);

  if (empty($data['news'])) {
   throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the news item: ' . $slug);
  }

  $data['title'] = $data['news']['title'];

  echo view('templates/header', $data);
  echo view('news/view', $data);
  echo view('templates/footer', $data);
 }
 public function create()
 {
  $model = new NewsModel();

  if ($this->request->getMethod() === 'post' && $this->validate([
   'title' => 'required|min_length[3]|max_length[255]',
   'body' => 'required',
  ])) {
   $model->save([
    'title' => $this->request->getPost('title'),
    'slug' => url_title($this->request->getPost('title'), '-', true),
    'body' => $this->request->getPost('body'),
   ]);

   echo view('news/success');

  } else {
   echo view('templates/header', ['title' => 'Create a news item']);
   echo view('news/create');
   echo view('templates/footer');
  }
 }
}

View(view.php)

<h2><?=esc($news['title'])?></h2>
<p><?=esc($news['body'])?></p>



<button><a href="/news/delete" class="btn btn-danger">Delete</a></button>

i have tried the following in my controller

and it didint delete it from my database but i also did not get an error! it just redirects me to my succes page.

public function delete($id = null)
{
$model = new NewsModel();

$model->delete([
 $model->where('id', $id)->delete(),
]);

return view('news/delete');
}

i have also tried this

   public function delete()
 {
  $model = new NewsModel();

  if ($this->request->getMethod() === 'post') {
   $model->delete([
    'title' => $this->request->getPost('title'),  
    'body' => $this->request->getPost('body'),
   ]);
   echo view('news/delete');
  }
 

DB set up

DB NAME= toets
TABLE= news
id|title|slug|body

Answer

Solution:

i changed my view button to

<a href="<?= '/news/delete/' . esc($news['id']) ?>">Delete</a>

and in my controller i made

 public function delete($id)
{
    $model = new NewsModel();
    $model->where('id', (int) $id)->delete();

    return view('news/delete');
} 

Source