Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Request

5/14
Recursos

Aportes 38

Preguntas 28

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para los qué usan XAMPP y no les sirve la redirección les dice: “¡Objeto no localizado!”, creen un archivo llamado .htaccess en la carpeta public y dentro de él coloquen lo siguiente:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

Luego reinicien XAMPP y ya les debería de funcionar.

Request


Siempre se emplea como namespace el directorio de la clase. No es obligatorio pero es lo más recomendable.

Los namespaces proporcionan una forma de agrupar clases, interfaces, funciones y constantes relacionadas.

<?php

namespace App\Http;

class Request {
    protected $segments = [];
    protected $controller;
    protected $method;

    public function __construct() {
        $this->segments = explode('/', $_SERVER['REQUEST_URI']);
        
        $this->setController();
        $this->setMethod();
    }

    public function setController() {
        $this->controller = empty($this->segments[1])
            ? 'home'
            : $this->segments[1];
    }

    public function setMethod() {
        $this->method = empty($this->segments[2])
            ? 'index'
            : $this->segments[2];
    }
}

Una forma rápida para levantar un servidor sin usar apache ni nginx, es usando php

1- Entrar por terminal a la carpeta public/
2- ejecutar php -S localhost:3000
3- Entrar a localhost:3000 en el navegador

El namespace es indispensable para el funcionamiento del autoload es de carácter obligatorio colocarlo, si se nos hace tedioso dar con el namespace correcto hay IDE’s como PHPStorm que los colocan por defecto y en VSCODE extensiones que nos lo facilita.

Me ha gustado la forma en que Italo ha llevado este curso.

El profesor explica muy bien las cosas.
.
Pero en esta clase se omitio aclarar que para el ejercicio se usa un virtual host, que apunta directamente a la carpeta publica.
.
Por otro lado aunque no es de competencia de este curso, haber hablado algo basico sobre el archivo .htaccess.
.

Y lo digo por experiencia con proyectos laravel, wordpress y vanilla PHP, esto hace la diferencia que tu tengas un desarrollo, funciona muy bien localmente y cuando lo pones en un servidor, se rompe porque el router no puede resolver las rutas.
.
Estas configuraciones siempre son un dolor de cabeza !!.

este curso me parece genial pero al probar el desarrollo en windows tengo problemas

A mi $_SERVER[‘REQUEST_URI’] me muestra toda la dirección absoluta del archivo, pero puedo usar $_SERVER[‘QUERY_STRING’].

Fatal error: Uncaught Error: Class ‘App\Http\Request’ not found in C:\xampp\htdocs\frameworks\public\index.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\frameworks\public\index.php on line 5

como puedo solucionar?

Me da este error al correr php -S localhost:8000 en la carpeta public

En mi caso, yo uso laragon para ejecutar php, asi que se me presentó el siguiente problema:

Para solucionarlo cree un documento llamado “.htaccess” en la carpeta public donde se encuentra el index.php, que es un archivo que nos ayuda hacer una configuración al servidor que según tengo entendido, le dice al servidor que active un modulo para poder hacer usar las variables por la URI del navegador.

<IfModule mod_rewrite.c>
RewriteEngine On  
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]  
RewriteRule ^ %1 [L,NE,R=302]   
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

Excelente clase Italo, es increíble he trabajado con CodeIgniter, Laravel pero jamás me había preocupado por ver a profundidad como se realizaba esto, definitivamente esto abre mi mente grandemente…

Reto realizado 🦾

Para los que tienen problemas para redireccionar desde la carpeta raíz a la carpeta public con .htaccess

Options All -Indexes
Options -MultiViews

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ public/index.php [QSA,L]

Hola, considero que el curso está muy básico al inicio , con faltantes importantes y luego se vuelve avanzado saltando pasos importantes. Por ejemplo, yo ya hice todo esto, pero al entrar al navegador me salen mis directorios tipo:
[PARENTDIR] Parent Directory -
[DIR] app/ 2022-03-18 11:30 -
[TXT] apuntes.php 2022-03-17 23:37 152
[ ] composer.json 2022-03-17 22:56 361
[DIR] public/ 2021-04-12 16:54 -
[DIR] vendor/ 2022-03-18 09:51 -
[DIR] views/ 2022-03-18 09:49 -
Y no veo lo que se ve en el curso al navegar porque al no haber index, despliega los archivos adentro

No solamente tenemos que configurar el request, si no tambien un archivo llamado .htaccess el cual nos ayudara a la redirección

REQUEST_URI se entiende asi:

http://midominio.com/una/url/cualquiera?bar=foo

el valor de $_SERVER[‘REQUEST_URI’]

una/url/cualquiera?bar=foo

Para los que usan XAMPP o LAMPP, y tienen el error de que no encuentra la clase Request, y ya intentaron de todo.
Lo que me funcionó, increíblemente fue en el archivo composer.json, verifiquen si tienen “psr-04”, y cambien por “psr-4”, sin el 0, luego en la terminal ejecutar nuevamente el comando composer dump

Por si alguien esta trabajando con nginx, esta es la configuración que use en el servidor

