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 37

Preguntas 26

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Para los qu茅 usan XAMPP y no les sirve la redirecci贸n les dice: 鈥溌bjeto 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鈥檚 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.

Fatal error: Uncaught Error: Class 鈥楢pp\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?

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

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鈥

A mi $_SERVER[鈥楻EQUEST_URI鈥橾 me muestra toda la direcci贸n absoluta del archivo, pero puedo usar $_SERVER[鈥楺UERY_STRING鈥橾.

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

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

REQUEST_URI se entiende asi:

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

el valor de $_SERVER[鈥楻EQUEST_URI鈥橾

una/url/cualquiera?bar=foo

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?

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>

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 鈥淎llowOverride鈥 y cambialas por 鈥渁ll鈥.

Reiniciamos Apache y eso deber铆a funcionar

Si a煤n no funciona:

Busca 鈥渕od-rewrite鈥 en el mismo archivo 鈥渉ttpd.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 鈥渧irtual host鈥 (visto en cursos pasados) podemos revisar en la carpeta 鈥渁pache2鈥 y buscar dentro la carpeta 鈥渟ites-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';
    }

鈥淗acemos referencia al procesamiento en cuanto a la petici贸n鈥

Si se han equivocado como yo. Fijense muy bien si han escrito la palabra "鈥淩equest鈥 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?