CodeIgniter 4 удалить метод публикации

Добрый день всем

прежде чем это удалится, я должен отметить, что я пытался найти это, но я все еще не могу понять, почему это не работает

Пожалуйста, может кто-нибудь помочь мне с этим? Я пытался сделать это в течение нескольких недель, и я не могу понять, почему моя кнопка удаления не работает Я сделал это с помощью кода igniter3, и он работает, но я не могу заставить его работать, как я все еще учусь и новичок, все, что я хочу сделать, это удалить сообщение с кнопкой, которую я создал! это все, пожалуйста, объясните, что я сделал не так, чтобы я мог понять, что это всего лишь тестовый проект, чтобы научить себя воспламенителю кода 4, большое спасибо Извините за мой плохой английский

так вот мой код

Модель (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();
 }
}

вот Контроллер (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.php)

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



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

Я пробовал следующее в своем контроллере

и он не удалил его из моей базы данных, но я также не получил ошибки! он просто перенаправляет меня на мою страницу успеха.

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

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

return view('news/delete');
}

я тоже пробовал это

   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 NAME= toets
TABLE= news
id|title|slug|body

просто попробуйте $model->where('id', $id)->delete(); и посмотрите этот документ: codeigniter4.github.io/userguide/models/…

Mirko Brunner 30.03.2021 16:59

я получаю сообщение об ошибке undefined variable $ id, однако, если я перейду в $ model-> where ('id', 1) -> delete (); он удаляет сообщение с идентификатором 1, но как я могу сделать его таким, чтобы я был динамическим, и он может удалить сообщение, в котором я нахожусь, например, если я в сообщении 3, он должен удалить сообщение 3, а не сообщение 1

viit 31.03.2021 09:21

Вы можете добавить скрытое поле ввода, содержащее post_id. И в вашем контроллере сделайте что-то вроде этого: $id = $this->request->getVar('your_post_id'); ... .

Mirko Brunner 31.03.2021 11:59

нет, я пробовал не работает, но все равно спасибо

viit 31.03.2021 12:08

хорошо, я исправлю это спасибо, сэр

viit 31.03.2021 19:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

я изменил свою кнопку просмотра на

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

и в моем контроллере я сделал

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

    return view('news/delete');
} 

Другие вопросы по теме