Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

9
19/2/2015 Ejemplo PHP + POO + MVC Victor Robles | Victor Robles http://victorroblesweb.es/2014/07/15/ejemplophppoomvc/ 1/9 Inicio Desarrollo web » Sistemas » Sobre mi Portafolio Contacto Seguro que algunos que hayan leído o visto algunos de los tutoriales o ejemplos que pongo sobre programación en PHP con y sin frameworks, pueden no estar de acuerdo conmigo en ciertos detalles, o incluso estar pensando “este chico no está programando verdaderamente orientado a objetos” o “no sigue el paradigma a rajatabla” (todo lo que explico lo hago desde mi punto de vista actual, nunca digo que sea la verdad absoluta o lo más correcto siempre). Pues bien hoy voy a poner un ejemplo muy bueno de como programar realmente orientado a objetos en PHP puro con MVC. Lo que voy a mostrar hoy perfectamente podría ser la base para construirnos un pequeño framework propio, veremos incluso como hacer un controlador frontal, como crear objetos que representen entidades de la base de datos, etc, por lo tanto lo que voy a enseñar hoy es un ejemplo muy didáctico y muy completo. Estructura de directorios En nuestro “framework” tendremos varios directorios: config: aquí irán los ficheros de configuración de la base de datos, globales, etc. controller: como sabemos en la arquitectura MVC los controladores se encargarán de recibir y filtrar datos que le llegan de las vistas, llamar a los modelos y pasar los datos de estos a las vistas. Pues en este directorio colocaremos los controladores core: aquí colocaremos las clases base de las que heredarán por ejemplo controladores y modelos, y también podríamos colocar más librerías hechas por nosotros o por terceros, esto sería el núcleo del framework. model: aquí irán los modelos, para ser fieles al paradigma orientado objetos tenemos que tener una clase por cada tabla o entidad de la base de datos(excepto para las tablas pivote) y estas clases servirán para crear objetos de ese tipo de entidad(por ejemplo crear un objeto usuario para crear un usuario en la BD). También tendremos modelos de consulta a la BD que contendrán consultas más complejas que estén relacionadas con una o varias entidades. view: aquí iran las vistas, es decir, donde se imprimirán los datos y lo que verá el usuario. index.php será el controlador frontal por el que pasará absolutamente todo en la aplicación. Crear ficheros de configuración En el directorio config, crearemos un fichero database.php en el que irá la configuración de la base de datos. Este devuelve un array que posteriormente utilizaremos. También podemos crearnos un fichero gobal.php en el que irán constantes que luego nos servirán por ejemplo para establecer controladores y acciones por defecto (y todo lo que queramos meterle). Inicio Desarrollo web Ejemplo PHP + POO + MVC 0 4 2 Like 1 <?php 2 return array( 3 "driver" =>"mysql", 4 "host" =>"localhost", 5 "user" =>"root", 6 "pass" =>"", 7 "database" =>"pruebas", 8 "charset" =>"utf8" 9 ); 10 ?> 1 <?php 2 define("CONTROLADOR_DEFECTO", "Usuarios"); 3 define("ACCION_DEFECTO", "index"); 4 //Más constantes de configuración 5 ?> Buscar Buscador Quizás te interese Nuevo Popular Aleatorio Patrones y búsquedas en Linux feb 17, 2015 Comandos para filtrar en Linux feb 10, 2015 Dispositivos de almacenamiento en Linux feb 3, 2015 Código del ejemplo de creación de un blog con Symfony2 ene 29, 2015 Seguro que te gustará Ejemplo PHP + POO + MVC

description

Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

Transcript of Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

Page 1: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 19

Inicio Desarrollo web raquo Sistemas raquo Sobre mi Portafolio Contacto

Seguro que algunos que hayan leiacutedo o visto algunos de los tutoriales o ejemplos que pongo sobre programacioacutenen PHP con y sin frameworks pueden no estar de acuerdo conmigo en ciertos detalles o incluso estarpensando ldquoeste chico no estaacute programando verdaderamente orientado a objetosrdquo o ldquono sigue el paradigma arajatablardquo (todo lo que explico lo hago desde mi punto de vista actual nunca digo que sea la verdad absoluta olo maacutes correcto siempre)

Pues bien hoy voy a poner un ejemplo muy bueno de como programar realmente orientado a objetos en PHPpuro con MVC Lo que voy a mostrar hoy perfectamente podriacutea ser la base para construirnos un pequentildeoframework propio veremos incluso como hacer un controlador frontal como crear objetos que representenentidades de la base de datos etc por lo tanto lo que voy a ensentildear hoy es un ejemplo muy didaacutectico y muycompleto

Estructura de directorios

En nuestro ldquoframeworkrdquo tendremos varios directorios

config aquiacute iraacuten los ficheros de configuracioacuten de la base de datos globalesetccontroller como sabemos en la arquitectura MVC los controladores seencargaraacuten de recibir y filtrar datos que le llegan de las vistas llamar a losmodelos y pasar los datos de estos a las vistas Pues en este directoriocolocaremos los controladorescore aquiacute colocaremos las clases base de las que heredaraacuten por ejemplocontroladores y modelos y tambieacuten podriacuteamos colocar maacutes libreriacuteas hechaspor nosotros o por terceros esto seriacutea el nuacutecleo del frameworkmodel aquiacute iraacuten los modelos para ser fieles al paradigma orientado objetostenemos que tener una clase por cada tabla o entidad de la base dedatos(excepto para las tablas pivote) y estas clases serviraacuten para crear objetosde ese tipo de entidad(por ejemplo crear un objeto usuario para crear un

usuario en la BD) Tambieacuten tendremos modelos de consulta a la BD que contendraacuten consultas maacutes complejasque esteacuten relacionadas con una o varias entidadesview aquiacute iran las vistas es decir donde se imprimiraacuten los datos y lo que veraacute el usuarioindexphp seraacute el controlador frontal por el que pasaraacute absolutamente todo en la aplicacioacuten

Crear ficheros de configuracioacuten

En el directorio config crearemos un fichero databasephp en el que iraacute la configuracioacuten de la base de datosEste devuelve un array que posteriormente utilizaremos

Tambieacuten podemos crearnos un fichero gobalphp en el que iraacuten constantes que luego nos serviraacuten por ejemplopara establecer controladores y acciones por defecto (y todo lo que queramos meterle)

Inicio Desarrollo web Ejemplo PHP + POO + MVC

04 2Like

1 ltphp2 return array(3 driver =gtmysql4 host =gtlocalhost5 user =gtroot6 pass =gt7 database =gtpruebas8 charset =gtutf89 )10 gt

1 ltphp2 define(CONTROLADOR_DEFECTO Usuarios)3 define(ACCION_DEFECTO index)4 Maacutes constantes de configuracioacuten5 gt

Buscar

Buscador

Quizaacutes te interese

Nuevo Popular Aleatorio

Patrones ybuacutesquedas enLinuxfeb 17 2015

Comandos parafiltrar en Linuxfeb 10 2015

Dispositivos dealmacenamientoen Linuxfeb 3 2015

Coacutedigo delejemplo decreacioacuten de unblog conSymfony2ene 29 2015

Seguro que te gustaraacute

Ejemplo PHP + POO + MVC

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 29

Crear las clases del nuacutecleo

Primero crearemos la clase Conectar que nos serviraacute para conectarnos a la base de datos utilizando el driverMySQLi que es el maacutes raacutepido aunque muchos por ahiacute recomienden PDO y tambieacuten nos serviraacute para conectar ala base de datos un constructor de consultas que he incluido en el proyecto llamado Fluent Query Builder (elque utiliza Laravel)

Seguimos creando el fichero EntidadBasephp de esta clase heredaraacuten los modelos que representen entidadesen el constructor le pasaremos el nombre de la tabla y tendremos tantos meacutetodos como queramos paraayudarnos con las peticiones a la BD a traveacutes de los objetos que iremos creando Lo bueno que tiene es queestos meacutetodos pueden ser reutilizados en otras clases ya que le indicamos la tabla en el constructor

1 ltphp2 class Conectar3 private $driver4 private $host $user $pass $database $charset5 6 public function __construct() 7 $db_cfg = require_once configdatabasephp8 $this‐gtdriver=$db_cfg[driver]9 $this‐gthost=$db_cfg[host]10 $this‐gtuser=$db_cfg[user]11 $this‐gtpass=$db_cfg[pass]12 $this‐gtdatabase=$db_cfg[database]13 $this‐gtcharset=$db_cfg[charset]14 15 16 public function conexion()17 18 if($this‐gtdriver==mysql || $this‐gtdriver==null)19 $con=new mysqli($this‐gthost $this‐gtuser $this‐gtpass $this‐gtdatabase)20 $con‐gtquery(SET NAMES $this‐gtcharset)21 22 23 return $con24 25 26 public function startFluent()27 require_once FluentPDOFluentPDOphp28 29 if($this‐gtdriver==mysql || $this‐gtdriver==null)30 $pdo = new PDO($this‐gtdriverdbname=$this‐gtdatabase $this‐gtuser

$this‐gtpass)31 $fpdo = new FluentPDO($pdo)32 33 34 return $fpdo35 36 37 gt

1 ltphp2 class EntidadBase3 private $table4 private $db5 private $conectar6 7 public function __construct($table) 8 $this‐gttable=(string) $table9 10 require_once Conectarphp11 $this‐gtconectar=new Conectar()12 $this‐gtdb=$this‐gtconectar‐gtconexion()13 14 15 public function getConetar()16 return $this‐gtconectar

17 18 19 public function db()20 return $this‐gtdb21 22 23 public function getAll()24 $query=$this‐gtdb‐gtquery(SELECT FROM $this‐gttable ORDER BY id DESC)25 26 Devolvemos el resultset en forma de array de objetos27 while ($row = $query‐gtfetch_object()) 28 $resultSet[]=$row29 30 31 return $resultSet32 33 34 public function getById($id)35 $query=$this‐gtdb‐gtquery(SELECT FROM $this‐gttable WHERE id=$id)36 37 if($row = $query‐gtfetch_object()) 38 $resultSet=$row39 40 41 return $resultSet42 43 44 public function getBy($column$value)45 $query=$this‐gtdb‐gtquery(SELECT FROM $this‐gttable WHERE $column=$value)46 47 while($row = $query‐gtfetch_object()) 48 $resultSet[]=$row49 50 51 return $resultSet

Categoriacuteas

Desarrollo web (102)

Codeigniter (4)

PHP (96)

Symfony2 (33)

Yii Framework (20)

Zend Framework 2 (32)

Sin categoriacutea (1)

Sistemas (34)

Hardware (3)

Linux (29)

Windows (10)

Esto mola

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 39

Ahora crearemos la clase ModeloBase que heredaraacute de la clase EntidadBase y a su vez seraacute heredada por losmodelos de consultas La clase ModeloBase permitiraacute utilizar el constructor de consultas que hemos incluido ytambieacuten los meacutetodos de EntidadBase asiacute como otros meacutetodos que programemos dentro de la clase porejemplo yo tengo un meacutetodo para ejecutar consultas sql que directamente me devuelve el resultset en un arrayde objetos preparado para pasaacuterselo a una vista podriacuteamos tener cientos para diferentes cosas

