update : ajout de l'extension twig permettant de recalibrer l'application à la fois avec le moteur de rendu twig et blade, ici l'index peut être soit twig soit blade

This commit is contained in:
Emmanuel ROY 2021-07-09 11:52:48 +02:00
parent f8bcc15874
commit e55358c819
7 changed files with 148 additions and 25 deletions

View file

@ -0,0 +1,84 @@
<?php
namespace MVC\Classe;
/**
* Class MyActionTwigExtension
* with call {{ static_call("AppBundle\Entity\YourEntity", "GetSomething", ["var1", "var2"]) }}
* other {{ action("AppBundle\Entity\YourEntity", "GetSomething", ["var1", "var2"]) }}
*
* @package MVC\Classe
*/
class TwigControlleurAction extends \Twig\Extension\AbstractExtension
{
/**
* Returns a list of functions to add to the existing list.
*
* @return \Twig\TwigFunction[]
*/
public function getFunctions() {
return array(
new \Twig\TwigFunction("action", array($this, "inserer")),
new \Twig\TwigFunction("call", array($this, "getClassMethodStatic")),
new \Twig\TwigFunction("session", array($this, "afficheSession")),
new \Twig\TwigFunction("server", array($this, "afficheServer"))
);
}
public function afficheServer($key_var = ''){
if($key_var !== ""){
if(isset($_SERVER[$key_var])) {
return $_SERVER[$key_var];
}else{
return null;
}
}else {
return $_SERVER;
}
return null;
}
public function afficheSession($key_var = ''){
if($key_var !== ""){
if(isset($_SESSION[$key_var])) {
return $_SESSION[$key_var];
}else{
return null;
}
}else {
return $_SESSION;
}
return null;
}
public static function inserer($action, $data = array())
{
//on extrait la classe d'appel de l'action
$action = explode('.', $action);
$class = ucfirst($action[0]) . "Action";
//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);
}
} else {
/*HandleError*/
}
}
public static function getClassMethodStatic($class, $method, $args = array())
{
return $class::$method(...$args);
}
}

View file

@ -60,6 +60,7 @@ class Vue
switch ($engine){ switch ($engine){
case 'twig': case 'twig':
$renderer = new \Windwalker\Renderer\TwigRenderer($paths); $renderer = new \Windwalker\Renderer\TwigRenderer($paths);
$renderer->addExtension(new \MVC\Classe\TwigControlleurAction);
$name .= '.html'; $name .= '.html';
break; break;
case 'blade': case 'blade':

View file

@ -2,7 +2,7 @@ name : index
page_title : Accueil de l'application page_title : Accueil de l'application
description : zatou stra bracadabla description : zatou stra bracadabla
engine : blade engine : twig
authentification : yes authentification : yes
ariane : {acceuil} ariane : {acceuil}

View file

@ -1,3 +1,4 @@
{% extends "system.html.twig" %}
{% block body %} {% block body %}
<!-- Body Inner --> <!-- Body Inner -->
@ -7,11 +8,12 @@
style="background: rgba(0, 0, 0, 0.59);"> style="background: rgba(0, 0, 0, 0.59);">
<div class="container"> <div class="container">
<ul class="top-menu"> <ul class="top-menu">
<li {% if name == 'docs_route' || name == 'docs_name_route' %} class="actual" {% endif %} ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', []) }}">Documentation</a></li> {{call('\\MVC\\Object\\Environment','getTextEnvironment',[]) | raw}}
<li {% if name == 'depots' %} class="actual" {% endif %} ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'gitlist/SAND-FrameWork', []) }}">Dépot</a></li> <li {% if name == 'docs_route' or name == 'docs_name_route' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'docs', []]) }}">Documentation</a></li>
<li {% if name == 'donate' %} class="actual" {% endif %} ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Donate', []) }}">Donate</a></li> <li {% if name == 'depots' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'gitlist/SAND-FrameWork', []]) }}">Dépot</a></li>
<li {% if name == 'cgu' %} class="actual" {% endif %} ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'CGU', []) }}"> CGU Terms</a></li> <li {% if name == 'donate' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'Donate', []]) }}">Donate</a></li>
<li {% if name == 'policy' %} class="actual" {% endif %} ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Policy', []) }}">Policy</a></li> <li {% if name == 'cgu' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'CGU', []]) }}"> CGU Terms</a></li>
<li {% if name == 'policy' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'Policy', []]) }}">Policy</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -38,8 +40,8 @@
<!--end: logo--> <!--end: logo-->
<nav> <nav>
<ul> <ul>
<li {% if name == 'index' %} class="actual" {% endif %} ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Index', []) }}">Index</a></li> <li {% if name == 'index' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[false, 'Index', []]) }}">Index</a></li>
<li {% if name == 'admin' %} class="actual" {% endif %} ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Admin', []) }}">Admin</a></li> <li {% if name == 'admin' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[false, 'Admin', []]) }}">Admin</a></li>
</ul> </ul>
</nav> </nav>
</div> </div>
@ -52,24 +54,43 @@
<!-- Subbar --> <!-- Subbar -->
<div id="subbar" class="fullwidth"> <div id="subbar" class="fullwidth">
<div class="container"> <div class="container">
<span style="float:left;">Vous êtes connecté en tant que {{$_SESSION['user_login']}}</span> <span style="float:left;">Vous êtes connecté en tant que {{session('user_login')}}</span>
<span style="float:right;"><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Logout', []) }}">Se Deconnecter</a></span> <span style="float:right;"><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'Logout', []]) }}">Se Deconnecter</a></span>
</div> </div>
</div> </div>
<!-- end: Subbar --> <!-- end: Subbar -->
<!-- Breadcrumbs -->
{%if ariane is defined %}
<div id="breadcrumbs" class="fullwidth">
<div class="container">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
{% for value in ariane %}
{% if value == ariane|last %}
<li class="breadcrumb-item active" aria-current="page">{{value}}</li>
{% else %}
<li class="breadcrumb-item"><a href="{{call("\\MVC\\Classe\\Url","link_rewrite",[false,arianelink[value.index],[] ])}}">{{value}}</a></li>
{% endif %}
{% endfor %}
</ol>
</nav>
</div>
</div>
{% endif %}
<section id="page-content"> <section id="page-content">
<div class="container"> <div class="container">
<!--Alerts--> <!--Alerts-->
{% if $_SESSION['alerts'] is defined %} {% if not session('alerts') == null %}
{% foreach $_SESSION['alerts'] as alert %} {% for alert in session('alerts') %}
<div class="alert alert-{{alert.type}} alert-dismissible fade show" role="alert"> <div class="alert alert-{{alert.type}} alert-dismissible fade show" role="alert">
<strong>{{alert.title}}</strong> {{alert.message}}. <strong>{{alert.title}}</strong> {{alert.message}}.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div> </div>
{% endforeach %} {% endfor %}
{% endif %} {% endif %}
<!--end: Alerts--> <!--end: Alerts-->
{% block content %}{% endblock %} {% block content %}{% endblock %}
</div> </div>
@ -84,7 +105,7 @@
<div class="widget"> <div class="widget">
<div class="widget-title"></div> <div class="widget-title"></div>
<p class="mb-5"> <p class="mb-5">
<img src="{{ \MVC\Classe\Url::asset_rewrite('assets/img/1007698-ffeb3b.svg') }}" width="150"> <img src="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/img/1007698-ffeb3b.svg']) }}" width="150">
</p> </p>
</div> </div>
</div> </div>
@ -116,4 +137,4 @@
</div> </div>
<!-- end: Body Inner --> <!-- end: Body Inner -->
{% endblock %}} {% endblock %}

