PHP - como integrar ajax en proyecto mvc?

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

como integrar ajax en proyecto mvc?

Publicado por jm (4 intervenciones) el 07/05/2019 23:46:11
Hola a todos, no hace mucho empece a aprender poo en php y estoy haciendo una tienda virtual utilizando el patrón mvc para practicar, la cosa es que quiero integrar ajax en mi código pero no se como hacerlo funcionar con mi código. Les dejo el código en cuestión:

.HTACCESS

1
2
3
4
5
6
7
8
9
10
<ifModule mod_rewrite.c>
#Activar Rewrite Engine
RewriteEngine on
ErrorDocument 404 http://localhost/tienda-poo/error/
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
 
RewriteRule ^(.*)/(.*) index.php?controller=$1&action=$2
</ifModule>


AUTOLOAD

1
2
3
4
5
6
7
<?php
 
function controller_autoload($classname){
	include 'controllers/' . $classname . '.php';
}
 
spl_autoload_register('controller_autoload');

CONTROLADOR FRONTAL O INDEX

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
41
<?php
session_start();
require_once 'autoload.php';
require_once 'config/db.php';
require_once 'config/parameters.php';
require_once 'helpers/Utils.php';
require_once 'views/layout/header.php';
 
function show_error(){
	$error = new ErrorController();
	$error->index();
}
 
if (isset($_GET['controller'])) {
	$nombre_controlador = $_GET['controller'].'Controller';
 
}elseif(!isset($_GET['controller']) && !isset($_GET['action'])){
	$nombre_controlador = controller_default;
 
}else{
	show_error();
	exit();
}
 
if (class_exists($nombre_controlador)) {
	$controlador = new $nombre_controlador();
 
	if (isset($_GET['action']) && method_exists($controlador, $_GET['action'])) {
		$action = $_GET['action'];
		$controlador->$action();
	}elseif(!isset($_GET['controller']) && !isset($_GET['action'])){
		$action_default = action_default;
		$controlador->$action_default();
	}else{
		show_error();
	}
}else{
	show_error();
}
 
require_once 'views/layout/footer.php';

Lo que estoy intentando hacer es crear un menú de filtros en el que el usuario pueda filtrar los productos por mas de un filtro si así quisiera, entonces estoy pensando en usar ajax para enviar una o mas variables a un controlador y que este las reciba por get y luego ejecute un método.
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 joel
Val: 1.871
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por joel (516 intervenciones) el 08/05/2019 07:43:48
Hola Jm, exactamente a que te refieres con "no se como hacerlo funcionar con mi código"? no sabes como crear la función para utilizar peticiones AJAX?

si nos puedes dar mas detalle...

En tu código no muestras la vista, que entiendo que es ahí donde lo quieres utilizar, no?
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: 11
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por jm (4 intervenciones) el 09/05/2019 03:35:16
Hola joel, no se como crear correctamente la función o el script para enviar por ajax datos a un controlador y necesito enviarlos no a una vista si no a un controlador, como dije anteriormente. Para ser mas exactos necesito enviar los datos de este formulario:

FORM

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
<div>
	<form id="form-filter">
		<div class="form-wrapper">
			<div class="input-wrapper">
				<button class="navbar-button form-label" type="button" id="gender-btn">GENERO <span class="form-span"><i class="fas fa-caret-down"></span></i></button>
 
                <div class="gender-wrapper" id="gender">
                    <label class="label-wrapper" for="hombre">HOMBRE
                        <input class="checkbox" type="checkbox" name="id_genero" id="hombre" value="1">
                        <span class="checkmark"></span>
                    </label>
 
                    <label class="label-wrapper" for="mujer">MUJER
                        <input class="checkbox" type="checkbox" name="id_genero" id="mujer" value="2">
                        <span class="checkmark"></span>
                    </label>
                </div>
			</div>
 
			<div class="input-wrapper">
                <button class="navbar-button form-label" type="button" id="product-btn">TIPO DE PRODUCTO <span class="form-span"><i class="fas fa-caret-down"></span></i></button>
                <?php $categorias = Utils::showCategorias(); ?>
                <div class="product-wrapper" id="produc-category">
                    <?php while($cat = $categorias->fetch_object()): ?>
                    <label class="label-wrapper" for="<?=$cat->nombre?>"><?=$cat->nombre?>
                        <input class="checkbox" type="checkbox" name="id" id="<?=$cat->nombre?>" value="<?=$cat->id?>">
                        <span class="checkmark"></span>
                    </label>
                <?php endwhile; ?>
                </div>
        	</div>
        	<div class="submit-wrapper"><button class="filter-submit" id="btn-filtros">Filtrar</button>
            </div>
		</div>
	</form>
</div>


necesito que los reciba este controlador

CATEGORIACONTROLLER

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
require_once 'models/Categoria.php';
require_once 'models/Producto.php';
 
class CategoriaController{
 
