Skip to content

Core.php #2

@yanker

Description

@yanker

Hola, antes que nada felicitarte pues me está siendo de gran ayuda antes de dar el salto a Laravel, comprender todo de forma nativa, ya que vengo de PHP Legacy.

He realizado unos cambios en Core.php (realmente en mi trabajo es diferente pues yo uso namespaces y cambia un poco por lo que lo he adaptado para tu código) espero que te sea de utilidad.

Este código lo que hace es controlar el caso que la url no esté bien escrita o que el metodo o clase no se encuentre. Lo que hace es extender de la clase control para poder acceder al método load_view y cargar la vista de página no encontrada.


<?php

class Core extends Control
{
    // indice[0] va ser igual al controlador
    // indice[1] va ser igual al metodo del controlador
    // indice[2] va ser igual a los parametros que iran como argumento en los metodos
    protected $controller;
    protected $method;
    protected $parameters = [];

    public function __construct()
    {
        $url = $this->getUrl();

        // Controller Load
        if (file_exists('../app/controllers/' . ucwords($url[0]) . '.php')) {
            $this->controller = ucwords($url[0]);
            unset($url[0]);

            require_once '../app/controllers/' . $this->controller . '.php';
            $this->controller = new $this->controller;
        } else {
            $this->load_view('404');
            exit;
        }

        // Method Load
        if (isset($url[1])) {
            if (method_exists($this->controller, $url[1])) {
                $this->method = $url[1];
                unset($url[1]);
            } else {
                $this->load_view('404');
                exit;
            }
        }

        // Parameters Load
        $this->parameters = $url ? array_values($url) : [];

        // Call
        call_user_func_array([$this->controller, $this->method], $this->parameters);
        //var_dump($this->parameters);
    }

    public function getUrl()
    {
        if (isset($_GET['url'])) {
            $url = rtrim($_GET['url'], '/');
            $url = filter_var($url, FILTER_SANITIZE_URL);
            $url = explode('/', $url);

            return $url;
        }
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions