Hey,
I want to create a simple online shop with CodeIgniter 4,
I created a "base" Controller called "Pages.php" and I created a "renderProducts" Method for rendering the "Product Page" and I created a "fallback" Method for every page that doesnt have a special method ("renderOther")
Code:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Pages extends Controller{
public function index()
{
$this->renderOther("home");
}
public function renderProducts($id){
helper("server");
helper("currency");
if(!ServerEntryExists($id)){
throw new \CodeIgniter\Exceptions\PageNotFoundException();
}else{
$this->server_model = new \Server_model();
$data["theme"] = "sms_default/bootstrap.css";
$data["servers"] = $this->server_model->get_servers();
$this->product_model = new \Product_model();
$data['products'] = $this->product_model->get_products_for_server($id);
$data["serverstring"] = convertServerIDToString($id);
echo view('templates/header', $data);
echo view('pages/products', $data);
echo view('templates/footer', $data);
}
}
public function renderOther($page = "home")
{
helper("server");
helper("currency");
# Render everything else
if(!is_file(APPPATH."/Views/pages/".$page.".php")){
throw new \CodeIgniter\Exceptions\PageNotFoundException($page);
}
$this->server_model = new \Server_model();
$data['title'] = ucfirst($page); // Capitalize the first letter
$data["theme"] = "sms_default/bootstrap.css";
$data["servers"] = $this->server_model->get_servers();
if($page == "home"){
$this->product_model = new \Product_model();
$data['products'] = $this->product_model->get_products();
//$data['products_entry'] = $this->product_model->get_products($id);
}
echo view('templates/header', $data);
echo view('pages/'.$page, $data);
echo view('templates/footer', $data);
}
}
I'm routing my requests via "Routes.php"
PHP Code:
/**
* --------------------------------------------------------------------
* Route Definitions
* --------------------------------------------------------------------
*/
// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('products/(:segment)', 'Pages::renderProducts/$1');
$routes->match(['get', 'post'], 'admin/createProduct', 'Products::create');
$routes->get('/', 'Pages::index');
$routes->get('(:any)', 'Pages::renderOther/$1');
/**
* ---------------------------------------------------------
Is there a better way to do this?
Regards