View file

@ -27,29 +27,29 @@
<meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png"> <meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff"> <meta name="theme-color" content="#ffffff">
{% block top-css %} {% block topCss %}
<link rel="stylesheet" href="{{ \MVC\Classe\Url::asset_rewrite('assets/bootstrap-5.0.0-beta1-dist/css/bootstrap.min.css')}}"> <link rel="stylesheet" href="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/bootstrap-5.0.0-beta1-dist/css/bootstrap.min.css'])}}">
<link rel="stylesheet" href="{{ \MVC\Classe\Url::asset_rewrite('assets/css/custom.css')}}"> <link rel="stylesheet" href="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/css/custom.css'])}}">
{% endblock %} {% endblock %}
{% endblock %} {% endblock %}
</head> </head>
<body> <body>
{% block top-javascript %}{% endblock %} {% block topJavascript %}{% endblock %}
{% block body %}{% endblock %} {% block body %}{% endblock %}
{% block bottom-javascript %} {% block bottomJavascript %}
<script src="{{ \MVC\Classe\Url::asset_rewrite('assets/bootstrap-5.0.0-beta1-dist/js/bootstrap.min.js')}}"></script> <script src="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/bootstrap-5.0.0-beta1-dist/js/bootstrap.min.js'])}}"></script>
<script src="{{ \MVC\Classe\Url::asset_rewrite('assets/js/custom.js')}}"></script> <script src="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/js/custom.js'])}}"></script>
/* {#
SCRIPT JS permettant de ne valider qu'une seule fois un formulaire SCRIPT JS permettant de ne valider qu'une seule fois un formulaire
ATTENTION tous les formulaires sont affecté ATTENTION tous les formulaires sont affecté
Lors d'une validation bootstrap personnalisé veuillez utilisé Lors d'une validation bootstrap personnalisé veuillez utilisé
la class do-resubmit sur le formulaire afin de permettre la class do-resubmit sur le formulaire afin de permettre
l'activation supplémentaire du bouton. l'activation supplémentaire du bouton.
*/ #}
<script> <script>
window.onload = function() { window.onload = function() {
let PreventAllforms = document.querySelectorAll("form"); let PreventAllforms = document.querySelectorAll("form");

View file

@ -1 +1,10 @@
INDEX {% extends "body.html.twig" %}
{% block content %}
<h1>Accueil de l'url</h1>
<h2> {{server('SERVER_NAME')}}</h2>
<br /><br /><br />
<hr/>
{{templating_a}}::{{templating_b}}::{{templating_c}}
{{ action('default.default',[4,5,6]) }}
{% endblock %}

View file

@ -0,0 +1,8 @@
<?php
\MVC\Object\Session::createAndTestSession();
\MVC\Object\Alert::addAlert('OK','This is an alert !','info');
header('location:'.\MVC\Classe\Url::link_rewrite(false, "index", []));