Introducción a PHP

1

¡Actualizamos este curso!

2

Lo que aprenderás sobre PHP

3

¿Qué es PHP?

4

Setup y Herramientas

Conceptos Básicos de PHP

5

Sintaxis de PHP

6

Revisando el template que usaremos

7

Variables tipos de datos y cadenas

8

Tipos de Datos en PHP

9

Arreglos

10

Condicionales y Ciclos

11

Ejercicios Arreglos

12

While vs. Do While

13

Operadores, Condicionales, Continue y Break

14

Operadores

15

Ejercicios Operadores

16

Funciones

17

Agregando archivos externos

Programación Orientada a Objetos

18

Programación Orientada a Objetos

19

Constructor y Métodos

20

Herencia

21

Herencia y polimorfismo

22

Interfaces

23

Namespaces

Herramientas para Proyectos PHP

24

PSR y PHPFIG

25

Composer

Bases de Datos

26

Introducción a las Bases de Datos

27

ORM

28

Formularios

29

Eloquent

30

Listar registros de la base de datos con Eloquent

31

Insertar datos en MySql con PHP

Estructura/Arquitectura de una applicacion web

32

Front Controller

33

PSR7

34

Router

35

MVC, Creando Controllers

36

MVC Reestructurando Vistas y Controladores

37

MVC Controller de la entidad Job

Template engines

38

Template engines

39

Twig

40

Templates con Twig

41

Extendiendo Templates con Twig

Validaciones

42

Validaciones

Subida de archivos

43

Ejemplo de subida de archivos

44

Tips de seguridad para subir archivos en PHP

Autenticación de usuarios y manejo de sesiones

45

Reto. Creación de usuarios

46

Autenticando usuarios

47

Formulario de Login

48

Manejo de sesiones

Liberación de código/release

49

Variables de entorno

50

Deploy en Heroku

51

Instalación de pgAdmin

52

Creando la base de datos en Heroku

53

Conclusiones del curso

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

MVC Controller de la entidad Job

37/53
Recursos

Cuando enviamos parámetros en POST no lo hacemos en la url sino que lo hacemos dentro del cuerpo de código.

Ahora ya tenemos organizado todo en controladores, vistas y modelos además de estár implementados los estandares PSR4 y PSR7. Nuestro proyecto va avanzando muy bien.

Aportes 39

Preguntas 7

Ordenar por:

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

si al momento de meter datos al formulario los manda a una pagina que dice objeto no localizado (error 404), es porque su proyecto lo tienen dentro de una carapeta de htdocs. Lo que tienen que hacer es en el archivo addJob.php en la linea del form action colocar : “/nombre de su carpeta/jobs/add”

No se rindan, si están pensando en abandonar, continúen viendo los videos!!, y luego vuelven y los ven para practicar. Continúen y no desistan que finalmente se logra el aprendizaje y es muy valioso y satisfactorio. Se los dice alguien que estuvo a punto de abandonar porque no sabia como continuar. Feliz día!

A tener en cuenta:
var_dump($request->getMethod());
Sería lo mismo que:
var_dump($_SERVER[‘REQUEST_METHOD’]);
Sin el uso de Diactoros

van dos veces que me veo este curso y cada vez le entiendo mejor a PHP, muchas gracias profe 😄 😄

Esto se parece mucho a express de Node.js

A pesar de que el curso no me termina de convencer, estas 3 ultimas clases estan bastante mejor. Que algunas de las anteriores te hacias un lio facilmente.

PSR7 ❤️

chicos no me deja guardar datos de dice no route, me pueden ayudar?

Este es mi archivo JobsController.php se encuentra en htdocs->app->Controllers

<
<?php

namespace App\Controllers;

use App\Models\Job;

class JobsController{
	public function getAddJobAction($request){
		if($request->getMethod()=='POST'){
			$postData = $request->getParsedBody;
			$job = new Job();
			$job->title = $_POST['title'];
			$job->description = $_POST['description'];
			$job->save();
		}

		include '../views/addJob.php';
	}
} 

>

Este es mi archivo index.php htdocs->public

<
<?php

ini_set('display_errors', 1);
ini_set('display_starup_error',1);
error_reporting(E_ALL);

require_once '../vendor/autoload.php';

use Illuminate\Database\Capsule\Manager as Capsule;
use Aura\Router\RouterContainer;

$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'cursophp',
    'username'  => 'root',
    'password'  => '1584515',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]);

$capsule->setAsGlobal();

$capsule->bootEloquent();


$request = Zend\Diactoros\ServerRequestFactory::fromGlobals(
    $_SERVER,
    $_GET,
    $_POST,
    $_COOKIE,
    $_FILES
);

$routerContainer = new RouterContainer();
$map = $routerContainer->getMap();
$map->get('index', '/',[
    'controller' => 'App\Controllers\IndexController',
    'action' => 'indexAction'
]);
$map->get('addJobs', '/jobs/add',[
    'controller' => 'App\Controllers\JobsController',
    'action' => 'getAddJobAction'
]);
$map->post('saveJobs', '../jobs/add',[
    'controller' => 'App\Controllers\JobsController',
    'action' => 'getAddJobAction'
]);


$matcher = $routerContainer->getMatcher();
$route = $matcher->match($request);