server {
    listen 0.0.0.0:80;
    root /var/www/html/public;
    location / {
        try_files index.php/ /index.php;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }
}

Súper me encanta me queda muy claro mi mente empieza a volar y creo que podria hacer consultar muy faciles como
products/show entiendo que cada / será un parametro pero me queda duda ¿qué pasa si quiero enviar valores por POST?

Tipo books/create y en post los valores?

Saludos.

Si no te ha funcionado la solucion de solo colocar el archivo “.htaccess”, prueba lo siguiente. (Cabe mencionar que el archivo .htaccess lo coloqué dentro de la carpeta public del curso para que funcionara correctamente, ya que es el punto de acceso)

En un entorno de desarrollo, sea XAMPP, WAMP, LAMP o Laragon, busca el archivo de configuración httpd.conf

Ahí encuentra todas las ocurrencias de “AllowOverride” y cambialas por “all”.

Reiniciamos Apache y eso debería funcionar

Si aún no funciona:

Busca “mod-rewrite” en el mismo archivo “httpd.conf”. Es un modulo con el que trabaja php para la re escritura de URL. Si la línea está comentada con un # al inicio, puedes borrarlo.

ahora en el .htaccess encuerra las instrucciones dentro de las etiquetas :

<IfModule mode_rewrite.c>

</IfModule>

----- Si tienes activado un virtual Host —

Si tenemos un “virtual host” (visto en cursos pasados) podemos revisar en la carpeta “apache2” y buscar dentro la carpeta “sites-enabled”. En el caso de Laragon, crea archivos de configuración para cada virtual host de forma autómatica, por lo que puede que nuestro virtualhost esté ya configurado.

Si no es el caso podemos copiar y pegar un archivo de los ya existentes, renombrandolo apropiadamente y cambiando la configuración del mismo, como la ruta de la carpeta y el nombre del sition.

Listo el Reto, mi error era que coloque las clases Request y Response dentro de la carpeta controllers que esta dentro de Http y no directamente ahí

Lo que ocupó el profe es un operador ternario.

http_response_code(403);
echo('Acceso denegado,serás redireccionado');
header('refresh:5,url=./public/index.php');

Si quieres que tu proyecto se vea más nice, puedes usar este código. Este debe estar en la carpeta raíz.

para quien tenga el error "Not Found", debe agregar un archivo .htaccess en la misma carpeta del index.php, con el siguiente contenido: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L]

hay un curso espefico para manejar esto de htaccess

Archivo Request.php

<?php

namespace App\Http;

class Request
{
    protected $segments = [];
    protected $controller;
    protected $method;

    public function __construct()
    {
        //iframeworks.test/
        $this->segments = explode('/',$_SERVER['REQUEST_URI']);

        $this->setController();
        $this->setMethod();
    }

    public function setController()
    {
        $this->controller = empty($this->segments[1])
            ? 'home'
            : $this->segments[1] ;
    }

    public function setMethod()
    {
        $this->method = empty($this->segments[2])
            ? 'index'
            : $this->segments[2] ;
    }
}

Excelente

En una entrevista de trabajo una de las preguntas fue: ¿Cómo creas tu propio Framework MVC? La verdad nunca había reparado en pensar en eso, y la respuesta que en ese momento se me ocurrió no convenció al entrevistador, por lo que después me preguntó: ¿Cómo resuelves el enrutamiento? … De haber encontrado este curso antes, responder esa pregunta habría sido mucho más sencillo!

Me parece mas fácil escribir esto

public function setController(): void
    {
        $this->controller = $this->segments[1] ?? 'home';
    }

“Hacemos referencia al procesamiento en cuanto a la petición”

Si se han equivocado como yo. Fijense muy bien si han escrito la palabra "“Request” correctamente y no Resquest como yo hice uwu

No estoy muy de acuerdo con esa forma de colocar el operador ternario me parece difícil de leer, estuve buscando alternativas en psr-12 y tampoco encontré algo al respecto, pero entiendo la necesidad de recortar el largo de la línea así que opté por hacer lo siguiente

public function setController()
    {
        $ControllerIsRequested = !empty($this->segments[1]);
        $this->controller = $ControllerIsRequested ? $this->segments[1] : "home";
    }

    public function setMethod()
    {
        $methodIsRequested = isset($this->segments[2]) && !empty($this->segments[2]);
        $this->method = $methodIsRequested ? $this->segments[2] : "index";
    }

Para los que estén usando Nginx y no les funciona el enrutamiento, deben hacer que el host siempre apunte al index.php y eso se lo consigue modificando el archivo del host, en mi caso la configuración queda de esta forma:

server {
	listen 80;
	listen [::]:80;

	server_name frameworksphp.com;

	root /var/www/frameworksPhp/public;
	index index.html index.php;

	location / {
		try_files $uri /index.php$is_args$args;
	}
	location ~ \.php$ {
        	include snippets/fastcgi-php.conf;
        	fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
     	}

    	location ~ /\.ht {
        	deny all;
    	}
}

Me fue un poco complicado entenderlo pero creo que al final quedó

Uso Php con Nginx y me sale “404 Not Found” ¿que debería configurar?