Update 3.2.0
This commit is contained in:
parent
5be76d38f6
commit
c341a9b84b
|
@ -6,7 +6,7 @@ class Bdd
|
|||
{
|
||||
public $bdd;
|
||||
|
||||
public function __construct($bdd = 'bdd')
|
||||
public function __construct($bdd = 'default')
|
||||
{
|
||||
switch ($bdd) {
|
||||
case 'bdd1':
|
||||
|
|
|
@ -22,6 +22,7 @@ class Controlleur
|
|||
}
|
||||
// no break
|
||||
default:
|
||||
//si c'est une route symfony alors on appelle le conduit associé
|
||||
if ($application->route != null) {
|
||||
$application->url->page['name'] = $application->route['_route'];
|
||||
$conduit = explode('::', $application->route['controller']);
|
||||
|
@ -32,20 +33,20 @@ class Controlleur
|
|||
$class->initialize($application);
|
||||
$this->vue = new VueVide();
|
||||
$this->vue->ecran = $class->$method();
|
||||
//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'];
|
||||
require TRAITEMENT_PATH . DIRECTORY_SEPARATOR . $application->url->page['name'] . '.php';
|
||||
//sinon c'est une page MVC normale
|
||||
} else {
|
||||
$this->modele = new Modele($application->url->page);
|
||||
//on appelle le garde d'authentification
|
||||
if(isset($this->modele->page['authentification']) && $this->modele->page['authentification'] == 'yes'){
|
||||
//on declare la session lors du chargement du controlleur,
|
||||
// ainsi on instancie la page précédente et le javascript et le css asynchrone
|
||||
\MVC\Object\Session::createAndTestSession();
|
||||
}else{
|
||||
\MVC\Object\Session::sessionStart();
|
||||
\MVC\Object\History::setPagePrecedente();
|
||||
\MVC\Object\Asynchronous::declare();
|
||||
}
|
||||
//fixme: doit on passer l'application entière dans la vue ou seulement $application->modele->page ?
|
||||
$this->vue = new Vue($this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,17 +7,21 @@ class ControlleurAction
|
|||
{
|
||||
public static function inserer($action, $data = array())
|
||||
{
|
||||
//on extrait la classe d'appel de l'action
|
||||
$action = explode('.', $action);
|
||||
$class = ucfirst($action[0]) . "Action";
|
||||
//echo $class;
|
||||
//TODO: use try ... catch with \MVC\Classe\Logger to log error
|
||||
if (is_file(ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php")) {
|
||||
require_once ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php";
|
||||
//On charge la classe Action de façon réflextive
|
||||
$slot = new $class();
|
||||
//si l'action passé en parametre est fournit avec une methode pointée on charge celle demandée sinon on charge celle par defaut
|
||||
if (isset($action[1])) {
|
||||
$method = $action[1];
|
||||
//On appel la méthode de la classe action de manière reflextive
|
||||
return $slot->$method(...$data);
|
||||
} else {
|
||||
return $slot->default($data);
|
||||
return $slot->default(...$data);
|
||||
}
|
||||
} else {
|
||||
/*HandleError*/
|
||||
|
|
|
@ -23,13 +23,8 @@ class HttpMethod
|
|||
case 'POST':
|
||||
break;
|
||||
case 'PUT':
|
||||
//$this->data['GET'] = ...
|
||||
//POST DATA except enctype="multipart/form-data"
|
||||
$this->data = json_decode(file_get_contents("php://input"), true);
|
||||
// no break
|
||||
case 'DELETE':
|
||||
//$this->data['GET'] = ...
|
||||
//POST DATA except enctype="multipart/form-data"
|
||||
//on décode les données depuis l'input afin de les traiter
|
||||
$this->data = json_decode(file_get_contents("php://input"), true);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -3,42 +3,6 @@
|
|||
|
||||
namespace MVC\Classe;
|
||||
|
||||
/**
|
||||
* Class Response
|
||||
*
|
||||
* example use:
|
||||
* $data = array('a','b','c');
|
||||
*
|
||||
* Three Way to send a request
|
||||
*
|
||||
* $request = new Response('http://myurl','mymethod');
|
||||
* $request->addContent($data);
|
||||
* $request->send();
|
||||
*
|
||||
* OR
|
||||
*
|
||||
* $request = new Response('http://myurl');
|
||||
* (
|
||||
* $request->createContext('mymethod')
|
||||
* $request->addContent($data);
|
||||
* $request->send();
|
||||
* ) OR (
|
||||
* $request->get($data);
|
||||
* $request->post($data);
|
||||
* $request->put($data);
|
||||
* $request->delete($data);
|
||||
*
|
||||
*
|
||||
* OR
|
||||
*
|
||||
* $request = new Response();
|
||||
* $request->setUrl('http://myurl')->get($data)
|
||||
* $request->setUrl('http://myurl')->post($data)
|
||||
* $request->setUrl('http://myurl')->put($data)
|
||||
* $request->setUrl('http://myurl')->delete($data)
|
||||
*
|
||||
* @package MVC\Classe
|
||||
*/
|
||||
class HttpMethodRequete
|
||||
{
|
||||
protected $url;
|
||||
|
|
|
@ -6,6 +6,25 @@ namespace MVC\Classe\Implement;
|
|||
class Action
|
||||
{
|
||||
public function render($view, $data)
|
||||
{
|
||||
return $this->renderBlade($view,$data);
|
||||
}
|
||||
|
||||
public function renderTwig($view, $data)
|
||||
{
|
||||
$paths = new \SplPriorityQueue;
|
||||
|
||||
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "system", 100);
|
||||
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "layout", 200);
|
||||
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "view", 300);
|
||||
|
||||
$renderer = new \Windwalker\Renderer\TwigRenderer($paths);
|
||||
$view .= '.html';
|
||||
|
||||
return $renderer->render($view, $data);
|
||||
}
|
||||
|
||||
public function renderBlade($view, $data)
|
||||
{
|
||||
$paths = new \SplPriorityQueue;
|
||||
|
||||
|
|
|
@ -30,11 +30,20 @@ class Modele
|
|||
$this->page[$matches[1]] = $matches[2];
|
||||
}
|
||||
}
|
||||
|
||||
$this->page['url_params'] = $base_param['params'];
|
||||
//export nom a nom les variable dans la superglobale $_GET
|
||||
foreach($base_param['params'] as $key => $value){
|
||||
$_GET[$key] = $value;
|
||||
}
|
||||
} else {
|
||||
$this->page['name'] = $base_param['name'];
|
||||
$this->page['description'] = $base_param['description'];
|
||||
$this->page['params'] = $base_param['params'];
|
||||
//export nom a nom les variable dans la superglobale $_GET
|
||||
foreach($base_param['params'] as $key => $value){
|
||||
$_GET[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
namespace MVC\Classe;
|
||||
|
||||
//require_once dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."define-constantes.php";
|
||||
|
||||
class Url
|
||||
{
|
||||
public $page;
|
||||
|
@ -37,21 +35,20 @@ class Url
|
|||
}
|
||||
}
|
||||
|
||||
//print_r($urlParts);
|
||||
//Récupération du nom de la page
|
||||
if (isset($urlParts[0])) {
|
||||
//Récupération du nom de la page
|
||||
($urlParts[0] == 'index' || $urlParts[0] == '') ? $page['name'] = 'index' : $page['name'] = $urlParts[0];
|
||||
//il se peut que l'on ait des variable avec ? dans l'url
|
||||
$urlQuery = explode('?', $urlParts[0]);
|
||||
$urlQueryPageName = $urlQuery[0];
|
||||
($urlQueryPageName == 'index' || $urlQueryPageName == '') ? $page['name'] = 'index' : $page['name'] = $urlQueryPageName;
|
||||
unset($urlParts[0]);
|
||||
} else {
|
||||
$page['name'] = 'index';
|
||||
}
|
||||
|
||||
//il se peut que l'on ait des variable avec ? dans l'url
|
||||
$urlQuery = explode('?', $page['name']);
|
||||
$page['name'] = $urlQuery[0];
|
||||
|
||||
$page['name'] = strtolower($page['name']);
|
||||
|
||||
//si c'est une page de controle de formulaire : on renomme la page
|
||||
if ($page['name'] == 'control') {
|
||||
$page['control'] = true;
|
||||
($urlParts[1] == 'index' || $urlParts[1] == '') ? $page['name']='index' : $page['name']=$urlParts[1];
|
||||
|
@ -60,7 +57,7 @@ class Url
|
|||
|
||||
//vérification du nombre de parametres:
|
||||
$numParts = count($urlParts);
|
||||
//s'il n'existe pas autant de clé que de valeurs, ce peut ^etre un module symfony
|
||||
//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
|
||||
if (!in_array($page['name'], $this->registre->getIndex())) {
|
||||
|
@ -81,10 +78,13 @@ class Url
|
|||
// si c'est un module alors on charge un a un les parametres
|
||||
if (in_array($page['name'], $this->registre->getIndex())) {
|
||||
foreach ($urlParts as $key => $value) {
|
||||
$values[] = $value;
|
||||
$keys[] = $key;
|
||||
if ($key % 2 == 0) {
|
||||
$values[] = $value;
|
||||
} else {
|
||||
$keys[] = $value;
|
||||
}
|
||||
}
|
||||
$page['params'] = $values;
|
||||
$page['params'] = array_combine($keys, $values);
|
||||
// sinon c'est une page normal du framework
|
||||
} else {
|
||||
$values = array();
|
||||
|
@ -96,11 +96,7 @@ class Url
|
|||
$keys[] = $value;
|
||||
}
|
||||
}
|
||||
if ($page['control']) {
|
||||
$page['params'] = array_combine($values, $keys);
|
||||
} else {
|
||||
$page['params'] = array_combine($keys, $values);
|
||||
}
|
||||
$page['params'] = array_combine($keys, $values);
|
||||
}
|
||||
}
|
||||
$page['name'] = lcfirst($page['name']);
|
||||
|
@ -112,21 +108,29 @@ class Url
|
|||
//recherche du fichier controlleur correpondant HTTP1.1 ou HTTP1.0
|
||||
switch ($method) {
|
||||
//cas des requètes HTTP1.1
|
||||
case 'PUT':
|
||||
case 'DELETE':
|
||||
case 'GET':
|
||||
case 'POST':
|
||||
if ($appRequest) {
|
||||
$page['name'] = ucfirst($page['name']);
|
||||
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
|
||||
if (!file_exists($pageFile)) {
|
||||
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
|
||||
}
|
||||
} else {
|
||||
$page['name'] = lcfirst($page['name']);
|
||||
$pageFile = CONTROLLERS_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
|
||||
if (!file_exists($pageFile)) {
|
||||
$page['name'] = ucfirst($page['name']);
|
||||
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
|
||||
if (!file_exists($pageFile)) {
|
||||
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'PUT':
|
||||
case 'DELETE':
|
||||
$page['name'] = ucfirst($page['name']);
|
||||
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -155,15 +159,6 @@ class Url
|
|||
}
|
||||
}
|
||||
|
||||
public static function module_link_rewrite($page, $params = array())
|
||||
{
|
||||
$stringParams = '';
|
||||
foreach ($params as $values) {
|
||||
$stringParams .= "/" . $values;
|
||||
}
|
||||
return '/' . BASE_SERVER_DIRECTORY . $page . $stringParams;
|
||||
}
|
||||
|
||||
private static function link_rewrite_slashParam($page, $params = array())
|
||||
{
|
||||
$stringParams = '';
|
||||
|
@ -194,8 +189,7 @@ class Url
|
|||
$base_url = $scheme . "://" . $url;
|
||||
$url = $base_url;
|
||||
}else{
|
||||
$base_url = PATH_URL;
|
||||
$url = $base_url . BASE_SERVER_DIRECTORY;
|
||||
$url = PATH_URL;
|
||||
}
|
||||
if ($isControlPatern) {
|
||||
$uri = self::controlLink_rewrite($page, $params);
|
||||
|
@ -210,4 +204,20 @@ class Url
|
|||
public static function getBaseDirectory(){
|
||||
return '/' . BASE_SERVER_DIRECTORY;
|
||||
}
|
||||
|
||||
public static function getRootDirectoryUrl(){
|
||||
if(isset($_SERVER['HTTP_HOST'])) {
|
||||
$url = $_SERVER['HTTP_HOST'];
|
||||
if (isset($_SERVER['REQUEST_SCHEME'])) {
|
||||
$scheme = $_SERVER['REQUEST_SCHEME'];
|
||||
} else {
|
||||
$scheme = 'http';
|
||||
}
|
||||
$base_url = $scheme . "://" . $url;
|
||||
$url = $base_url;
|
||||
}else{
|
||||
$url = PATH_URL;
|
||||
}
|
||||
return $url . BASE_SERVER_DIRECTORY;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,23 +12,34 @@ class Vue
|
|||
$templateData = array();
|
||||
extract($application->modele->page);
|
||||
|
||||
ob_start();
|
||||
if (file_exists(VIEW_PATH.DIRECTORY_SEPARATOR."view".DIRECTORY_SEPARATOR.$name.".blade.php")) {
|
||||
if(!isset($engine)){$engine = 'blade';}
|
||||
$flag_exist = false;
|
||||
switch ($engine){
|
||||
case 'twig':
|
||||
if (file_exists(VIEW_PATH.DIRECTORY_SEPARATOR."view".DIRECTORY_SEPARATOR.$name.".html.twig")) {
|
||||
$flag_exist = true;
|
||||
}
|
||||
break;
|
||||
case 'blade':
|
||||
default:
|
||||
if (file_exists(VIEW_PATH.DIRECTORY_SEPARATOR."view".DIRECTORY_SEPARATOR.$name.".blade.php")) {
|
||||
$flag_exist = true;
|
||||
}
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
if($flag_exist){
|
||||
//l'inclusion du controlleur doit renvoyer le tableau $templateData
|
||||
require CONTROLLER_PATH . DIRECTORY_SEPARATOR . $name . '.php';
|
||||
|
||||
|
||||
|
||||
//TEMPLATING BLADE
|
||||
//WINWALKER TEMPLATING ENGINE
|
||||
$paths = new \SplPriorityQueue;
|
||||
|
||||
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "system", 100);
|
||||
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "layout", 200);
|
||||
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "view", 300);
|
||||
|
||||
if(!isset($engine)){$engine = 'blade';}
|
||||
|
||||
switch ($engine){
|
||||
case 'twig':
|
||||
$renderer = new \Windwalker\Renderer\TwigRenderer($paths);
|
||||
|
@ -36,7 +47,7 @@ class Vue
|
|||
break;
|
||||
case 'blade':
|
||||
default:
|
||||
$renderer = new \Windwalker\Renderer\BladeRenderer($paths, array('cache_path' => VIEW_PATH . DIRECTORY_SEPARATOR . "cache"));
|
||||
$renderer = new \Windwalker\Renderer\BladeRenderer($paths, array('cache_path' => VIEW_PATH . DIRECTORY_SEPARATOR . "cache"));
|
||||
}
|
||||
|
||||
|
||||
|
@ -44,6 +55,7 @@ class Vue
|
|||
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';
|
||||
|
|
|
@ -1,10 +1,20 @@
|
|||
#Comment modifier proprement une page contenu dans le framework SAND
|
||||
|
||||
Tout d’abord il vous faut reconnaitre la vue pour aller chercher le bon fichier à modifier dans le dossier `application/include`.
|
||||
Tout d’abord il vous faut reconnaitre le nom de la page suivant le routage pour aller chercher les bons fichiers à modifier dans le dossier `include`.
|
||||
|
||||
Si vous désirez modifier le comportement d’une page il vous faudra très certainement modifier le contrôleur et la view associé, voir peut-être l’action et sa vue.
|
||||
Par exemple : pour la page `index`, les bon fichiers à modifier sont :
|
||||
|
||||
Si vous désirez juste modifier l’affichage, il vous suffira simplement de modifier la vue blade ou twig suivant le moteur de rendu.
|
||||
- `application/include/controlleurs/index.php`
|
||||
- `application/include/modeles/index.model`
|
||||
- `application/include/vues/view/index.blade.php` ou `application/include/vues/view/index.html.twig`
|
||||
|
||||
Si vous désirez modifier le comportement d’une page il vous faudra très certainement modifier le contrôleur et la vue associée, voire peut-être l’action et sa vue si la vue mère fait des appels de ce type.
|
||||
|
||||
Les actions se trouve dans le dossier `application/include/actions/` et leurs vues sont dans le même dossiers que les vues mères : `application/include/vues/view/`, il convient de la préfixer par `action-actionnamedescription`.
|
||||
|
||||
Le `.model` de la page contient une variable engine qui peut prendre les valeurs `blade` ou `twig`. Par défaut si ce paramètre de modèle n’est pas renseigné c’est le moteur de rendu `blade` qui sera appelé.
|
||||
|
||||
Si vous désirez juste modifier l’affichage, il vous suffira simplement de modifier la vue `blade` ou `twig` suivant le moteur de rendu.
|
||||
|
||||
Cependant si vous désirez modifier le `head` ou le `layout` de la page vous devrez modifier les fichiers dans `application/include/vues/system/` ou `application/include/vues/layout/`
|
||||
|
||||
Le fichier `.model` de la page contient une variable engine qui peut prendre les valeurs `blade` ou `twig`.
|
||||
Par défaut si ce paramètre de modèle n’est pas renseigné c’est le moteur de rendu blade qui sera appelé.
|
||||
|
|
Loading…
Reference in a new issue