function printElement($job) {
    // if($job->visible == false) {
    //   return;
    // }
  
    echo '<li class="work-position">';
    echo '<h5>' . $job->title . '</h5>';
    echo '<p>' . $job->description. '</p>';
    echo '<p>' . $job->getDurationAsString() . '</p>';
    echo '<strong>Achievements:</strong>';
    echo '<ul>';
    echo '<li>Lorem ipsum dolor sit amet, 80% consectetuer adipiscing elit.</li>';
    echo '<li>Lorem ipsum dolor sit amet, 80% consectetuer adipiscing elit.</li>';
    echo '<li>Lorem ipsum dolor sit amet, 80% consectetuer adipiscing elit.</li>';
    echo '</ul>';
    echo '</li>';
  }


if(!$route){
    echo 'No route';
}else{
    $handlerData = $route->handler;
    $controllerName = $handlerData['controller'];
    $actionName = $handlerData['action'];
    $controller = new $controllerName;
    $controller->$actionName($request);
}

>

este esmi archivo addJob.php se encuentra en htdocs

<
<html>
	<head>
		<title>Add Job</title>
		<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B"
    	crossorigin="anonymous">
  		<link rel="stylesheet" href="style.css">
	</head>
	<body>
		<form action="../jobs/add" method="post">
			<h1>Add Job</h1>
			<label for="">Title:</label>
			<input type="text" name="title"><br>
			<label for="">Description:</label>
			<input type="text" name="description"><br>
			<button type="submit">Save</button>
		</form>
	</body>
</html>
>

`

Rayos, hasta esta clase se responde a mi duda del famoso metodo getParsedBody, buscando como loco de donde lo sacó, y me vego a enterar que es un estandar de psr7, y yo buscando en la documentacion de aura router jajaja

Ussh una clase bastante fuerte, empaquetando todo lo que es el MVC y convirtiendo el proyecto a este tipo de modelo.

SI tienen algún problema con windows para el tema de las rutas, les recomiendo que creen una maquina virtual, dejo enlace de como hacerlo:

https://www.cloudways.com/blog/configure-virtual-host-on-windows-10-for-wordpress/

Seria bueno una clase bonus o un curso de como hacer un sitio wen empleando mvc en php vanilla

¿tienen planeado hacer uno?

No se porque pero me funciono colocándole en el action del formulario solo el “add” no el “jobs/add”

<form method="post" action="add">

Considero que el curso se podría explicar de mejor forma. He aprendido mucho, pero me deja muchos espacios por aprender.

muy buenas como hago para llamar una funcion de la bd directamente de PHP?

Cap #36: Path to save Job

Cuando se envían parámetros mediante un post es el mismo formato que un get con la diferencia de que los parámetros son enviados en el cuerpo del mensaje.

Tengo problemas con los estilos, no cargan, uso XAMPP y ni las imagenes, estilos o js cargan, alguien sabe como arreglarlo?

vemos como la libreria aura route, nos permite crear rutas que responden a peticiones por get y post, ademas de tener soporte para los otros tipos de peticiones http.

No route me muestra, no me funciona el $map->post 😦

Tengo un problema, escribo los valores en el form pero no los captura $_POST ni el getParsedBody();

A alguien le ha pasado este problema?.

he visto que zendframework/zend-diactoros esta en desuso no se si puede ser por eso que no me funcione el código por favor alguien que aya llegado hasta aquí, le funciona correctamente¿?

SE VAN ENLALZANDO ARCHIVOS DE CODIGOS A TRAVES DE ESTA TECNICA…

Hasta donde entiendo, los modelos serían el lugar donde definimos las clas y funciones, el cómo funciona cada cosa, y el controlador sería algo como el lugar donde se ejecutan dichas funciones ?

Cuando enviamos parámetros en POST no lo hacemos en la url sino que lo hacemos dentro del cuerpo de código.

Ahora ya tenemos organizado todo en controladores, vistas y modelos además de estár implementados los estandares PSR4 y PSR7. Nuestro proyecto va avanzando muy bien

Cree otro método llamado createJob que maneja la petición post y la creación del job.

namespace App\Controllers;
use App\Models\Job;

class JobsController{

  public function getJobsForm(){

    include('../views/addJob.php');

  }

  public function createJob($request){
    $jobData = $request->getParsedBody();
    $job = new Job();
    $job->title = $jobData['title'];
    $job->description = $jobData['description'];
    $job->visible = true;
    $job->months = $jobData['months'];
    $job->save();
  }

}

Muy bien esta clase es buena para entender la distribución del MVC

Excelente!

EXELENTE!
SIgan siempre actualizando la parte de los projects que te obliga a repasar todo lo hecho y te deja un concepto mucho mas claro!

como hace para comentar varias lineas a la vez ?

Super claro 😃 muchas gracias!

Para encontrar palabras en la página : D

si alguno ha llegado aquí sin errores, es el sujeto

Por fin paso a Template Engines =)

Excelente clase! Me parece muy curioso ver como todo vuelve a funcionar despues de destrozar y reorganizar todo jaja

Genial! No sabía que POST llegaba en el mismo formato que GET

Entonces es importante recordar que getBody nos deja el raw string y getParsedBody ya nos lo da en forma de arreglo!

is platzi built in react.js? I would like to know 😃