La siguiente clase que crearemos es ControladoresBase de la cual heredaraacuten los controladores esta clase cargaEntidadesBase ModelosBase y todos los modelos creados dentro del directorio model

51 return $resultSet52 53 54 public function deleteById($id)55 $query=$this‐gtdb‐gtquery(DELETE FROM $this‐gttable WHERE id=$id)56 return $query57 58 59 public function deleteBy($column$value)60 $query=$this‐gtdb‐gtquery(DELETE FROM $this‐gttable WHERE $column=$value)61 return $query

62 63 64 65 66 Aquiacute podemos montarnos un montoacuten de meacutetodos que nos ayuden67 a hacer operaciones con la base de datos de la entidad68 69 70 71 gt

1 ltphp2 class ModeloBase extends EntidadBase3 private $table4 private $fluent5 6 public function __construct($table) 7 $this‐gttable=(string) $table8 parent__construct($table)9 10 $this‐gtfluent=$this‐gtgetConetar()‐gtstartFluent()11 12 13 public function fluent()14 return $this‐gtfluent15 16 17 public function ejecutarSql($query)18 $query=$this‐gtdb()‐gtquery($query)19 if($query==true)20 if($query‐gtnum_rowsgt1)21 while($row = $query‐gtfetch_object()) 22 $resultSet[]=$row23 24 elseif($query‐gtnum_rows==1)25 if($row = $query‐gtfetch_object()) 26 $resultSet=$row27 28 else29 $resultSet=true30 31 else32 $resultSet=false33 34 35 return $resultSet36 37 38 Aqui podemos montarnos meacutetodos para los modelos de consulta39 40 41 gt

1 ltphp2 class ControladorBase3 4 public function __construct() 5 require_once EntidadBasephp6 require_once ModeloBasephp7 8 Incluir todos los modelos9 foreach(glob(modelphp) as $file)10 require_once $file11 12 13 14 Plugins y funcionalidades15 16 17 Este meacutetodo lo que hace es recibir los datos del controlador en forma de array18 los recorre y crea una variable dinaacutemica con el indice asociativo y le da el19 valor que contiene dicha posicioacuten del array luego carga los helpers para las20 vistas y carga la vista que le llega como paraacutemetro En resumen un meacutetodo para21 renderizar vistas22 23 public function view($vista$datos)24 foreach ($datos as $id_assoc =gt $valor) 25 $$id_assoc=$valor26 27 28 require_once coreAyudaVistasphp29 $helper=new AyudaVistas()30 31 require_once view$vistaViewphp32

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 49

Ahora crearemos la clase AyudaVistas que puede contener diversos helpers (pequentildeos meacutetodos que nosayuden en pequentildeas tareas dentro de las vistas)

Ahora crearemos el fichero ControladorFrontalfuncphp que tiene las funciones que se encargan de cargar uncontrolador u otro y una accioacuten u otra en funcioacuten de lo que se le diga por la url

El controlador frontal indexphp

El controlador frontal es donde se cargan todos los ficheros de la aplicacioacuten y por tanto la uacutenica pagiacutena quevisita el usuario realmente es esta en este caso indexphp

Modelos y objetos

Si queremos seguir el paradigma de la programacioacuten orientada a objetos teoacutericamente deberiacuteamos tener unaclase por cada tabla de la base de datos(excepto tablas pivote) que haga referencia a un objeto de la vida realen este caso el objeto que creariacuteamos seria ldquoUsuariordquo y el usuario tendriacutea un nombre un apellido un email etcpues bien eso serian los atributos del objeto y tendriacuteamos un meacutetodo get y set por cada atributo que serviraacutenpara establecer el valor de las propiedades y para conseguir el valor de cada atributo Esta clase hereda deEntidadesBase y tiene un meacutetodo save para guardar el usuario en la base de datos podriacuteamos tener otromeacutetodo update que seria similar etc

Y te preguntaraacutes iquestpor que no lo haces asiacute siempre la respuesta es simple en algunos proyectos en los que haymuchas tablas puede ser engorroso estar creando una clase por cada tabla solamente para tener un insert y unupdate(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto y

32 33 34 public function redirect($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)35 header(Locationindexphpcontroller=$controladorampaction=$accion)36 37 38 Meacutetodos para los controladores39 40 41 gt

1 ltphp2 class AyudaVistas3 4 public function url($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)5 $urlString=indexphpcontroller=$controladorampaction=$accion6 return $urlString7 8 9 Helpers para las vistas10 11 gt

1 ltphp2 FUNCIONES PARA EL CONTROLADOR FRONTAL3 4 function cargarControlador($controller)5 $controlador=ucwords($controller)Controller6 $strFileController=controller$controladorphp7 8 if(is_file($strFileController))9 $strFileController=controllerucwords(CONTROLADOR_DEFECTO)Controllerphp 10 11 12 require_once $strFileController13 $controllerObj=new $controlador()14 return $controllerObj15 16 17 function cargarAccion($controllerObj$action)18 $accion=$action19 $controllerObj‐gt$accion()20 21 22 function lanzarAccion($controllerObj)23 if(isset($_GET[action]) ampamp method_exists($controllerObj $_GET[action]))24 cargarAccion($controllerObj $_GET[action])25 else26 cargarAccion($controllerObj ACCION_DEFECTO)27 28 29 30 gt

1 ltphp2 Configuracioacuten global3 require_once configglobalphp

4 5 Base para los controladores6 require_once coreControladorBasephp7 8 Funciones para el controlador frontal9 require_once coreControladorFrontalfuncphp10 11 Cargamos controladores y acciones12 if(isset($_GET[controller]))13 $controllerObj=cargarControlador($_GET[controller])14 lanzarAccion($controllerObj)15 else16 $controllerObj=cargarControlador(CONTROLADOR_DEFECTO)17 lanzarAccion($controllerObj)18 19 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 59

update(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto ydirectamente creo modelos de consultas en los que tengo meacutetodos que interaccionan con una tablamayoritariamente o varias seguacuten las relaciones que tengan por otra parte algunos frameworks cuentan conORMs que nos ayudan con todo esto pero de igual forma cuando tienes muchas tablas relacionadas quizaacute eluso del ORM sin controlarlo muy bien puede dificultar la tarea en cualquier caso lo maacutes correcto es tener unaclase por entidad aunque a veces no sea lo maacutes practico o coacutemodo

Truco si usas NetBeans puedes generar los getters y setters desde el menuacute Source -gt Insert Code

Aquiacute pondriacuteamos las consultas completas en lugar de utilizar los meacutetodos que tenemos en el modelo deentidad aunque tambieacuten estariacutean accesibles desde este modelo

Los controladores

Los crearemos en el directorio controller en este caso tengo creado UsuariosController

1 ltphp2 class Usuario extends EntidadBase3 private $id4 private $nombre5 private $apellido6 private $email7 private $password8 9 public function __construct() 10 $table=usuarios

11 parent__construct($table)12 13 14 public function getId() 15 return $this‐gtid16 17 18 public function setId($id) 19 $this‐gtid = $id20 21 22 public function getNombre() 23 return $this‐gtnombre24 25 26 public function setNombre($nombre) 27 $this‐gtnombre = $nombre28 29 30 public function getApellido() 31 return $this‐gtapellido32 33 34 public function setApellido($apellido) 35 $this‐gtapellido = $apellido36 37 38 public function getEmail() 39 return $this‐gtemail40 41 42 public function setEmail($email) 43 $this‐gtemail = $email44 45 46 public function getPassword() 47 return $this‐gtpassword48 49 50 public function setPassword($password) 51 $this‐gtpassword = $password52 53 54 public function save()55 $query=INSERT INTO usuarios (idnombreapellidoemailpassword)56 VALUES(NULL57 $this‐gtnombre58 $this‐gtapellido59 $this‐gtemail60 $this‐gtpassword)61 $save=$this‐gtdb()‐gtquery($query)62 $this‐gtdb()‐gterror63 return $save64 65 66 67 gt

1 ltphp2 class UsuariosModel extends ModeloBase3 private $table4 5 public function __construct()6 $this‐gttable=usuarios7 parent__construct($this‐gttable)8 9 10 Metodos de consulta11 public function getUnUsuario()12 $query=SELECT FROM usuarios WHERE email=victorvictorcom13 $usuario=$this‐gtejecutarSql($query)14 return $usuario15 16 17 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 69

Las vistas

En este caso tengo la vista indexViewphp creada

1 ltphp2 class UsuariosController extends ControladorBase3 4 public function __construct()

5 parent__construct()6 7 8 public function index()9 10 Creamos el objeto usuario11 $usuario=new Usuario()12 13 Conseguimos todos los usuarios14 $allusers=$usuario‐gtgetAll()15 16 Cargamos la vista index y le pasamos valores17 $this‐gtview(indexarray(18 allusers=gt$allusers19 Hola =gtSoy Viacutector Robles20 ))21 22 23 public function crear()24 if(isset($_POST[nombre]))25 26 Creamos un usuario27 $usuario=new Usuario()28 $usuario‐gtsetNombre($_POST[nombre])29 $usuario‐gtsetApellido($_POST[apellido])30 $usuario‐gtsetEmail($_POST[email])31 $usuario‐gtsetPassword(sha1($_POST[password]))32 $save=$usuario‐gtsave()33 34 $this‐gtredirect(Usuarios index)35 36 37 public function borrar()38 if(isset($_GET[id]))39 $id=(int)$_GET[id]40 41 $usuario=new Usuario()42 $usuario‐gtdeleteById($id)43 44 $this‐gtredirect()45 46 47 48 public function hola()49 $usuarios=new UsuariosModel()50 $usu=$usuarios‐gtgetUnUsuario()51 var_dump($usu)52 53 54 55 gt

1 ltDOCTYPE HTMLgt2 lthtml lang=esgt3 ltheadgt4 ltmeta charset=utf‐8gt5 lttitlegtEjemplo PHP MySQLi POO MVClttitlegt6 ltlink href=maxcdnbootstrapcdncombootstrap320cssbootstrapmincss

rel=stylesheet type=textcss gt7 ltscript type=textjavascript

src=maxcdnbootstrapcdncombootstrap320jsbootstrapminjsgtltscriptgt8 ltscript type=textjavascript

src=ajaxgoogleapiscomajaxlibsjquery1111jqueryminjsgtltscriptgt9 ltstylegt10 input11 margin‐top5px12 margin‐bottom5px13 14 right15 floatright16 17 ltstylegt18 ltheadgt19 ltbodygt20 ltform action=ltphp echo $helper‐gturl(usuarioscrear) gt method=post

class=col‐lg‐5gt

21 lth3gtAntildeadir usuariolth3gt22 lthrgt23 Nombre ltinput type=text name=nombre class=form‐controlgt24 Apellido ltinput type=text name=apellido class=form‐controlgt25 Email ltinput type=text name=email class=form‐controlgt26 Contrasentildea ltinput type=password name=password class=form‐controlgt27 ltinput type=submit value=enviar class=btn btn‐successgt28 ltformgt29 30 ltdiv class=col‐lg‐7gt31 lth3gtUsuarioslth3gt32 lthrgt33 ltdivgt34 ltsection class=col‐lg‐7 usuario style=height400pxoverflow‐yscrollgt35 ltphp foreach($allusers as $user) recorremos el array de objetos y

obtenemos el valor de las propiedades gt36 ltphp echo $user‐gtid gt ‐37 ltphp echo $user‐gtnombre gt ‐38 ltphp echo $user‐gtapellido gt ‐39 ltphp echo $user‐gtemail gt40 ltdiv class=rightgt41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphp

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 79

El resultado ldquofinalrdquo estaacute cargando el controlador y accioacuten por defecto

Para acceder a otros controladores y acciones por la url

Este ejemplo estaacute hecho en unas tres horas podriacutea trabajarse mucho maacutes y construirnos un marco de trabajomuy bonito para nosotros y hecho por nosotros con lo cual tendriacuteamos un control y conocimiento absoluto delo que pasa por debajo El siguiente paso seria limpiar la URL mediante un htaccess y seguir daacutendolefuncionalidades antildeadiendo nuestras propias libreriacuteas para toda clase de tareas o de terceros como por ejemploPHPThumb HTML2PDF SwiftMailer Twig si queremos un motor de plantillas poderoso o incluso Active RecordORM para darle maacutes potencia

iquestPor que cuento todo esto En primer lugar para disipar las dudas del que pueda creer que no entiendo laprogramacioacuten orientada a objetos en segundo lugar para demostrar que un ex alumno de un ciclo formativo deadministracioacuten de sistemas sabe programar igual que cualquier otro de ciclos especiacuteficos de programacioacuten entercer lugar para ensentildear como se hace un programa en PHP utilizando POO y MVC con un controlador frontaly para demostrar que aunque programemos en PHP puro no tenemos porque hacer las cosas mal y no cuesta

trabajo hacerlas bien he visto varios proyectos hechos actualmente que son un verdadero caos y undespropoacutesito con esto podemos empezar a hacer buenos programas aunque no usemos un framework deterceros

Coacutedigo fuente de este ejemplo

Artiacuteculos relacionados

41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphpecho $user‐gtid gt class=btn btn‐dangergtBorrarltagt

42 ltdivgt43 lthrgt44 ltphp gt45 ltsectiongt46 ltfooter class=col‐lg‐12gt47 lthrgt48 Ejemplo PHP MySQLi POO MVC ‐ Viacutector Robles ‐ lta

href=httpvictorrobleswebesgtvictorrobleswebesltagt ‐ Copyright ampcopy ltphp echo date(Y) gt

49 ltfootergt50 ltbodygt51 lthtmlgt

CPEL Carreras en UsilHorarios Flexibles para Adultos Clases Presenciales y Virtuales

La extensioacutenMySQLi en PHP

CRUD conCodeigniter

Crear modelo deformulario en Yii

Controladores yvistas en Yii

Rutas y pasarvalores por URLen ZendFramework 2

Subir ficheros enCodeigniter

2Me gusta 04

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 2: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 29

Crear las clases del nuacutecleo

Primero crearemos la clase Conectar que nos serviraacute para conectarnos a la base de datos utilizando el driverMySQLi que es el maacutes raacutepido aunque muchos por ahiacute recomienden PDO y tambieacuten nos serviraacute para conectar ala base de datos un constructor de consultas que he incluido en el proyecto llamado Fluent Query Builder (elque utiliza Laravel)

Seguimos creando el fichero EntidadBasephp de esta clase heredaraacuten los modelos que representen entidadesen el constructor le pasaremos el nombre de la tabla y tendremos tantos meacutetodos como queramos paraayudarnos con las peticiones a la BD a traveacutes de los objetos que iremos creando Lo bueno que tiene es queestos meacutetodos pueden ser reutilizados en otras clases ya que le indicamos la tabla en el constructor

1 ltphp2 class Conectar3 private $driver4 private $host $user $pass $database $charset5 6 public function __construct() 7 $db_cfg = require_once configdatabasephp8 $this‐gtdriver=$db_cfg[driver]9 $this‐gthost=$db_cfg[host]10 $this‐gtuser=$db_cfg[user]11 $this‐gtpass=$db_cfg[pass]12 $this‐gtdatabase=$db_cfg[database]13 $this‐gtcharset=$db_cfg[charset]14 15 16 public function conexion()17 18 if($this‐gtdriver==mysql || $this‐gtdriver==null)19 $con=new mysqli($this‐gthost $this‐gtuser $this‐gtpass $this‐gtdatabase)20 $con‐gtquery(SET NAMES $this‐gtcharset)21 22 23 return $con24 25 26 public function startFluent()27 require_once FluentPDOFluentPDOphp28 29 if($this‐gtdriver==mysql || $this‐gtdriver==null)30 $pdo = new PDO($this‐gtdriverdbname=$this‐gtdatabase $this‐gtuser

$this‐gtpass)31 $fpdo = new FluentPDO($pdo)32 33 34 return $fpdo35 36 37 gt

1 ltphp2 class EntidadBase3 private $table4 private $db5 private $conectar6 7 public function __construct($table) 8 $this‐gttable=(string) $table9 10 require_once Conectarphp11 $this‐gtconectar=new Conectar()12 $this‐gtdb=$this‐gtconectar‐gtconexion()13 14 15 public function getConetar()16 return $this‐gtconectar

17 18 19 public function db()20 return $this‐gtdb21 22 23 public function getAll()24 $query=$this‐gtdb‐gtquery(SELECT FROM $this‐gttable ORDER BY id DESC)25 26 Devolvemos el resultset en forma de array de objetos27 while ($row = $query‐gtfetch_object()) 28 $resultSet[]=$row29 30 31 return $resultSet32 33 34 public function getById($id)35 $query=$this‐gtdb‐gtquery(SELECT FROM $this‐gttable WHERE id=$id)36 37 if($row = $query‐gtfetch_object()) 38 $resultSet=$row39 40 41 return $resultSet42 43 44 public function getBy($column$value)45 $query=$this‐gtdb‐gtquery(SELECT FROM $this‐gttable WHERE $column=$value)46 47 while($row = $query‐gtfetch_object()) 48 $resultSet[]=$row49 50 51 return $resultSet

Categoriacuteas

Desarrollo web (102)

Codeigniter (4)

PHP (96)

Symfony2 (33)

Yii Framework (20)

Zend Framework 2 (32)

Sin categoriacutea (1)

Sistemas (34)

Hardware (3)

Linux (29)

Windows (10)

Esto mola

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 39

Ahora crearemos la clase ModeloBase que heredaraacute de la clase EntidadBase y a su vez seraacute heredada por losmodelos de consultas La clase ModeloBase permitiraacute utilizar el constructor de consultas que hemos incluido ytambieacuten los meacutetodos de EntidadBase asiacute como otros meacutetodos que programemos dentro de la clase porejemplo yo tengo un meacutetodo para ejecutar consultas sql que directamente me devuelve el resultset en un arrayde objetos preparado para pasaacuterselo a una vista podriacuteamos tener cientos para diferentes cosas

La siguiente clase que crearemos es ControladoresBase de la cual heredaraacuten los controladores esta clase cargaEntidadesBase ModelosBase y todos los modelos creados dentro del directorio model

51 return $resultSet52 53 54 public function deleteById($id)55 $query=$this‐gtdb‐gtquery(DELETE FROM $this‐gttable WHERE id=$id)56 return $query57 58 59 public function deleteBy($column$value)60 $query=$this‐gtdb‐gtquery(DELETE FROM $this‐gttable WHERE $column=$value)61 return $query

62 63 64 65 66 Aquiacute podemos montarnos un montoacuten de meacutetodos que nos ayuden67 a hacer operaciones con la base de datos de la entidad68 69 70 71 gt

1 ltphp2 class ModeloBase extends EntidadBase3 private $table4 private $fluent5 6 public function __construct($table) 7 $this‐gttable=(string) $table8 parent__construct($table)9 10 $this‐gtfluent=$this‐gtgetConetar()‐gtstartFluent()11 12 13 public function fluent()14 return $this‐gtfluent15 16 17 public function ejecutarSql($query)18 $query=$this‐gtdb()‐gtquery($query)19 if($query==true)20 if($query‐gtnum_rowsgt1)21 while($row = $query‐gtfetch_object()) 22 $resultSet[]=$row23 24 elseif($query‐gtnum_rows==1)25 if($row = $query‐gtfetch_object()) 26 $resultSet=$row27 28 else29 $resultSet=true30 31 else32 $resultSet=false33 34 35 return $resultSet36 37 38 Aqui podemos montarnos meacutetodos para los modelos de consulta39 40 41 gt

1 ltphp2 class ControladorBase3 4 public function __construct() 5 require_once EntidadBasephp6 require_once ModeloBasephp7 8 Incluir todos los modelos9 foreach(glob(modelphp) as $file)10 require_once $file11 12 13 14 Plugins y funcionalidades15 16 17 Este meacutetodo lo que hace es recibir los datos del controlador en forma de array18 los recorre y crea una variable dinaacutemica con el indice asociativo y le da el19 valor que contiene dicha posicioacuten del array luego carga los helpers para las20 vistas y carga la vista que le llega como paraacutemetro En resumen un meacutetodo para21 renderizar vistas22 23 public function view($vista$datos)24 foreach ($datos as $id_assoc =gt $valor) 25 $$id_assoc=$valor26 27 28 require_once coreAyudaVistasphp29 $helper=new AyudaVistas()30 31 require_once view$vistaViewphp32

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 49

Ahora crearemos la clase AyudaVistas que puede contener diversos helpers (pequentildeos meacutetodos que nosayuden en pequentildeas tareas dentro de las vistas)

Ahora crearemos el fichero ControladorFrontalfuncphp que tiene las funciones que se encargan de cargar uncontrolador u otro y una accioacuten u otra en funcioacuten de lo que se le diga por la url

El controlador frontal indexphp

El controlador frontal es donde se cargan todos los ficheros de la aplicacioacuten y por tanto la uacutenica pagiacutena quevisita el usuario realmente es esta en este caso indexphp

Modelos y objetos

Si queremos seguir el paradigma de la programacioacuten orientada a objetos teoacutericamente deberiacuteamos tener unaclase por cada tabla de la base de datos(excepto tablas pivote) que haga referencia a un objeto de la vida realen este caso el objeto que creariacuteamos seria ldquoUsuariordquo y el usuario tendriacutea un nombre un apellido un email etcpues bien eso serian los atributos del objeto y tendriacuteamos un meacutetodo get y set por cada atributo que serviraacutenpara establecer el valor de las propiedades y para conseguir el valor de cada atributo Esta clase hereda deEntidadesBase y tiene un meacutetodo save para guardar el usuario en la base de datos podriacuteamos tener otromeacutetodo update que seria similar etc

Y te preguntaraacutes iquestpor que no lo haces asiacute siempre la respuesta es simple en algunos proyectos en los que haymuchas tablas puede ser engorroso estar creando una clase por cada tabla solamente para tener un insert y unupdate(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto y

32 33 34 public function redirect($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)35 header(Locationindexphpcontroller=$controladorampaction=$accion)36 37 38 Meacutetodos para los controladores39 40 41 gt

1 ltphp2 class AyudaVistas3 4 public function url($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)5 $urlString=indexphpcontroller=$controladorampaction=$accion6 return $urlString7 8 9 Helpers para las vistas10 11 gt

1 ltphp2 FUNCIONES PARA EL CONTROLADOR FRONTAL3 4 function cargarControlador($controller)5 $controlador=ucwords($controller)Controller6 $strFileController=controller$controladorphp7 8 if(is_file($strFileController))9 $strFileController=controllerucwords(CONTROLADOR_DEFECTO)Controllerphp 10 11 12 require_once $strFileController13 $controllerObj=new $controlador()14 return $controllerObj15 16 17 function cargarAccion($controllerObj$action)18 $accion=$action19 $controllerObj‐gt$accion()20 21 22 function lanzarAccion($controllerObj)23 if(isset($_GET[action]) ampamp method_exists($controllerObj $_GET[action]))24 cargarAccion($controllerObj $_GET[action])25 else26 cargarAccion($controllerObj ACCION_DEFECTO)27 28 29 30 gt

1 ltphp2 Configuracioacuten global3 require_once configglobalphp

4 5 Base para los controladores6 require_once coreControladorBasephp7 8 Funciones para el controlador frontal9 require_once coreControladorFrontalfuncphp10 11 Cargamos controladores y acciones12 if(isset($_GET[controller]))13 $controllerObj=cargarControlador($_GET[controller])14 lanzarAccion($controllerObj)15 else16 $controllerObj=cargarControlador(CONTROLADOR_DEFECTO)17 lanzarAccion($controllerObj)18 19 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 59

update(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto ydirectamente creo modelos de consultas en los que tengo meacutetodos que interaccionan con una tablamayoritariamente o varias seguacuten las relaciones que tengan por otra parte algunos frameworks cuentan conORMs que nos ayudan con todo esto pero de igual forma cuando tienes muchas tablas relacionadas quizaacute eluso del ORM sin controlarlo muy bien puede dificultar la tarea en cualquier caso lo maacutes correcto es tener unaclase por entidad aunque a veces no sea lo maacutes practico o coacutemodo

Truco si usas NetBeans puedes generar los getters y setters desde el menuacute Source -gt Insert Code

Aquiacute pondriacuteamos las consultas completas en lugar de utilizar los meacutetodos que tenemos en el modelo deentidad aunque tambieacuten estariacutean accesibles desde este modelo

Los controladores

Los crearemos en el directorio controller en este caso tengo creado UsuariosController

1 ltphp2 class Usuario extends EntidadBase3 private $id4 private $nombre5 private $apellido6 private $email7 private $password8 9 public function __construct() 10 $table=usuarios

11 parent__construct($table)12 13 14 public function getId() 15 return $this‐gtid16 17 18 public function setId($id) 19 $this‐gtid = $id20 21 22 public function getNombre() 23 return $this‐gtnombre24 25 26 public function setNombre($nombre) 27 $this‐gtnombre = $nombre28 29 30 public function getApellido() 31 return $this‐gtapellido32 33 34 public function setApellido($apellido) 35 $this‐gtapellido = $apellido36 37 38 public function getEmail() 39 return $this‐gtemail40 41 42 public function setEmail($email) 43 $this‐gtemail = $email44 45 46 public function getPassword() 47 return $this‐gtpassword48 49 50 public function setPassword($password) 51 $this‐gtpassword = $password52 53 54 public function save()55 $query=INSERT INTO usuarios (idnombreapellidoemailpassword)56 VALUES(NULL57 $this‐gtnombre58 $this‐gtapellido59 $this‐gtemail60 $this‐gtpassword)61 $save=$this‐gtdb()‐gtquery($query)62 $this‐gtdb()‐gterror63 return $save64 65 66 67 gt

1 ltphp2 class UsuariosModel extends ModeloBase3 private $table4 5 public function __construct()6 $this‐gttable=usuarios7 parent__construct($this‐gttable)8 9 10 Metodos de consulta11 public function getUnUsuario()12 $query=SELECT FROM usuarios WHERE email=victorvictorcom13 $usuario=$this‐gtejecutarSql($query)14 return $usuario15 16 17 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 69

Las vistas

En este caso tengo la vista indexViewphp creada

1 ltphp2 class UsuariosController extends ControladorBase3 4 public function __construct()

5 parent__construct()6 7 8 public function index()9 10 Creamos el objeto usuario11 $usuario=new Usuario()12 13 Conseguimos todos los usuarios14 $allusers=$usuario‐gtgetAll()15 16 Cargamos la vista index y le pasamos valores17 $this‐gtview(indexarray(18 allusers=gt$allusers19 Hola =gtSoy Viacutector Robles20 ))21 22 23 public function crear()24 if(isset($_POST[nombre]))25 26 Creamos un usuario27 $usuario=new Usuario()28 $usuario‐gtsetNombre($_POST[nombre])29 $usuario‐gtsetApellido($_POST[apellido])30 $usuario‐gtsetEmail($_POST[email])31 $usuario‐gtsetPassword(sha1($_POST[password]))32 $save=$usuario‐gtsave()33 34 $this‐gtredirect(Usuarios index)35 36 37 public function borrar()38 if(isset($_GET[id]))39 $id=(int)$_GET[id]40 41 $usuario=new Usuario()42 $usuario‐gtdeleteById($id)43 44 $this‐gtredirect()45 46 47 48 public function hola()49 $usuarios=new UsuariosModel()50 $usu=$usuarios‐gtgetUnUsuario()51 var_dump($usu)52 53 54 55 gt

1 ltDOCTYPE HTMLgt2 lthtml lang=esgt3 ltheadgt4 ltmeta charset=utf‐8gt5 lttitlegtEjemplo PHP MySQLi POO MVClttitlegt6 ltlink href=maxcdnbootstrapcdncombootstrap320cssbootstrapmincss

rel=stylesheet type=textcss gt7 ltscript type=textjavascript

src=maxcdnbootstrapcdncombootstrap320jsbootstrapminjsgtltscriptgt8 ltscript type=textjavascript

src=ajaxgoogleapiscomajaxlibsjquery1111jqueryminjsgtltscriptgt9 ltstylegt10 input11 margin‐top5px12 margin‐bottom5px13 14 right15 floatright16 17 ltstylegt18 ltheadgt19 ltbodygt20 ltform action=ltphp echo $helper‐gturl(usuarioscrear) gt method=post

class=col‐lg‐5gt

21 lth3gtAntildeadir usuariolth3gt22 lthrgt23 Nombre ltinput type=text name=nombre class=form‐controlgt24 Apellido ltinput type=text name=apellido class=form‐controlgt25 Email ltinput type=text name=email class=form‐controlgt26 Contrasentildea ltinput type=password name=password class=form‐controlgt27 ltinput type=submit value=enviar class=btn btn‐successgt28 ltformgt29 30 ltdiv class=col‐lg‐7gt31 lth3gtUsuarioslth3gt32 lthrgt33 ltdivgt34 ltsection class=col‐lg‐7 usuario style=height400pxoverflow‐yscrollgt35 ltphp foreach($allusers as $user) recorremos el array de objetos y

obtenemos el valor de las propiedades gt36 ltphp echo $user‐gtid gt ‐37 ltphp echo $user‐gtnombre gt ‐38 ltphp echo $user‐gtapellido gt ‐39 ltphp echo $user‐gtemail gt40 ltdiv class=rightgt41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphp

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 79

El resultado ldquofinalrdquo estaacute cargando el controlador y accioacuten por defecto

Para acceder a otros controladores y acciones por la url

Este ejemplo estaacute hecho en unas tres horas podriacutea trabajarse mucho maacutes y construirnos un marco de trabajomuy bonito para nosotros y hecho por nosotros con lo cual tendriacuteamos un control y conocimiento absoluto delo que pasa por debajo El siguiente paso seria limpiar la URL mediante un htaccess y seguir daacutendolefuncionalidades antildeadiendo nuestras propias libreriacuteas para toda clase de tareas o de terceros como por ejemploPHPThumb HTML2PDF SwiftMailer Twig si queremos un motor de plantillas poderoso o incluso Active RecordORM para darle maacutes potencia

iquestPor que cuento todo esto En primer lugar para disipar las dudas del que pueda creer que no entiendo laprogramacioacuten orientada a objetos en segundo lugar para demostrar que un ex alumno de un ciclo formativo deadministracioacuten de sistemas sabe programar igual que cualquier otro de ciclos especiacuteficos de programacioacuten entercer lugar para ensentildear como se hace un programa en PHP utilizando POO y MVC con un controlador frontaly para demostrar que aunque programemos en PHP puro no tenemos porque hacer las cosas mal y no cuesta

trabajo hacerlas bien he visto varios proyectos hechos actualmente que son un verdadero caos y undespropoacutesito con esto podemos empezar a hacer buenos programas aunque no usemos un framework deterceros

Coacutedigo fuente de este ejemplo

Artiacuteculos relacionados

41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphpecho $user‐gtid gt class=btn btn‐dangergtBorrarltagt

42 ltdivgt43 lthrgt44 ltphp gt45 ltsectiongt46 ltfooter class=col‐lg‐12gt47 lthrgt48 Ejemplo PHP MySQLi POO MVC ‐ Viacutector Robles ‐ lta

href=httpvictorrobleswebesgtvictorrobleswebesltagt ‐ Copyright ampcopy ltphp echo date(Y) gt

49 ltfootergt50 ltbodygt51 lthtmlgt

CPEL Carreras en UsilHorarios Flexibles para Adultos Clases Presenciales y Virtuales

La extensioacutenMySQLi en PHP

CRUD conCodeigniter

Crear modelo deformulario en Yii

Controladores yvistas en Yii

Rutas y pasarvalores por URLen ZendFramework 2

Subir ficheros enCodeigniter

2Me gusta 04

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 3: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 39

Ahora crearemos la clase ModeloBase que heredaraacute de la clase EntidadBase y a su vez seraacute heredada por losmodelos de consultas La clase ModeloBase permitiraacute utilizar el constructor de consultas que hemos incluido ytambieacuten los meacutetodos de EntidadBase asiacute como otros meacutetodos que programemos dentro de la clase porejemplo yo tengo un meacutetodo para ejecutar consultas sql que directamente me devuelve el resultset en un arrayde objetos preparado para pasaacuterselo a una vista podriacuteamos tener cientos para diferentes cosas

La siguiente clase que crearemos es ControladoresBase de la cual heredaraacuten los controladores esta clase cargaEntidadesBase ModelosBase y todos los modelos creados dentro del directorio model

51 return $resultSet52 53 54 public function deleteById($id)55 $query=$this‐gtdb‐gtquery(DELETE FROM $this‐gttable WHERE id=$id)56 return $query57 58 59 public function deleteBy($column$value)60 $query=$this‐gtdb‐gtquery(DELETE FROM $this‐gttable WHERE $column=$value)61 return $query

62 63 64 65 66 Aquiacute podemos montarnos un montoacuten de meacutetodos que nos ayuden67 a hacer operaciones con la base de datos de la entidad68 69 70 71 gt

1 ltphp2 class ModeloBase extends EntidadBase3 private $table4 private $fluent5 6 public function __construct($table) 7 $this‐gttable=(string) $table8 parent__construct($table)9 10 $this‐gtfluent=$this‐gtgetConetar()‐gtstartFluent()11 12 13 public function fluent()14 return $this‐gtfluent15 16 17 public function ejecutarSql($query)18 $query=$this‐gtdb()‐gtquery($query)19 if($query==true)20 if($query‐gtnum_rowsgt1)21 while($row = $query‐gtfetch_object()) 22 $resultSet[]=$row23 24 elseif($query‐gtnum_rows==1)25 if($row = $query‐gtfetch_object()) 26 $resultSet=$row27 28 else29 $resultSet=true30 31 else32 $resultSet=false33 34 35 return $resultSet36 37 38 Aqui podemos montarnos meacutetodos para los modelos de consulta39 40 41 gt

1 ltphp2 class ControladorBase3 4 public function __construct() 5 require_once EntidadBasephp6 require_once ModeloBasephp7 8 Incluir todos los modelos9 foreach(glob(modelphp) as $file)10 require_once $file11 12 13 14 Plugins y funcionalidades15 16 17 Este meacutetodo lo que hace es recibir los datos del controlador en forma de array18 los recorre y crea una variable dinaacutemica con el indice asociativo y le da el19 valor que contiene dicha posicioacuten del array luego carga los helpers para las20 vistas y carga la vista que le llega como paraacutemetro En resumen un meacutetodo para21 renderizar vistas22 23 public function view($vista$datos)24 foreach ($datos as $id_assoc =gt $valor) 25 $$id_assoc=$valor26 27 28 require_once coreAyudaVistasphp29 $helper=new AyudaVistas()30 31 require_once view$vistaViewphp32

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 49

Ahora crearemos la clase AyudaVistas que puede contener diversos helpers (pequentildeos meacutetodos que nosayuden en pequentildeas tareas dentro de las vistas)

Ahora crearemos el fichero ControladorFrontalfuncphp que tiene las funciones que se encargan de cargar uncontrolador u otro y una accioacuten u otra en funcioacuten de lo que se le diga por la url

El controlador frontal indexphp

El controlador frontal es donde se cargan todos los ficheros de la aplicacioacuten y por tanto la uacutenica pagiacutena quevisita el usuario realmente es esta en este caso indexphp

Modelos y objetos

Si queremos seguir el paradigma de la programacioacuten orientada a objetos teoacutericamente deberiacuteamos tener unaclase por cada tabla de la base de datos(excepto tablas pivote) que haga referencia a un objeto de la vida realen este caso el objeto que creariacuteamos seria ldquoUsuariordquo y el usuario tendriacutea un nombre un apellido un email etcpues bien eso serian los atributos del objeto y tendriacuteamos un meacutetodo get y set por cada atributo que serviraacutenpara establecer el valor de las propiedades y para conseguir el valor de cada atributo Esta clase hereda deEntidadesBase y tiene un meacutetodo save para guardar el usuario en la base de datos podriacuteamos tener otromeacutetodo update que seria similar etc

Y te preguntaraacutes iquestpor que no lo haces asiacute siempre la respuesta es simple en algunos proyectos en los que haymuchas tablas puede ser engorroso estar creando una clase por cada tabla solamente para tener un insert y unupdate(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto y

32 33 34 public function redirect($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)35 header(Locationindexphpcontroller=$controladorampaction=$accion)36 37 38 Meacutetodos para los controladores39 40 41 gt

1 ltphp2 class AyudaVistas3 4 public function url($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)5 $urlString=indexphpcontroller=$controladorampaction=$accion6 return $urlString7 8 9 Helpers para las vistas10 11 gt

1 ltphp2 FUNCIONES PARA EL CONTROLADOR FRONTAL3 4 function cargarControlador($controller)5 $controlador=ucwords($controller)Controller6 $strFileController=controller$controladorphp7 8 if(is_file($strFileController))9 $strFileController=controllerucwords(CONTROLADOR_DEFECTO)Controllerphp 10 11 12 require_once $strFileController13 $controllerObj=new $controlador()14 return $controllerObj15 16 17 function cargarAccion($controllerObj$action)18 $accion=$action19 $controllerObj‐gt$accion()20 21 22 function lanzarAccion($controllerObj)23 if(isset($_GET[action]) ampamp method_exists($controllerObj $_GET[action]))24 cargarAccion($controllerObj $_GET[action])25 else26 cargarAccion($controllerObj ACCION_DEFECTO)27 28 29 30 gt

1 ltphp2 Configuracioacuten global3 require_once configglobalphp

4 5 Base para los controladores6 require_once coreControladorBasephp7 8 Funciones para el controlador frontal9 require_once coreControladorFrontalfuncphp10 11 Cargamos controladores y acciones12 if(isset($_GET[controller]))13 $controllerObj=cargarControlador($_GET[controller])14 lanzarAccion($controllerObj)15 else16 $controllerObj=cargarControlador(CONTROLADOR_DEFECTO)17 lanzarAccion($controllerObj)18 19 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 59

update(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto ydirectamente creo modelos de consultas en los que tengo meacutetodos que interaccionan con una tablamayoritariamente o varias seguacuten las relaciones que tengan por otra parte algunos frameworks cuentan conORMs que nos ayudan con todo esto pero de igual forma cuando tienes muchas tablas relacionadas quizaacute eluso del ORM sin controlarlo muy bien puede dificultar la tarea en cualquier caso lo maacutes correcto es tener unaclase por entidad aunque a veces no sea lo maacutes practico o coacutemodo

Truco si usas NetBeans puedes generar los getters y setters desde el menuacute Source -gt Insert Code

Aquiacute pondriacuteamos las consultas completas en lugar de utilizar los meacutetodos que tenemos en el modelo deentidad aunque tambieacuten estariacutean accesibles desde este modelo

Los controladores

Los crearemos en el directorio controller en este caso tengo creado UsuariosController

1 ltphp2 class Usuario extends EntidadBase3 private $id4 private $nombre5 private $apellido6 private $email7 private $password8 9 public function __construct() 10 $table=usuarios

11 parent__construct($table)12 13 14 public function getId() 15 return $this‐gtid16 17 18 public function setId($id) 19 $this‐gtid = $id20 21 22 public function getNombre() 23 return $this‐gtnombre24 25 26 public function setNombre($nombre) 27 $this‐gtnombre = $nombre28 29 30 public function getApellido() 31 return $this‐gtapellido32 33 34 public function setApellido($apellido) 35 $this‐gtapellido = $apellido36 37 38 public function getEmail() 39 return $this‐gtemail40 41 42 public function setEmail($email) 43 $this‐gtemail = $email44 45 46 public function getPassword() 47 return $this‐gtpassword48 49 50 public function setPassword($password) 51 $this‐gtpassword = $password52 53 54 public function save()55 $query=INSERT INTO usuarios (idnombreapellidoemailpassword)56 VALUES(NULL57 $this‐gtnombre58 $this‐gtapellido59 $this‐gtemail60 $this‐gtpassword)61 $save=$this‐gtdb()‐gtquery($query)62 $this‐gtdb()‐gterror63 return $save64 65 66 67 gt

1 ltphp2 class UsuariosModel extends ModeloBase3 private $table4 5 public function __construct()6 $this‐gttable=usuarios7 parent__construct($this‐gttable)8 9 10 Metodos de consulta11 public function getUnUsuario()12 $query=SELECT FROM usuarios WHERE email=victorvictorcom13 $usuario=$this‐gtejecutarSql($query)14 return $usuario15 16 17 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 69

Las vistas

En este caso tengo la vista indexViewphp creada

1 ltphp2 class UsuariosController extends ControladorBase3 4 public function __construct()

5 parent__construct()6 7 8 public function index()9 10 Creamos el objeto usuario11 $usuario=new Usuario()12 13 Conseguimos todos los usuarios14 $allusers=$usuario‐gtgetAll()15 16 Cargamos la vista index y le pasamos valores17 $this‐gtview(indexarray(18 allusers=gt$allusers19 Hola =gtSoy Viacutector Robles20 ))21 22 23 public function crear()24 if(isset($_POST[nombre]))25 26 Creamos un usuario27 $usuario=new Usuario()28 $usuario‐gtsetNombre($_POST[nombre])29 $usuario‐gtsetApellido($_POST[apellido])30 $usuario‐gtsetEmail($_POST[email])31 $usuario‐gtsetPassword(sha1($_POST[password]))32 $save=$usuario‐gtsave()33 34 $this‐gtredirect(Usuarios index)35 36 37 public function borrar()38 if(isset($_GET[id]))39 $id=(int)$_GET[id]40 41 $usuario=new Usuario()42 $usuario‐gtdeleteById($id)43 44 $this‐gtredirect()45 46 47 48 public function hola()49 $usuarios=new UsuariosModel()50 $usu=$usuarios‐gtgetUnUsuario()51 var_dump($usu)52 53 54 55 gt

1 ltDOCTYPE HTMLgt2 lthtml lang=esgt3 ltheadgt4 ltmeta charset=utf‐8gt5 lttitlegtEjemplo PHP MySQLi POO MVClttitlegt6 ltlink href=maxcdnbootstrapcdncombootstrap320cssbootstrapmincss

rel=stylesheet type=textcss gt7 ltscript type=textjavascript

src=maxcdnbootstrapcdncombootstrap320jsbootstrapminjsgtltscriptgt8 ltscript type=textjavascript

src=ajaxgoogleapiscomajaxlibsjquery1111jqueryminjsgtltscriptgt9 ltstylegt10 input11 margin‐top5px12 margin‐bottom5px13 14 right15 floatright16 17 ltstylegt18 ltheadgt19 ltbodygt20 ltform action=ltphp echo $helper‐gturl(usuarioscrear) gt method=post

class=col‐lg‐5gt

21 lth3gtAntildeadir usuariolth3gt22 lthrgt23 Nombre ltinput type=text name=nombre class=form‐controlgt24 Apellido ltinput type=text name=apellido class=form‐controlgt25 Email ltinput type=text name=email class=form‐controlgt26 Contrasentildea ltinput type=password name=password class=form‐controlgt27 ltinput type=submit value=enviar class=btn btn‐successgt28 ltformgt29 30 ltdiv class=col‐lg‐7gt31 lth3gtUsuarioslth3gt32 lthrgt33 ltdivgt34 ltsection class=col‐lg‐7 usuario style=height400pxoverflow‐yscrollgt35 ltphp foreach($allusers as $user) recorremos el array de objetos y

obtenemos el valor de las propiedades gt36 ltphp echo $user‐gtid gt ‐37 ltphp echo $user‐gtnombre gt ‐38 ltphp echo $user‐gtapellido gt ‐39 ltphp echo $user‐gtemail gt40 ltdiv class=rightgt41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphp

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 79

El resultado ldquofinalrdquo estaacute cargando el controlador y accioacuten por defecto

Para acceder a otros controladores y acciones por la url

Este ejemplo estaacute hecho en unas tres horas podriacutea trabajarse mucho maacutes y construirnos un marco de trabajomuy bonito para nosotros y hecho por nosotros con lo cual tendriacuteamos un control y conocimiento absoluto delo que pasa por debajo El siguiente paso seria limpiar la URL mediante un htaccess y seguir daacutendolefuncionalidades antildeadiendo nuestras propias libreriacuteas para toda clase de tareas o de terceros como por ejemploPHPThumb HTML2PDF SwiftMailer Twig si queremos un motor de plantillas poderoso o incluso Active RecordORM para darle maacutes potencia

iquestPor que cuento todo esto En primer lugar para disipar las dudas del que pueda creer que no entiendo laprogramacioacuten orientada a objetos en segundo lugar para demostrar que un ex alumno de un ciclo formativo deadministracioacuten de sistemas sabe programar igual que cualquier otro de ciclos especiacuteficos de programacioacuten entercer lugar para ensentildear como se hace un programa en PHP utilizando POO y MVC con un controlador frontaly para demostrar que aunque programemos en PHP puro no tenemos porque hacer las cosas mal y no cuesta

trabajo hacerlas bien he visto varios proyectos hechos actualmente que son un verdadero caos y undespropoacutesito con esto podemos empezar a hacer buenos programas aunque no usemos un framework deterceros

Coacutedigo fuente de este ejemplo

Artiacuteculos relacionados

41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphpecho $user‐gtid gt class=btn btn‐dangergtBorrarltagt

42 ltdivgt43 lthrgt44 ltphp gt45 ltsectiongt46 ltfooter class=col‐lg‐12gt47 lthrgt48 Ejemplo PHP MySQLi POO MVC ‐ Viacutector Robles ‐ lta

href=httpvictorrobleswebesgtvictorrobleswebesltagt ‐ Copyright ampcopy ltphp echo date(Y) gt

49 ltfootergt50 ltbodygt51 lthtmlgt

CPEL Carreras en UsilHorarios Flexibles para Adultos Clases Presenciales y Virtuales

La extensioacutenMySQLi en PHP

CRUD conCodeigniter

Crear modelo deformulario en Yii

Controladores yvistas en Yii

Rutas y pasarvalores por URLen ZendFramework 2

Subir ficheros enCodeigniter

2Me gusta 04

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 4: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 49

Ahora crearemos la clase AyudaVistas que puede contener diversos helpers (pequentildeos meacutetodos que nosayuden en pequentildeas tareas dentro de las vistas)

Ahora crearemos el fichero ControladorFrontalfuncphp que tiene las funciones que se encargan de cargar uncontrolador u otro y una accioacuten u otra en funcioacuten de lo que se le diga por la url

El controlador frontal indexphp

El controlador frontal es donde se cargan todos los ficheros de la aplicacioacuten y por tanto la uacutenica pagiacutena quevisita el usuario realmente es esta en este caso indexphp

Modelos y objetos

Si queremos seguir el paradigma de la programacioacuten orientada a objetos teoacutericamente deberiacuteamos tener unaclase por cada tabla de la base de datos(excepto tablas pivote) que haga referencia a un objeto de la vida realen este caso el objeto que creariacuteamos seria ldquoUsuariordquo y el usuario tendriacutea un nombre un apellido un email etcpues bien eso serian los atributos del objeto y tendriacuteamos un meacutetodo get y set por cada atributo que serviraacutenpara establecer el valor de las propiedades y para conseguir el valor de cada atributo Esta clase hereda deEntidadesBase y tiene un meacutetodo save para guardar el usuario en la base de datos podriacuteamos tener otromeacutetodo update que seria similar etc

Y te preguntaraacutes iquestpor que no lo haces asiacute siempre la respuesta es simple en algunos proyectos en los que haymuchas tablas puede ser engorroso estar creando una clase por cada tabla solamente para tener un insert y unupdate(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto y

32 33 34 public function redirect($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)35 header(Locationindexphpcontroller=$controladorampaction=$accion)36 37 38 Meacutetodos para los controladores39 40 41 gt

1 ltphp2 class AyudaVistas3 4 public function url($controlador=CONTROLADOR_DEFECTO$accion=ACCION_DEFECTO)5 $urlString=indexphpcontroller=$controladorampaction=$accion6 return $urlString7 8 9 Helpers para las vistas10 11 gt

1 ltphp2 FUNCIONES PARA EL CONTROLADOR FRONTAL3 4 function cargarControlador($controller)5 $controlador=ucwords($controller)Controller6 $strFileController=controller$controladorphp7 8 if(is_file($strFileController))9 $strFileController=controllerucwords(CONTROLADOR_DEFECTO)Controllerphp 10 11 12 require_once $strFileController13 $controllerObj=new $controlador()14 return $controllerObj15 16 17 function cargarAccion($controllerObj$action)18 $accion=$action19 $controllerObj‐gt$accion()20 21 22 function lanzarAccion($controllerObj)23 if(isset($_GET[action]) ampamp method_exists($controllerObj $_GET[action]))24 cargarAccion($controllerObj $_GET[action])25 else26 cargarAccion($controllerObj ACCION_DEFECTO)27 28 29 30 gt

1 ltphp2 Configuracioacuten global3 require_once configglobalphp

4 5 Base para los controladores6 require_once coreControladorBasephp7 8 Funciones para el controlador frontal9 require_once coreControladorFrontalfuncphp10 11 Cargamos controladores y acciones12 if(isset($_GET[controller]))13 $controllerObj=cargarControlador($_GET[controller])14 lanzarAccion($controllerObj)15 else16 $controllerObj=cargarControlador(CONTROLADOR_DEFECTO)17 lanzarAccion($controllerObj)18 19 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 59

update(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto ydirectamente creo modelos de consultas en los que tengo meacutetodos que interaccionan con una tablamayoritariamente o varias seguacuten las relaciones que tengan por otra parte algunos frameworks cuentan conORMs que nos ayudan con todo esto pero de igual forma cuando tienes muchas tablas relacionadas quizaacute eluso del ORM sin controlarlo muy bien puede dificultar la tarea en cualquier caso lo maacutes correcto es tener unaclase por entidad aunque a veces no sea lo maacutes practico o coacutemodo

Truco si usas NetBeans puedes generar los getters y setters desde el menuacute Source -gt Insert Code

Aquiacute pondriacuteamos las consultas completas en lugar de utilizar los meacutetodos que tenemos en el modelo deentidad aunque tambieacuten estariacutean accesibles desde este modelo

Los controladores

Los crearemos en el directorio controller en este caso tengo creado UsuariosController

1 ltphp2 class Usuario extends EntidadBase3 private $id4 private $nombre5 private $apellido6 private $email7 private $password8 9 public function __construct() 10 $table=usuarios

11 parent__construct($table)12 13 14 public function getId() 15 return $this‐gtid16 17 18 public function setId($id) 19 $this‐gtid = $id20 21 22 public function getNombre() 23 return $this‐gtnombre24 25 26 public function setNombre($nombre) 27 $this‐gtnombre = $nombre28 29 30 public function getApellido() 31 return $this‐gtapellido32 33 34 public function setApellido($apellido) 35 $this‐gtapellido = $apellido36 37 38 public function getEmail() 39 return $this‐gtemail40 41 42 public function setEmail($email) 43 $this‐gtemail = $email44 45 46 public function getPassword() 47 return $this‐gtpassword48 49 50 public function setPassword($password) 51 $this‐gtpassword = $password52 53 54 public function save()55 $query=INSERT INTO usuarios (idnombreapellidoemailpassword)56 VALUES(NULL57 $this‐gtnombre58 $this‐gtapellido59 $this‐gtemail60 $this‐gtpassword)61 $save=$this‐gtdb()‐gtquery($query)62 $this‐gtdb()‐gterror63 return $save64 65 66 67 gt

1 ltphp2 class UsuariosModel extends ModeloBase3 private $table4 5 public function __construct()6 $this‐gttable=usuarios7 parent__construct($this‐gttable)8 9 10 Metodos de consulta11 public function getUnUsuario()12 $query=SELECT FROM usuarios WHERE email=victorvictorcom13 $usuario=$this‐gtejecutarSql($query)14 return $usuario15 16 17 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 69

Las vistas

En este caso tengo la vista indexViewphp creada

1 ltphp2 class UsuariosController extends ControladorBase3 4 public function __construct()

5 parent__construct()6 7 8 public function index()9 10 Creamos el objeto usuario11 $usuario=new Usuario()12 13 Conseguimos todos los usuarios14 $allusers=$usuario‐gtgetAll()15 16 Cargamos la vista index y le pasamos valores17 $this‐gtview(indexarray(18 allusers=gt$allusers19 Hola =gtSoy Viacutector Robles20 ))21 22 23 public function crear()24 if(isset($_POST[nombre]))25 26 Creamos un usuario27 $usuario=new Usuario()28 $usuario‐gtsetNombre($_POST[nombre])29 $usuario‐gtsetApellido($_POST[apellido])30 $usuario‐gtsetEmail($_POST[email])31 $usuario‐gtsetPassword(sha1($_POST[password]))32 $save=$usuario‐gtsave()33 34 $this‐gtredirect(Usuarios index)35 36 37 public function borrar()38 if(isset($_GET[id]))39 $id=(int)$_GET[id]40 41 $usuario=new Usuario()42 $usuario‐gtdeleteById($id)43 44 $this‐gtredirect()45 46 47 48 public function hola()49 $usuarios=new UsuariosModel()50 $usu=$usuarios‐gtgetUnUsuario()51 var_dump($usu)52 53 54 55 gt

1 ltDOCTYPE HTMLgt2 lthtml lang=esgt3 ltheadgt4 ltmeta charset=utf‐8gt5 lttitlegtEjemplo PHP MySQLi POO MVClttitlegt6 ltlink href=maxcdnbootstrapcdncombootstrap320cssbootstrapmincss

rel=stylesheet type=textcss gt7 ltscript type=textjavascript

src=maxcdnbootstrapcdncombootstrap320jsbootstrapminjsgtltscriptgt8 ltscript type=textjavascript

src=ajaxgoogleapiscomajaxlibsjquery1111jqueryminjsgtltscriptgt9 ltstylegt10 input11 margin‐top5px12 margin‐bottom5px13 14 right15 floatright16 17 ltstylegt18 ltheadgt19 ltbodygt20 ltform action=ltphp echo $helper‐gturl(usuarioscrear) gt method=post

class=col‐lg‐5gt

21 lth3gtAntildeadir usuariolth3gt22 lthrgt23 Nombre ltinput type=text name=nombre class=form‐controlgt24 Apellido ltinput type=text name=apellido class=form‐controlgt25 Email ltinput type=text name=email class=form‐controlgt26 Contrasentildea ltinput type=password name=password class=form‐controlgt27 ltinput type=submit value=enviar class=btn btn‐successgt28 ltformgt29 30 ltdiv class=col‐lg‐7gt31 lth3gtUsuarioslth3gt32 lthrgt33 ltdivgt34 ltsection class=col‐lg‐7 usuario style=height400pxoverflow‐yscrollgt35 ltphp foreach($allusers as $user) recorremos el array de objetos y

obtenemos el valor de las propiedades gt36 ltphp echo $user‐gtid gt ‐37 ltphp echo $user‐gtnombre gt ‐38 ltphp echo $user‐gtapellido gt ‐39 ltphp echo $user‐gtemail gt40 ltdiv class=rightgt41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphp

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 79

El resultado ldquofinalrdquo estaacute cargando el controlador y accioacuten por defecto

Para acceder a otros controladores y acciones por la url

Este ejemplo estaacute hecho en unas tres horas podriacutea trabajarse mucho maacutes y construirnos un marco de trabajomuy bonito para nosotros y hecho por nosotros con lo cual tendriacuteamos un control y conocimiento absoluto delo que pasa por debajo El siguiente paso seria limpiar la URL mediante un htaccess y seguir daacutendolefuncionalidades antildeadiendo nuestras propias libreriacuteas para toda clase de tareas o de terceros como por ejemploPHPThumb HTML2PDF SwiftMailer Twig si queremos un motor de plantillas poderoso o incluso Active RecordORM para darle maacutes potencia

iquestPor que cuento todo esto En primer lugar para disipar las dudas del que pueda creer que no entiendo laprogramacioacuten orientada a objetos en segundo lugar para demostrar que un ex alumno de un ciclo formativo deadministracioacuten de sistemas sabe programar igual que cualquier otro de ciclos especiacuteficos de programacioacuten entercer lugar para ensentildear como se hace un programa en PHP utilizando POO y MVC con un controlador frontaly para demostrar que aunque programemos en PHP puro no tenemos porque hacer las cosas mal y no cuesta

trabajo hacerlas bien he visto varios proyectos hechos actualmente que son un verdadero caos y undespropoacutesito con esto podemos empezar a hacer buenos programas aunque no usemos un framework deterceros

Coacutedigo fuente de este ejemplo

Artiacuteculos relacionados

41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphpecho $user‐gtid gt class=btn btn‐dangergtBorrarltagt

42 ltdivgt43 lthrgt44 ltphp gt45 ltsectiongt46 ltfooter class=col‐lg‐12gt47 lthrgt48 Ejemplo PHP MySQLi POO MVC ‐ Viacutector Robles ‐ lta

href=httpvictorrobleswebesgtvictorrobleswebesltagt ‐ Copyright ampcopy ltphp echo date(Y) gt

49 ltfootergt50 ltbodygt51 lthtmlgt

CPEL Carreras en UsilHorarios Flexibles para Adultos Clases Presenciales y Virtuales

La extensioacutenMySQLi en PHP

CRUD conCodeigniter

Crear modelo deformulario en Yii

Controladores yvistas en Yii

Rutas y pasarvalores por URLen ZendFramework 2

Subir ficheros enCodeigniter

2Me gusta 04

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 5: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 59

update(aunque tiene sus ventajas) aunque seguacuten este paradigma no sea del todo correcto omito esto ydirectamente creo modelos de consultas en los que tengo meacutetodos que interaccionan con una tablamayoritariamente o varias seguacuten las relaciones que tengan por otra parte algunos frameworks cuentan conORMs que nos ayudan con todo esto pero de igual forma cuando tienes muchas tablas relacionadas quizaacute eluso del ORM sin controlarlo muy bien puede dificultar la tarea en cualquier caso lo maacutes correcto es tener unaclase por entidad aunque a veces no sea lo maacutes practico o coacutemodo

Truco si usas NetBeans puedes generar los getters y setters desde el menuacute Source -gt Insert Code

Aquiacute pondriacuteamos las consultas completas en lugar de utilizar los meacutetodos que tenemos en el modelo deentidad aunque tambieacuten estariacutean accesibles desde este modelo

Los controladores

Los crearemos en el directorio controller en este caso tengo creado UsuariosController

1 ltphp2 class Usuario extends EntidadBase3 private $id4 private $nombre5 private $apellido6 private $email7 private $password8 9 public function __construct() 10 $table=usuarios

11 parent__construct($table)12 13 14 public function getId() 15 return $this‐gtid16 17 18 public function setId($id) 19 $this‐gtid = $id20 21 22 public function getNombre() 23 return $this‐gtnombre24 25 26 public function setNombre($nombre) 27 $this‐gtnombre = $nombre28 29 30 public function getApellido() 31 return $this‐gtapellido32 33 34 public function setApellido($apellido) 35 $this‐gtapellido = $apellido36 37 38 public function getEmail() 39 return $this‐gtemail40 41 42 public function setEmail($email) 43 $this‐gtemail = $email44 45 46 public function getPassword() 47 return $this‐gtpassword48 49 50 public function setPassword($password) 51 $this‐gtpassword = $password52 53 54 public function save()55 $query=INSERT INTO usuarios (idnombreapellidoemailpassword)56 VALUES(NULL57 $this‐gtnombre58 $this‐gtapellido59 $this‐gtemail60 $this‐gtpassword)61 $save=$this‐gtdb()‐gtquery($query)62 $this‐gtdb()‐gterror63 return $save64 65 66 67 gt

1 ltphp2 class UsuariosModel extends ModeloBase3 private $table4 5 public function __construct()6 $this‐gttable=usuarios7 parent__construct($this‐gttable)8 9 10 Metodos de consulta11 public function getUnUsuario()12 $query=SELECT FROM usuarios WHERE email=victorvictorcom13 $usuario=$this‐gtejecutarSql($query)14 return $usuario15 16 17 gt

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 69

Las vistas

En este caso tengo la vista indexViewphp creada

1 ltphp2 class UsuariosController extends ControladorBase3 4 public function __construct()

5 parent__construct()6 7 8 public function index()9 10 Creamos el objeto usuario11 $usuario=new Usuario()12 13 Conseguimos todos los usuarios14 $allusers=$usuario‐gtgetAll()15 16 Cargamos la vista index y le pasamos valores17 $this‐gtview(indexarray(18 allusers=gt$allusers19 Hola =gtSoy Viacutector Robles20 ))21 22 23 public function crear()24 if(isset($_POST[nombre]))25 26 Creamos un usuario27 $usuario=new Usuario()28 $usuario‐gtsetNombre($_POST[nombre])29 $usuario‐gtsetApellido($_POST[apellido])30 $usuario‐gtsetEmail($_POST[email])31 $usuario‐gtsetPassword(sha1($_POST[password]))32 $save=$usuario‐gtsave()33 34 $this‐gtredirect(Usuarios index)35 36 37 public function borrar()38 if(isset($_GET[id]))39 $id=(int)$_GET[id]40 41 $usuario=new Usuario()42 $usuario‐gtdeleteById($id)43 44 $this‐gtredirect()45 46 47 48 public function hola()49 $usuarios=new UsuariosModel()50 $usu=$usuarios‐gtgetUnUsuario()51 var_dump($usu)52 53 54 55 gt

1 ltDOCTYPE HTMLgt2 lthtml lang=esgt3 ltheadgt4 ltmeta charset=utf‐8gt5 lttitlegtEjemplo PHP MySQLi POO MVClttitlegt6 ltlink href=maxcdnbootstrapcdncombootstrap320cssbootstrapmincss

rel=stylesheet type=textcss gt7 ltscript type=textjavascript

src=maxcdnbootstrapcdncombootstrap320jsbootstrapminjsgtltscriptgt8 ltscript type=textjavascript

src=ajaxgoogleapiscomajaxlibsjquery1111jqueryminjsgtltscriptgt9 ltstylegt10 input11 margin‐top5px12 margin‐bottom5px13 14 right15 floatright16 17 ltstylegt18 ltheadgt19 ltbodygt20 ltform action=ltphp echo $helper‐gturl(usuarioscrear) gt method=post

class=col‐lg‐5gt

21 lth3gtAntildeadir usuariolth3gt22 lthrgt23 Nombre ltinput type=text name=nombre class=form‐controlgt24 Apellido ltinput type=text name=apellido class=form‐controlgt25 Email ltinput type=text name=email class=form‐controlgt26 Contrasentildea ltinput type=password name=password class=form‐controlgt27 ltinput type=submit value=enviar class=btn btn‐successgt28 ltformgt29 30 ltdiv class=col‐lg‐7gt31 lth3gtUsuarioslth3gt32 lthrgt33 ltdivgt34 ltsection class=col‐lg‐7 usuario style=height400pxoverflow‐yscrollgt35 ltphp foreach($allusers as $user) recorremos el array de objetos y

obtenemos el valor de las propiedades gt36 ltphp echo $user‐gtid gt ‐37 ltphp echo $user‐gtnombre gt ‐38 ltphp echo $user‐gtapellido gt ‐39 ltphp echo $user‐gtemail gt40 ltdiv class=rightgt41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphp

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 79

El resultado ldquofinalrdquo estaacute cargando el controlador y accioacuten por defecto

Para acceder a otros controladores y acciones por la url

Este ejemplo estaacute hecho en unas tres horas podriacutea trabajarse mucho maacutes y construirnos un marco de trabajomuy bonito para nosotros y hecho por nosotros con lo cual tendriacuteamos un control y conocimiento absoluto delo que pasa por debajo El siguiente paso seria limpiar la URL mediante un htaccess y seguir daacutendolefuncionalidades antildeadiendo nuestras propias libreriacuteas para toda clase de tareas o de terceros como por ejemploPHPThumb HTML2PDF SwiftMailer Twig si queremos un motor de plantillas poderoso o incluso Active RecordORM para darle maacutes potencia

iquestPor que cuento todo esto En primer lugar para disipar las dudas del que pueda creer que no entiendo laprogramacioacuten orientada a objetos en segundo lugar para demostrar que un ex alumno de un ciclo formativo deadministracioacuten de sistemas sabe programar igual que cualquier otro de ciclos especiacuteficos de programacioacuten entercer lugar para ensentildear como se hace un programa en PHP utilizando POO y MVC con un controlador frontaly para demostrar que aunque programemos en PHP puro no tenemos porque hacer las cosas mal y no cuesta

trabajo hacerlas bien he visto varios proyectos hechos actualmente que son un verdadero caos y undespropoacutesito con esto podemos empezar a hacer buenos programas aunque no usemos un framework deterceros

Coacutedigo fuente de este ejemplo

Artiacuteculos relacionados

41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphpecho $user‐gtid gt class=btn btn‐dangergtBorrarltagt

42 ltdivgt43 lthrgt44 ltphp gt45 ltsectiongt46 ltfooter class=col‐lg‐12gt47 lthrgt48 Ejemplo PHP MySQLi POO MVC ‐ Viacutector Robles ‐ lta

href=httpvictorrobleswebesgtvictorrobleswebesltagt ‐ Copyright ampcopy ltphp echo date(Y) gt

49 ltfootergt50 ltbodygt51 lthtmlgt

CPEL Carreras en UsilHorarios Flexibles para Adultos Clases Presenciales y Virtuales

La extensioacutenMySQLi en PHP

CRUD conCodeigniter

Crear modelo deformulario en Yii

Controladores yvistas en Yii

Rutas y pasarvalores por URLen ZendFramework 2

Subir ficheros enCodeigniter

2Me gusta 04

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 6: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 69

Las vistas

En este caso tengo la vista indexViewphp creada

1 ltphp2 class UsuariosController extends ControladorBase3 4 public function __construct()

5 parent__construct()6 7 8 public function index()9 10 Creamos el objeto usuario11 $usuario=new Usuario()12 13 Conseguimos todos los usuarios14 $allusers=$usuario‐gtgetAll()15 16 Cargamos la vista index y le pasamos valores17 $this‐gtview(indexarray(18 allusers=gt$allusers19 Hola =gtSoy Viacutector Robles20 ))21 22 23 public function crear()24 if(isset($_POST[nombre]))25 26 Creamos un usuario27 $usuario=new Usuario()28 $usuario‐gtsetNombre($_POST[nombre])29 $usuario‐gtsetApellido($_POST[apellido])30 $usuario‐gtsetEmail($_POST[email])31 $usuario‐gtsetPassword(sha1($_POST[password]))32 $save=$usuario‐gtsave()33 34 $this‐gtredirect(Usuarios index)35 36 37 public function borrar()38 if(isset($_GET[id]))39 $id=(int)$_GET[id]40 41 $usuario=new Usuario()42 $usuario‐gtdeleteById($id)43 44 $this‐gtredirect()45 46 47 48 public function hola()49 $usuarios=new UsuariosModel()50 $usu=$usuarios‐gtgetUnUsuario()51 var_dump($usu)52 53 54 55 gt

1 ltDOCTYPE HTMLgt2 lthtml lang=esgt3 ltheadgt4 ltmeta charset=utf‐8gt5 lttitlegtEjemplo PHP MySQLi POO MVClttitlegt6 ltlink href=maxcdnbootstrapcdncombootstrap320cssbootstrapmincss

rel=stylesheet type=textcss gt7 ltscript type=textjavascript

src=maxcdnbootstrapcdncombootstrap320jsbootstrapminjsgtltscriptgt8 ltscript type=textjavascript

src=ajaxgoogleapiscomajaxlibsjquery1111jqueryminjsgtltscriptgt9 ltstylegt10 input11 margin‐top5px12 margin‐bottom5px13 14 right15 floatright16 17 ltstylegt18 ltheadgt19 ltbodygt20 ltform action=ltphp echo $helper‐gturl(usuarioscrear) gt method=post

class=col‐lg‐5gt

21 lth3gtAntildeadir usuariolth3gt22 lthrgt23 Nombre ltinput type=text name=nombre class=form‐controlgt24 Apellido ltinput type=text name=apellido class=form‐controlgt25 Email ltinput type=text name=email class=form‐controlgt26 Contrasentildea ltinput type=password name=password class=form‐controlgt27 ltinput type=submit value=enviar class=btn btn‐successgt28 ltformgt29 30 ltdiv class=col‐lg‐7gt31 lth3gtUsuarioslth3gt32 lthrgt33 ltdivgt34 ltsection class=col‐lg‐7 usuario style=height400pxoverflow‐yscrollgt35 ltphp foreach($allusers as $user) recorremos el array de objetos y

obtenemos el valor de las propiedades gt36 ltphp echo $user‐gtid gt ‐37 ltphp echo $user‐gtnombre gt ‐38 ltphp echo $user‐gtapellido gt ‐39 ltphp echo $user‐gtemail gt40 ltdiv class=rightgt41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphp

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 79

El resultado ldquofinalrdquo estaacute cargando el controlador y accioacuten por defecto

Para acceder a otros controladores y acciones por la url

Este ejemplo estaacute hecho en unas tres horas podriacutea trabajarse mucho maacutes y construirnos un marco de trabajomuy bonito para nosotros y hecho por nosotros con lo cual tendriacuteamos un control y conocimiento absoluto delo que pasa por debajo El siguiente paso seria limpiar la URL mediante un htaccess y seguir daacutendolefuncionalidades antildeadiendo nuestras propias libreriacuteas para toda clase de tareas o de terceros como por ejemploPHPThumb HTML2PDF SwiftMailer Twig si queremos un motor de plantillas poderoso o incluso Active RecordORM para darle maacutes potencia

iquestPor que cuento todo esto En primer lugar para disipar las dudas del que pueda creer que no entiendo laprogramacioacuten orientada a objetos en segundo lugar para demostrar que un ex alumno de un ciclo formativo deadministracioacuten de sistemas sabe programar igual que cualquier otro de ciclos especiacuteficos de programacioacuten entercer lugar para ensentildear como se hace un programa en PHP utilizando POO y MVC con un controlador frontaly para demostrar que aunque programemos en PHP puro no tenemos porque hacer las cosas mal y no cuesta

trabajo hacerlas bien he visto varios proyectos hechos actualmente que son un verdadero caos y undespropoacutesito con esto podemos empezar a hacer buenos programas aunque no usemos un framework deterceros

Coacutedigo fuente de este ejemplo

Artiacuteculos relacionados

41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphpecho $user‐gtid gt class=btn btn‐dangergtBorrarltagt

42 ltdivgt43 lthrgt44 ltphp gt45 ltsectiongt46 ltfooter class=col‐lg‐12gt47 lthrgt48 Ejemplo PHP MySQLi POO MVC ‐ Viacutector Robles ‐ lta

href=httpvictorrobleswebesgtvictorrobleswebesltagt ‐ Copyright ampcopy ltphp echo date(Y) gt

49 ltfootergt50 ltbodygt51 lthtmlgt

CPEL Carreras en UsilHorarios Flexibles para Adultos Clases Presenciales y Virtuales

La extensioacutenMySQLi en PHP

CRUD conCodeigniter

Crear modelo deformulario en Yii

Controladores yvistas en Yii

Rutas y pasarvalores por URLen ZendFramework 2

Subir ficheros enCodeigniter

2Me gusta 04

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 7: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 79

El resultado ldquofinalrdquo estaacute cargando el controlador y accioacuten por defecto

Para acceder a otros controladores y acciones por la url

Este ejemplo estaacute hecho en unas tres horas podriacutea trabajarse mucho maacutes y construirnos un marco de trabajomuy bonito para nosotros y hecho por nosotros con lo cual tendriacuteamos un control y conocimiento absoluto delo que pasa por debajo El siguiente paso seria limpiar la URL mediante un htaccess y seguir daacutendolefuncionalidades antildeadiendo nuestras propias libreriacuteas para toda clase de tareas o de terceros como por ejemploPHPThumb HTML2PDF SwiftMailer Twig si queremos un motor de plantillas poderoso o incluso Active RecordORM para darle maacutes potencia

iquestPor que cuento todo esto En primer lugar para disipar las dudas del que pueda creer que no entiendo laprogramacioacuten orientada a objetos en segundo lugar para demostrar que un ex alumno de un ciclo formativo deadministracioacuten de sistemas sabe programar igual que cualquier otro de ciclos especiacuteficos de programacioacuten entercer lugar para ensentildear como se hace un programa en PHP utilizando POO y MVC con un controlador frontaly para demostrar que aunque programemos en PHP puro no tenemos porque hacer las cosas mal y no cuesta

trabajo hacerlas bien he visto varios proyectos hechos actualmente que son un verdadero caos y undespropoacutesito con esto podemos empezar a hacer buenos programas aunque no usemos un framework deterceros

Coacutedigo fuente de este ejemplo

Artiacuteculos relacionados

41 lta href=ltphp echo $helper‐gturl(usuariosborrar) gtampid=ltphpecho $user‐gtid gt class=btn btn‐dangergtBorrarltagt

42 ltdivgt43 lthrgt44 ltphp gt45 ltsectiongt46 ltfooter class=col‐lg‐12gt47 lthrgt48 Ejemplo PHP MySQLi POO MVC ‐ Viacutector Robles ‐ lta

href=httpvictorrobleswebesgtvictorrobleswebesltagt ‐ Copyright ampcopy ltphp echo date(Y) gt

49 ltfootergt50 ltbodygt51 lthtmlgt

CPEL Carreras en UsilHorarios Flexibles para Adultos Clases Presenciales y Virtuales

La extensioacutenMySQLi en PHP

CRUD conCodeigniter

Crear modelo deformulario en Yii

Controladores yvistas en Yii

Rutas y pasarvalores por URLen ZendFramework 2

Subir ficheros enCodeigniter

2Me gusta 04

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 8: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 89

Compartir este post

6 Comentarios

2Me gusta 04

Autor Victor

Desarrollador web

Responder

Bea

4 SEPTIEMBRE 2014

Muchas gracias es precisamente lo que estaba buscando Gran trabajo

Responder

David

12 SEPTIEMBRE 2014

Muy buen tutorial graciasPero tengo una duda Digamos que de una consulta obtengo informacioacuten de dos tablas Queentidad se ha de llamarcrearPor ejemplo tengo la tabla usuarios y la tabla direcciones Se relacionan por una FK usuario_idpresente en direcciones Cuando realizo una consulta de ambas tablas y obtengo las diferentescolumnas ya no podreacute crear una entidad Usuario ya que recibo informacioacuten tambieacuten de la otratabla Que hacer en estos casos

Responder

Viacutector Robles

18 DICIEMBRE 2014

En este ejemplo te puedes hacer un meacutetodo que sea getUserDirections en la entidad deusuario por ejemplo y dentro de este se hacen las consultas o lo que sea Lo que sehace en los ORM como Doctrine o Eloquent es establecer relaciones en este caso seriauna relacioacuten OneToOne ya que se supone que hay una direccioacuten por usuario

Responder

Sergio Castillo

6 OCTUBRE 2014

Gracias execelente turorial muchas gracias por el tiempo tomado en publicarlo y ensentildearnos elmodo correcto de trabajar

Armin Vera

29 OCTUBRE 2014

Estimado Victor estoy totalmente de acuerdo con cada uno de los motivos por los cualesdesarrollaste este ejemplo Quiero compartir un punto que me parecioacute importante que lonombraras y es que el lenguaje no hace al programador ni el programador al lenguaje si no que elprogramador puede programar bien o mal dependiendo de su buena o mala decisioacuten Digo estoporque me ha tocado compartir sobre todo con programadores de Python que sacan en cara dePHP que se presta para muchos ldquocaos y despropoacutesitosrdquo como dices tuacute en tu publicacioacuten Pero asiacutetambieacuten Basic C Pascal Python C y etc etc etc pueden prestarse para caos y despropoacutesitos en lamedida que el programador no pueda ordenar una loacutegicaSi bien es cierto hoy el mercado busca que los desarrollos sean orientados a objetos esto no quieredecir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en total

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015

Page 9: Ejemplo PHP + POO + MVC - Victor Robles _ Victor Robles

1922015 Ejemplo PHP + POO + MVC shy Victor Robles | Victor Robles

httpvictorrobleswebes20140715ejemploshyphpshypooshymvc 99

Enviar comentario

Poner un comentario

Tu direccioacuten de correo electroacutenico no seraacute publicada Los campos necesarios estaacuten marcados

Nombre

Correo electroacutenico

Web

Comentario

Puedes usar las siguientes etiquetas y atributos HTML lta href= title=gt ltabbr title=gt

ltacronym title=gt ltbgt ltblockquote cite=gt ltcitegt ltcodegt ltdel datetime=gt ltemgt ltigt ltq

cite=gt ltstrikegt ltstronggt

Responder

decir que toda solucioacuten deba obedecer al paradigma orientado a objetos Por lo tanto estoy en totaldesacuerdo con aquellos que reclaman en contra de PHP por ser ocupado muchas veces en formaestructurada dentro de paacuteginas htmlphp Es decisioacuten del programador el seguir un patroacuten MVC onoacute y no es cosa del lenguaje pedirle al programador por tema de buenas praacutecticas o lo que sequiera seguir tal o cual modelo de desarrolloPor uacuteltimo si PHP fuera un lenguaje malo no creo que proyectos como MySQL quisieran adoptarlocomo futuro lenguaje para sus scripts (esto seguacuten una noticia que alcanceacute a leer su tiacutetulo pero no sucontenido) ni tampoco creo que Facebook se haya desarrollado en PHP durante tanto tiempo (iquestauacutense desarrolla en PHP)Espero haber sido defensor durante algunos instantes de un excelente lenguaje de programacioacutenque se ha ldquorobado la peliacuteculardquo durante tantos antildeos

Responder

Maracile

6 FEBRERO 2015

Hola Victor

agradecerte el esfuerzo e intereacutes en compartir un articulo tan bueno muy buena ayuda de verdad

Un saludo

Desarrollado por Victor Robles copy 2015