News Tutorial |
Hello,
I'm new to CI4, and I'm trying to work through the tutorials. I got as far as the form for posting data, where, upon submitting new data, I get: Not Found The requested URL was not found on this server. Apache/2.4.52 (Ubuntu) Server at ... my Routes.php: <?php namespace Config; // Create a new instance of our RouteCollection class. $routes = Services::routes(); /* * -------------------------------------------------------------------- * Router Setup * -------------------------------------------------------------------- */ $routes->setDefaultNamespace('App\Controllers'); $routes->setDefaultController('Home'); $routes->setDefaultMethod('index'); $routes->setTranslateURIDashes(false); $routes->set404Override(); // The Auto Routing (Legacy) is very dangerous. It is easy to create vulnerable apps // where controller filters or CSRF protection are bypassed. // If you don't want to define all routes, please use the Auto Routing (Improved). // Set `$autoRoutesImproved` to true in `app/Config/Feature.php` and set the following to true. // $routes->setAutoRoute(false); /* * -------------------------------------------------------------------- * Route Definitions * -------------------------------------------------------------------- */ // We get a performance increase by specifying the default // route since we don't have to scan directories. $routes->get('/', 'Home::index'); use App\Controllers\News; use App\Controllers\Pages; $routes->match(['get', 'post'], 'news/create', [News::class, 'create']); $routes->get('news/(egment)', [News::class, 'view']); $routes->get('news', [News::class, 'index']); $routes->get('pages', [Pages::class, 'index']); $routes->get('(egment)', [Pages::class, 'view']); /* * -------------------------------------------------------------------- * Additional Routing * -------------------------------------------------------------------- * * There will often be times that you need additional routing and you * need it to be able to override any defaults in this file. Environment * based routes is one such time. require() additional route files here * to make that happen. * * You will have access to the $routes object within that file without * needing to reload it. */ if (is_file(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) { require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php'; } my News.php: <?php namespace App\Controllers; use App\Models\NewsModel; use CodeIgniter\Exceptions\PageNotFoundException; class News extends BaseController { public function index() { $model = model(NewsModel::class); $data = [ 'news' => $model->getNews(), 'title' => 'News archive', ]; return view('templates/header', $data) . view('news/index') . view('templates/footer'); } public function view($slug = null) { $model = model(NewsModel::class); $data['news'] = $model->getNews($slug); if (empty($data['news'])) { throw new PageNotFoundException('Cannot find the news item: ' . $slug); } $data['title'] = $data['news']['title']; return view('templates/header', $data) . view('news/view') . view('templates/footer'); } public function create() { helper('form'); // Checks whether the form is submitted. if (! $this->request->is('post')) { // The form is not submitted, so returns the form. return view('templates/header', ['title' => 'Create a news item']) . view('news/create') . view('templates/footer'); } $post = $this->request->getPost(['title', 'body']); // Checks whether the submitted data passed the validation rules. if (! $this->validateData($post, [ 'title' => 'required|max_length[255]|min_length[3]', 'body' => 'required|max_length[5000]|min_length[10]', ])) { // The validation fails, so returns the form. return view('templates/header', ['title' => 'Create a news item']) . view('news/create') . view('templates/footer'); } $model = model(NewsModel::class); $model->save([ 'title' => $post['title'], 'slug' => url_title($post['title'], '-', true), 'body' => $post['body'], ]); return view('templates/header', ['title' => 'Create a news item']) . view('news/success') . view('templates/footer'); } } my Pages.php: <?php namespace App\Controllers; use CodeIgniter\Exceptions\PageNotFoundException; class Pages extends BaseController { public function index() { return view('welcome_message'); } public function view($page = 'home') { if (! is_file(APPPATH . 'Views/pages/' . $page . '.php')) { // Whoops, we don't have a page for that! throw new PageNotFoundException($page); } $data['title'] = ucfirst($page); // Capitalize the first letter return view('templates/header', $data) . view('pages/' . $page) . view('templates/footer'); // ... } } my 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->where(['slug' => $slug])->first(); } } my create.php: <h2><?= esc($title) ?></h2> <?= session()->getFlashdata('error') ?> <?= validation_list_errors() ?> <form action="/news/create" method="post"> <?= csrf_field() ?> <label for="title">Title</label> <input type="input" name="title" value="<?= set_value('title') ?>"> <br> <label for="body">Text</label> <textarea name="body" cols="45" rows="4"><?= set_value('body') ?></textarea> <br> <input type="submit" name="submit" value="Create news item"> </form> my index.php: <h2><?= esc($title) ?></h2> <?php if (! empty($news) && is_array($news)): ?> <?php foreach ($news as $news_item): ?> <h3><?= esc($news_item['title']) ?></h3> <div class="main"> <?= esc($news_item['body']) ?> </div> <p><a href="/news/<?= esc($news_item['slug'], 'url') ?>">View article</a></p> <?php endforeach ?> <?php else: ?> <h3>No News</h3> <p>Unable to find any news for you.</p> <?php endif ?> my success.php: <p>News item created successfully.</p> my view.php: <h2><?= esc($news['title']) ?></h2> <p><?= esc($news['body']) ?></p> I really don't know what I've done wrong. I would really appreciate some help. Also, if I've missed anything, please let me know. Thanks in advance. (02-20-2023, 04:03 PM)Coolmike01 Wrote: Hello, The error message comes from Apache. Your Apache configuration is not correct. Check the Apache configuration. The request does not reach CI4.
Perfect! Thanks! It had to do with how I had configured the baseURL, and I didn't notice.
|
Welcome Guest, Not a member yet? Register Sign In |