	public function filtro(){
		if (isset($_GET['id']) && isset($_GET['id_genero'])) {
			$id = $_GET['id'];
			$id_genero = $_GET['id_genero'];
 
			$categoria = new Categoria();
			$categoria->setId($id);
 
			$genero = new Categoria();
			$genero->setId($id_genero);
 
			$categoria = $categoria->getOne();
			$genero = $genero->getOneGenre();
 
			//Conseguir productos
			$producto = new Producto();
			$producto->setCategoria_id($id);
			$producto->setGenero_id($id_genero);
 
			$productos = $producto->getAllCategoryAndGenre();
		}elseif (isset($_GET['id'])) {
			$id = $_GET['id'];
 
			//Conseguir categoria
			$categoria = new Categoria();
			$categoria->setId($id);
 
			$categoria = $categoria->getOne();
 
			//Conseguir productos
			$producto = new Producto();
			$producto->setCategoria_id($id);
 
			$productos = $producto->getAllCategory();
		}else{
			if (isset($_GET['id_genero'])) {
				$id_genero = $_GET['id_genero'];
 
				$genero = new Categoria();
				$genero->setId($id_genero);
 
				$genero = $genero->getOneGenre();
 
				$producto = new Producto();
				$producto->setGenero_id($id_genero);
 
				$productos = $producto->getAllGenre();
			}
		}
	require_once 'views/categoria/ver.php';
}
 
}

y luego lo que hace la vista es simplemente comprobar si existe el objeto categoria o genero y realizar un ciclo while a productos.

he intentado enviar el value de los checbox con javascript asi:

JS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$('#filter-menu').submit(function(e){
	e.preventDefault();
 
	var url = window.location.href = 'categoria/filtro';
 
    var checkboxs = document.querySelectorAll('.checkbox:checked');
 
      checkboxs.forEach((checkbox, index) => {
        if (index == 0) {
          url += ('&' + checkbox.name + '=' + checkbox.value);
        } else {
          url += ('&' + checkbox.name + '=' + checkbox.value);
        }
      });
 
      console.log(url);
});

pero no funciono, estaba pensando en usar ajax pero no se como empezar, la razón por la que quiero usar ajax o js para enviar los valores de los inputs en vez de usar el submit del formulario es porque quiero concatenar mas de una variable sin sobrescribir la ulr, A lo que me refiero es que si el usuario filtra por una categoría la url debería quedar asi: http://localhost/tienda-poo/categoria/filtrar&primervariable=1 pero si añade otro filtro la url deberia quedar asi: http://localhost/tienda-poo/categoria/filtrar&primervarible=1&segundavariable=2.
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 Mauro
Val: 1.668
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por Mauro (467 intervenciones) el 09/05/2019 17:36:03
El cambio de la URL lo podrías lograr haciendo que el formulario utilice el método GET en lugar de POST.

Respecto de cómo lograr que el formulario llame al controlador, depende de cómo se mapeen las URLs de tu aplicación hacia métodos del controlador... ¿estás usando algún framework en particular?
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: 11
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por jm (4 intervenciones) el 09/05/2019 22:27:55
no estoy usando ningún framework, Mi .htaccess sobrescribe la url con dos parámetros, el primero seria el controlador si existe, si no carga el controlador por defecto que es ProductoController y el segundo parámetro el método de ese controlador si existe si no carga el método por defecto que es index. Si uso el js que puse antes logro que me redireccione a categoriaController/filtro pero no parece que le este llegando ningún valor.
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 Mauro
Val: 1.668
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por Mauro (467 intervenciones) el 09/05/2019 23:14:23
¿Por qué dices que no parece llegar nada? Podrías usar un var_dump sobre $_GET para ver qué llega o, mucho mejor, no usar var_dump :)
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: 11
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por jm (4 intervenciones) el 10/05/2019 00:03:07
la vista me carga el siguiente texto: NO EXISTE LA CATEGORIA , esto pasa cuando el método filtro de CategoriaController no se ejecuta, y ese método no se ejecuta cuando no le llega el dato necesario.
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 Mauro
Val: 1.668
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por Mauro (467 intervenciones) el 10/05/2019 15:34:07
Ok... Yo empezaría por examinar el contenido de $_GET en el archivo categoriaController para salir de la duda, si los datos no llegan el problema está antes, si llegan bien el problema está acá.

Hasta no saber eso es difícil corregir el error.
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 Mauro
Val: 1.668
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

como integrar ajax en proyecto mvc?

Publicado por Mauro (467 intervenciones) el 08/05/2019 16:29:22
En principio no veo qué tendrá de especial integrar ajax con MVC o con cualquier otro php...

Te puedo dejar algún ejemplo que te puede ayudar a pensar lo tuyo, puedes ver:

https://academy.leewayweb.com/un-dashboard-en-tiempo-real-basado-en-php-y-bootstrap/
https://academy.leewayweb.com/como-hacer-un-autocomplete-con-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