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

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:

Ahora bien pongo el codigo que estoy usando en mi Plantilla, Vista y Controlador al igual que en mi .htaccess
Archivo controlvista.php
Archivo modelvista.php
archivo plantilla.php (aquí se van a mostrar todos los contenidos que yo quiera dentro del espacio blanco)
Archivo .htaccess (Donde tengo la condicional views del controlvista.php)
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
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:

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
Dejo imagen también de la raíz de mis archivos por si hace falta.

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.
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

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:

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:

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.

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


0