- amélioration modèle objet du MVC
 - ajout des paramètres en $_GET provenant de l'url
 - ajout de deux pages pour tester tout çà
This commit is contained in:
Emmanuel ROY 2021-05-25 16:33:58 +02:00
parent 22df2ca781
commit d7ab71841e
9 changed files with 86 additions and 25 deletions

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Application
@ -9,6 +16,8 @@ class Application
public $browser;
public $route;
public $controlleur;
public function __construct()
{
@ -23,10 +32,10 @@ class Application
public function launch()
{
$controlleur = new Controlleur($this);
$this->controlleur = new Controlleur($this);
//si la page n'est un controlleur d'action alors on affiche l'écran
if (!$this->url->page['control']) {
print($controlleur->vue->ecran);
print($this->controlleur->vue->ecran);
//si on affiche l'écran alors on vide les alertes de la session
\MVC\Object\Alert::remove();
}

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Controlleur
@ -36,6 +43,10 @@ class Controlleur
//si c'est une page de traitement PRG on appelle le fichier de controle de formulaire
} elseif ($application->url->page['control']) {
$url_params = $application->url->page['params'];
foreach($application->url->page['params'] as $key => $value){
$_GET[$key] = $value;
$url_params[$key] = $value;
}
require TRAITEMENT_PATH . DIRECTORY_SEPARATOR . $application->url->page['name'] . '.php';
//sinon c'est une page MVC normale
} else {
@ -46,10 +57,10 @@ class Controlleur
// ainsi on instancie la page précédente et le javascript et le css asynchrone
\MVC\Object\Session::createAndTestSession();
}
//fixme: doit on passer l'application entière dans la vue ou seulement $application->modele->page ?
$this->vue = new Vue($this);
$this->vue = new Vue($this->modele->page);
}
}
return $this;
}
public function callHttpResponse($application)

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Modele
@ -31,7 +38,7 @@ class Modele
}
}
$this->page['url_params'] = $base_param['params'];
$this->page['all_params'] = $base_param['params'];
//export nom a nom les variable dans la superglobale $_GET
foreach($base_param['params'] as $key => $value){
$_GET[$key] = $value;
@ -39,11 +46,12 @@ class Modele
} else {
$this->page['name'] = $base_param['name'];
$this->page['description'] = $base_param['description'];
$this->page['params'] = $base_param['params'];
$this->page['all_params'] = $base_param['params'];
//export nom a nom les variable dans la superglobale $_GET
foreach($base_param['params'] as $key => $value){
$_GET[$key] = $value;
}
}
return $this;
}
}

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Url
@ -59,7 +66,7 @@ class Url
$numParts = count($urlParts);
//s'il n'existe pas autant de clé que de valeurs, ce peut ^etre un module symfony ou tout autre module
if ($numParts%2 != 0) {
//si un module symfony n'est pas reférencé avec le nom de la page, on renvoi un erreur
//si un module symfony n'est pas reférencé avec le nom de la page, on renvoi une erreur
if (!in_array($page['name'], $this->registre->getIndex())) {
$page['name'] = 'error';
$page['params'] = array();
@ -67,9 +74,10 @@ class Url
return;
} else {
foreach ($urlParts as $key => $value) {
$values[] = $value;
$keys[] = $key;
$values[] = $value;
$keys[] = $value;
}
//$page['params'] = array_combine($keys, $values);
$page['params'] = $values;
}
@ -236,18 +244,13 @@ class Url
} else {
$scheme = 'http';
}
$base_url = $scheme . "://" . $url ;
$base_url = $scheme . "://" . $url . "/";
$url = $base_url;
}else{
$url = PATH_URL;
}
if(str_ends_with($url . "/" . BASE_SERVER_DIRECTORY , '/')){
return substr($url . "/" . BASE_SERVER_DIRECTORY,0,-1);
}else {
return $url . "/" . BASE_SERVER_DIRECTORY;
}
return $url . BASE_SERVER_DIRECTORY;
}
/**
* Obtiens le fragment depuis une variable serveur,
* ce qui est selon moi possible avec une bonne configuration serveur

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Vue
@ -7,10 +14,20 @@ class Vue
public $ecran;
public $block_body;
public function __construct($application)
public function __construct($page_params)
{
$templateData = array();
extract($application->modele->page);
//$templateData = array();
$url_params = array();
$templateData = $page_params;
extract($page_params);
//de base on ajoute les parametres du .model et ceux provenant de l'url
foreach ($page_params['all_params'] as $key => $value) {
//$templateData[$key] = $value;
$_GET[$key] = $value;
$url_params[$key] = $value;
}
if(!isset($engine)){$engine = 'blade';}
$flag_exist = false;
@ -50,16 +67,12 @@ class Vue
$renderer = new \Windwalker\Renderer\BladeRenderer($paths, array('cache_path' => VIEW_PATH . DIRECTORY_SEPARATOR . "cache"));
}
//de base on ajoute les parametres du .model et ceux provenant de l'url
foreach ($application->modele->page as $key => $value) {
$templateData[$key] = $value;
}
//WINWALKER TEMPLATING ENGINE RENDER
echo $renderer->render($name, $templateData);
} else {
include CONTROLLER_PATH . DIRECTORY_SEPARATOR . $name . '.php';
}
$this->ecran = ob_get_clean();
return $this;
}
}

View file

@ -0,0 +1,6 @@
<?php
\MVC\Classe\Dumper::dump($_GET);
\MVC\Classe\Dumper::dump($url_params);
\MVC\Classe\Dumper::dump($templateData);
\MVC\Classe\Dumper::dump($GLOBALS);

View file

@ -8,5 +8,7 @@ use MVC\Classe\Logger;
\MVC\Classe\ControlleurAction::inserer('default.makeHttp11', []);
$templateData = array("templating_a"=>'blade',"templating_b"=>'twig',"templating_c"=>'edge');
$templateData["templating_a"] ='blade';
$templateData["templating_b"] ='twig';
$templateData["templating_c"] ='edge';
Logger::addLog('ok', 'Hello world');

View file

@ -0,0 +1,7 @@
<?php
\MVC\Object\Session::createAndTestSession();
\MVC\Classe\Dumper::dump($_GET);
\MVC\Classe\Dumper::dump($url_params);
\MVC\Classe\Dumper::dump($GLOBALS);

2
console/output/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*
!.gitignore