PHP - Redirección ELSE MVC

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

Redirección ELSE MVC

Publicado por Roberto (3 intervenciones) el 27/09/2019 13:39:23
Hola buenos dias.
Estoy empezando un desarrollo manual (para practicar) de una web con MVC (Modelo Vista COntrolador)
Pero me encuentro con un error, el cual no me deja continuar.
Y ya no se como solucionarlo, porque realmente no se donde proviene.

Bueno el problema realmente se trata de que cuando accedo a la web (Si la ruta no está definida (es decir solo está localhost/(carpetaDelProyecto)/ ) la web siempre va a ir a INICIO a lo primero que quiero que ven. Luego tengo una condicional que si en la primera ruta está definido un nombre de algo que no esta dentro de mi lista blanca de nombre permitidos me muestre un error de que no se puede acceder.

Cuando entro al localhost de mi proyecto sale este error

Anotacion-2019-09-27-131959

si pongo en la url una palabra que no esté dentro de mi lista blanca muestra exactamente el mismo error sin hacer caso a mis condicionales.

Pero si pongo en la URL palabras que están dentro de la lista permitida (como inicio, admin, entre otras cosas si funciona)
Por ejemplo INICIO:

Anotacion-2019-09-27-132304


Ahora bien pongo el codigo que estoy usando en mi Plantilla, Vista y Controlador al igual que en mi .htaccess

Archivo controlvista.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
    require_once "./modelos/modelvista.php";
    class controlvista extends modelvista{
 
        public function obtener_plantilla_control(){
          return require_once './vistas/plantilla.php';
        }
 
        public function obtener_vistas_controlador (){
          if(isset($_GET['views'])){
            $ruta=explode('/', $_GET['views']);
            $respuesta=modelvista::obtener_vistas_modelo($ruta[0]);
          }else{
                  $respuesta='inicio';
            }
 
            return $respuesta;
 
        }
    }


Archivo modelvista.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class modelvista{
      protected function obtener_vistas_modelo($vistas){
        $listapermitida=['admin', 'inicio', 'payments', 'period',
                          'registration', 'representative', 'salon',
                          'school','error', 'section', 'hola', 'student', 'subject',
                          'teacher'];
              if(in_array($vistas, $listapermitida)){
                  if(is_file('./vistas/contenidos/'.$vistas.'vista.php')){
                    $contenido='./vistas/contenidos/'.$vistas.'vista.php';
                  }
                  else{
                      $contenido='error';
                  }
              }
              else{
                  $contenido='error';
              }
 
            return $contenido;
 
      }
 
    }


archivo plantilla.php (aquí se van a mostrar todos los contenidos que yo quiera dentro del espacio blanco)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<html lang="es">
<head>
	<title><?php echo COMPANY ?></title>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
	<link rel="stylesheet" href="vistas/css/main.css">
</head>
<body>
 
<?php
require_once './controller/controlvista.php';
 
$vt = new controlvista();
$vistasr=$vt->obtener_vistas_controlador();
 ?>
 
	<!-- SideBar -->
<?php
include 'vistas/modulos/menulateral.php';
?>
 
<section class="full-box dashboard-contentPage">
<!-- NavBar -->
<?php
include 'vistas/modulos/navegacion.php';
 ?>
 
 
 <?php
 include $vistasr;
  ?>
 
</section>
	<!--====== Scripts -->
<?php
include 'vistas/modulos/footerscript.php';
?>
 
</body>
</html>


Archivo .htaccess (Donde tengo la condicional views del controlvista.php)

1
2
3
4
Options All -Indexes
 
RewriteEngine on
RewriteRule ^([a-zA-Z0-9/]+)$ index.php?views=$1



Ahora bien luego de unas pruebas creo que el error no es que los condicionales no funcionan creo que de alguna forma no estoy accediendo a la carpeta donde esta el contenido cuando no hay URL al momento del primer inicio de abrir la WEB y cuando pongo error ya que si cambio mi mi archivo modelvista por esto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
 
    class modelvista{
      protected function obtener_vistas_modelo($vistas){
        $listapermitida=['admin', 'inicio', 'payments', 'period',
                          'registration', 'representative', 'salon',
                          'school','error', 'section', 'hola', 'student', 'subject',
                          'teacher'];
              if(in_array($vistas, $listapermitida)){
                  if(is_file('./vistas/contenidos/'.$vistas.'vista.php')){
                    $contenido='./vistas/contenidos/'.$vistas.'vista.php';
                  }
                  else{
                      $contenido='./vistas/contenidos/'.error.'vista.php';  /* CAMBIE ESTO */
                  }
              }
              else{
                  $contenido='./vistas/contenidos/'.error.'vista.php';  /* CAMBIE ESTO */
              }
 
            return $contenido;
 
      }
 
    }

Ahora con esta edición si se muestra y funciona correctamente el condicional. Pero porque no funciona como estaba antes?
Ejemplo de imagen que funciona:

Anotacion-2019-09-27-133231

No se porque si va así y de la otra forma no D:

ahora con respecto a que la página cargue con INICIO cuando abro el proyecto http://localhost/NewPlanB/(como si aquí escribiera inicio)

lo pude solucionar de la misma forma, mi archivo de controlvista.php lo edite asi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
    require_once "./modelos/modelvista.php";
    class controlvista extends modelvista{
 
        public function obtener_plantilla_control(){
          return require_once './vistas/plantilla.php';
        }
 
        public function obtener_vistas_controlador (){
          if(isset($_GET['views'])){
            $ruta=explode('/', $_GET['views']);
            $respuesta=modelvista::obtener_vistas_modelo($ruta[0]);
          }else{
                  $respuesta='./vistas/contenidos/'.inicio.'vista.php'; /* CAMBIE ESTO */
            }
 
            return $respuesta;
 
        }
    }


Dejo imagen también de la raíz de mis archivos por si hace falta.
Anotacion-2019-09-27-134337


Se que ahora con eso que hice funciona pero no entiendo porque no va de la otra forma. quisiera entenderlo y cambiarlo. Ya que a mi parecer la solucion que encontre es un poco mmmm asi tipo mala práctica no se me parece.


En resumen quisiera saber porque como estaba antes no funciona si cuando uso palabras dentro de mi lista blanca si entra la contenido.
Y si la forma como lo solucione esta bien o es un poco chapuza.

Es bastante larga mi explicación y tampoco se si me estoy explicando muy bien o necesitan más información, tampoco si mi codigo es muy %$$&/%/&$... pero agradeceria su ayuda un monton... Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redirección ELSE MVC

Publicado por Alejandro (839 intervenciones) el 27/09/2019 20:55:56
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
En el archivo de plantilla.php en la linea 31 hay un include $vistasr;
prueba a ver el valor de $vistasr
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

Redirección ELSE MVC

Publicado por Roberto (3 intervenciones) el 27/09/2019 21:35:10
Ya vi el valor que imprime y es el correo, en cada caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redirección ELSE MVC

Publicado por Alejandro (839 intervenciones) el 27/09/2019 23:23:41
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Sin saber que trae la variable no te podemos decir si es correcto o no.
Ademas del valor de la variable toma en cuenta si es una ruta absoluta o relativa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

Redirección ELSE MVC

Publicado por Roberto (3 intervenciones) el 28/09/2019 02:22:52
Gracias por comentar lo de "ruta absoluta o relativa." eso me hizo averiguar exactamente lo que necesitaba
Cambié mi codigo de plantilla.php

1
2
3
4
5
6
7
8
9
if ($vistasr=="error") {
 	include './vistas/contenidos/errorvista.php'; /* Esto genera que cargue la web de error cumpliendo las condiciones de el archivo de modelvista.php (si existe la palabra en la lista blanca pero no le archivo carga error y si no existe la palabra en la misma pues carga también error) */
 }
 elseif ($vistasr=="inicio") {
 	include './vistas/contenidos/iniciovista.php'; /* esto me ayuda a cuando controlvista envia a $vistasr INICIO que cargue el include de inicio para que apenas entres a la web (En este caso a la carpeta del proyecto) tengamos el inicio */
 }
 else {
 require_once $vistasr; /* esto ya que si activas alguna de las palabras permitidas en la lista blanca de modelvista cargue el include que corresponda a cada uno */
 }

tambien encontre otras formas de ponerlo gracias a eso, pero por ahora para continuar se va a quedar así.

Resulta que el problema de antes, era que estaba imprimiendo una palabra dentro del archivo plantilla y no una url para el include por lo cual no encontraba el archivo para cargar la vista que quería, algo que si sucedía al poner en la barra de direcciones palabras permitidas y cargaba una URL para el include en $vistasr por el codigo planteado en el area de modelovista.php

1
2
3
4
5
6
7
8
$listapermitida=['admin', 'inicio', 'payments', 'period',
                          'registration', 'representative', 'salon',
                          'school','error', 'section', 'hola', 'student', 'subject',
                          'teacher'];
              if(in_array($vistas, $listapermitida)){
                  if(is_file('./vistas/contenidos/'.$vistas.'vista.php')){
                    $contenido='./vistas/contenidos/'.$vistas.'vista.php';
                  }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar