- documentation markdown du framework
This commit is contained in:
Emmanuel ROY 2021-07-12 15:35:54 +02:00
parent 448f312b2e
commit 73a505ce7b
15 changed files with 630 additions and 58 deletions

View file

@ -1,10 +1,16 @@
#Les étapes de configurations de SAND
il vous faut modifier quelques valeurs dans des fichiers de configuration
- `application/config/app-parameters.php`
- `application/config/bdd-parameters.php`
il vous faut modifier quelques valeurs dans les fichiers de configuration suivant
- `application/config/app-parameters.php.skel`
- `application/config/bdd-parameters.php.skel`
Les autres fichiers contenus dans config servent pour la branche dev
et enlever l'extension `.skel` afin que l'autoload de composer puisse le prendre en compte
Dans le cas où vous voudriez utiliser les conduits vous devrez modifier le fichier `application/config/files/routing.yml`.
Vous pouvez tester une application de base simple en générant le dossier vendor en vous mettant à la racine de l'application et en lançant
`composer update`. Si votre serveur est correctement configurer pour pointer dans le dossier public sur l'index, vous devriez obtenir une application de test avec les fonctionnalités de base. En triturant un peu les fichier contenus dans le dossier `application/include` vous devriez comprendre comment se contruit une application faites avec SAND.
Les autres fichiers contenus dans config servent pour la branche dev, mais peuvent aussi servir pour votre application.
Dans le cas où vous choissisez d'utiliser les conduits lors du développement de votre application,
vous devrez modifier le fichier `application/config/files/routing.yml`.

View file

@ -12,6 +12,6 @@ où {page} est le nom :
- Du modèle contenu dans `/application/include/modeles/{page}.model`
- De la vue contenue dans `/application/include/vues/view/{page}.blade.php` ou `/application/include/vues/view/{page}.html.twig` suivant le moteur de rendu
...
Vous pouvez ainsi récupérer les variables passées en GET dans le contrôlleur depuis `$url_params['varname1']`
Dautres types durls peuvent être mises en place par la configuration du routing symfony et des conduits, il faut alors renseigner les informations de routage dans le fichier `/application/config/files/routing.yml` et faire correspondre lurl daccès au Conduit.

View file

@ -1 +1,18 @@
#Comment bien utiliser les commandes dans le framework SAND
#Comment bien utiliser les commandes dans le framework SAND
Les commandes console du framework sont toutes documentée par l'appel de la méthode help
Par exemple pour voir les méthodes associés à la commande page vous pourvez lancer la commande suivante depuis le dossier console:
`php bin.php page:help`
et vous verrez les différentes méthodes qui y sont associées.
Typiquement sur un projet on peut soit ajouter les fichiers manuellement quand on a l'habitude, soit aussi profiter des commandes:
`action`,`conduit`,`module` et `page`
Si vous avez a videz le cache des vues et des logs vous pouvez utiliser la commande
`php bin.php cache:clear`
quand a
`php bin.php cache:stabilize`
vous permet de vider le cache des vues blade et/ou twig

View file

@ -0,0 +1,14 @@
# Comment fonctionnent les objets de sessions
le dossier `application/objets` contient les classes qui sont utilisés par les sessions, vous trouverez dans ce dossier les classes suivantes:
- `Session.php` qui contient les méthodes permettant de créer les sessions, dans une application moderne il est courant de définir des droits sur les pages par un système d'authentification, ici SAND ne déroge pas à la règle et dans les fichiers .model possèdent une variable `authentification` qui peut prendre les valeurs `yes` ou `no`, ainsi le framework appelera automatiquement la méthode `createAndTestSession()` dans les controlleurs, si cette variable est défini à `no`, alors seule la méthode `sessionStart()` sera appelée, ceci afin que les alertes et l'historique puissent fonctionner.
Malheureusement les conduits et les traitements ne disposent pas d'un tel garde d'authentification, mais vous comprendrez qu'il est simple d'ajouter cette méthode au début d'un code de traitement ou de conduit.
- `Alert.php` contient quelques méthodes simples qui utilise la variable `$_SESSION`, elle est vidée a chaque génération de page sauf dans le cas des traitements, ainsi automatiquement une alerte peut être définie à afficher sur la page de redirection
- `History.php` permet d'obtenir à tout moment la page précédente de l'application, ainsi il est plus simple de rediriger les pages de traitement vers la page qui demande le traitement. Souvent dans les applications modernes vous avez un traitement qui doit être effectué depuis plusieurs pages cela permet de connaitre celle dont on provient sans passer par la variable serveur `$_SERVER["HTTP_REFERER"]` qui n'est pas toujours accessible.
- `XssToken.php` permet de définir un token dans la variable `$_SESSION` afin de protéger les formulaires de l'application contre la faille XSS.
Néanmoins il est possible que ce dossier contienne d'autres classes qui peuvent être utile, à vous de le fournir suivant les demandes de votre application.

View file

@ -0,0 +1,7 @@
#Comment faire évoluer une application écrite avec le framework SAND ?
Tout dabord, une fois lapplication créé, toutes les ressources sont téléchargée par composer et le fichier composer.lock est garant de la stabilité des dépôts auxquels lapplication fait appel. Donc normalement il ne sera pas nécessaire de faire évoluer ces ressources.
Néanmoins passer vers une nouvelle version de php par exemple de la 5.6 à la 8 nécessite des connaissances évolué des fonctions dépréciées entre les versions de PHP. SAND framework est php 8 ready, néanmoins certaines lib ne fonctionne que sur php7.3, mais celles-ci une fois installée ne changeront pas au cours du temps car elles sont directement accessibles depuis le dossier vendor.
Si vous utilisez les SPA vues.js, pensez à télécharger la version que vous utilisez afin de stabiliser votre application dans le temps, afin qu'elle ne consomme pas des ressources inutiles depuis le web.

View file

@ -8,6 +8,9 @@ name : name
page_title : Page de l'application
description : Description de la page
engine : blade
authentification : no
ariane : {acceuil, name}
arianelink : {index, name}
params1 : {val1,val2}
params2 : val
```

View file

@ -8,7 +8,222 @@ Elles sont chargées dans cette ordre:
ainsi la vue standard peut étendre de `application/include/vues/layout/body.html.twig`
```php
{% extends "system.html.twig" %}
{% block body %}
<!-- Body Inner -->
<div class="body-inner">
<!-- Topbar -->
<div id="topbar" class="d-none d-xl-block d-lg-block topbar-transparent topbar-fullwidth dark"
style="background: rgba(0, 0, 0, 0.59);">
<div class="container">
<ul class="top-menu">
{{call('\\MVC\\Object\\Environment','getTextEnvironment',[]) | raw}}
<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 == 'depots' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'gitlist/SAND-FrameWork', []]) }}">Dépot</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 == '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>
</div>
</div>
<!-- end: Topbar -->
<!-- Header -->
<header id="header" class="dark" data-transparent="true" data-fullwidth="true"
style="background: rgba(0, 0, 0, 0.59);">
<div class="header-inner">
<div class="container">
<!--Navigation Resposnive Trigger-->
<div id="mainMenu-trigger">
<a class="lines-button x"><span class="lines"></span></a>
</div>
<!--end: Navigation Resposnive Trigger-->
<!--Navigation-->
<div id="mainMenu">
<div class="container">
<!--Logo-->
<div id="logo">
<a href="#">
SAND Framework
</a>
</div>
<!--end: logo-->
<nav>
<ul>
<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="{{ call("\\MVC\\Classe\\Url","link_rewrite",[false, 'Admin', []]) }}">Admin</a></li>
<li {% if name == 'laravel' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[false, 'Laravel', []]) }}">Module Laravel</a></li>
</ul>
</nav>
</div>
</div>
<!--end: Navigation-->
</div>
</div>
</header>
<!-- end: Header -->
<!-- Subbar -->
<div id="subbar" class="fullwidth">
<div class="container">
<span style="float:left;">Vous êtes connecté en tant que {{session('user_login')}}</span>
<span style="float:right;"><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'Logout', []]) }}">Se Deconnecter</a></span>
</div>
</div>
<!-- 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">
<div class="container">
<!--Alerts-->
{% if not session('alerts') == null %}
{% for alert in session('alerts') %}
<div class="alert alert-{{alert.type}} alert-dismissible fade show" role="alert">
<strong>{{alert.title}}</strong> {{alert.message}}.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endif %}
<!--end: Alerts-->
{% block content %}{% endblock %}
</div>
</section>
<!-- Footer -->
<footer id="footer">
<div class="footer-content">
<div class="container">
<div class="row">
<div class="col-lg-3">
<div class="widget">
<div class="widget-title"></div>
<p class="mb-5">
<img src="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/img/1007698-ffeb3b.svg']) }}" width="150">
</p>
</div>
</div>
<div class="col-lg-9">
<p>
SAND FrameWork is an CC-licensed or MIT-licenced open source project and completely free to use.
</p>
<p>
However, the amount of effort needed to maintain and develop new features for the project is not
sustainable without proper financial backing.
You can support its ongoing development by being a backer or a sponsor on
<a href="https://www.patreon.com/">Patreon campaign</a>
(recurring, with perks for different tiers), and get your company logo here.
</p>
<p>
Also, you can make a <a href="https://www.paypal.me/">one time donation via PayPal</a>.
</p>
</div>
</div>
</div>
<div class="copyright-content">
<div class="container">
<div class="copyright-text text-center">&copy; 2020-2021 Built with SAND Framework - Responsive SAND Template.</div>
</div>
</div>
</div>
</footer>
<!-- end: Footer -->
</div>
<!-- end: Body Inner -->
{% endblock %}
```
qui étends de `application/include/vues/system/system.html.twig`
```php
<!DOCTYPE html>
<html>
<head>
{% block head %}
<title>{{page_title}}</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" lang="fr" content="{{description}}"/>
<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
{% block topCss %}
<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="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/css/custom.css'])}}">
{% endblock %}
{% endblock %}
</head>
<body>
{% block topJavascript %}{% endblock %}
{% block body %}{% endblock %}
{% block bottomJavascript %}
<script src="{{ call("\\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/js/custom.js'])}}"></script>
{#
SCRIPT JS permettant de ne valider qu'une seule fois un formulaire
ATTENTION tous les formulaires sont affecté
Lors d'une validation bootstrap personnalisé veuillez utilisé
la class do-resubmit sur le formulaire afin de permettre
l'activation supplémentaire du bouton.
#}
<script>
window.onload = function() {
let PreventAllforms = document.querySelectorAll("form");
Array.prototype.slice.call(PreventAllforms)
.forEach(function (PreventForm) {
PreventForm.onsubmit = submitted.bind(PreventForm);
});
}
function submitted(event) {
if (event.target.classList.contains('do-resubmit')) {
event.submitter.disabled = false;
}else{
event.submitter.disabled = true;
}
}
</script>
{% endblock %}
</body>
</html>
```

View file

@ -8,43 +8,250 @@ Elles sont chargées dans cette ordre:
ainsi la vue standard peut étendre de `application/include/vues/layout/body.blade.php`
```php
@extends('system')
@section('body')
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
@extends('system')
@section('body')
<!-- Body Inner -->
<div class="body-inner">
<!-- Topbar -->
<div id="topbar" class="d-none d-xl-block d-lg-block topbar-transparent topbar-fullwidth dark"
style="background: rgba(0, 0, 0, 0.59);">
<div class="container">
<ul class="top-menu">
{{\MVC\Object\Environment::getTextEnvironment()}}
<li @if($name == 'docs_route' || $name == 'docs_name_route') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', []) }}">Documentation</a></li>
<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 == 'donate') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Donate', []) }}">Donate</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 == 'policy') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Policy', []) }}">Policy</a></li>
<li @if($name == 'feedback') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Feedback', []) }}">Feedback</a></li>
</ul>
</div>
</div>
<!-- end: Topbar -->
<!-- Header -->
<header id="header" class="dark" data-transparent="true" data-fullwidth="true"
style="background: rgba(0, 0, 0, 0.59);">
<div class="header-inner">
<div class="container">
<!--Navigation Resposnive Trigger-->
<div id="mainMenu-trigger">
<a class="lines-button x"><span class="lines"></span></a>
</div>
<!--end: Navigation Resposnive Trigger-->
<!--Navigation-->
<div id="mainMenu">
<div class="container">
<!--Logo-->
<div id="logo">
<a href="#">
SAND Framework
</a>
</div>
<!--end: logo-->
<nav>
<ul>
<li @if($name == 'index') class="actual" @endif ><a href="{{ \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 == 'symfony4_4') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Symfony4_4', []) }}"> Module Symfony 4.4</a></li>
<li @if($name == 'symfony5_1') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Symfony5_1', []) }}"> Module Symfony 5.1</a></li>
<li @if($name == 'symfony5_2') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Symfony5_2', []) }}"> Module Symfony 5.2</a></li>
<li @if($name == 'symfony5_3') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Symfony5_3', []) }}"> Module Symfony 5.3</a></li>
</ul>
</nav>
</div>
</div>
<!--end: Navigation-->
</div>
</div>
</header>
<!-- end: Header -->
<!-- Subbar -->
@if(isset($authentification) && $authentification == 'yes')
<div id="subbar" class="fullwidth">
<div class="container">
<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>
</div>
</div>
@endif
<!-- end: Subbar -->
<!-- Breadcrumbs -->
@if (isset($ariane))
<div id="breadcrumbs" class="fullwidth">
<div class="container">
<nav aria-label="breadcrumb">
<ol class="breadcrumb-sand">
@foreach($ariane as $value)
@if($value == end($ariane))
<li class="breadcrumb-item active" aria-current="page">{{$value}}</li>
@else
<li class="breadcrumb-item"><a href="{{\MVC\Classe\Url::link_rewrite(false,$arianelink[array_search($value,$ariane)])}}">{{$value}}</a></li>
@endif
@endforeach
</ol>
</nav>
</div>
</div>
@endif
<!-- end: BreadCrumbs -->
<section id="page-content">
<div class="container">
<!--Alerts-->
@if(isset($_SESSION['alerts']))
@foreach($_SESSION['alerts'] as $alert)
<div class="alert alert-{{$alert['type']}} alert-dismissible fade show" role="alert">
<strong>{{$alert['title']}}</strong> {{$alert['message']}}.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
@endforeach
@endif
<!--end: Alerts-->
@yield('content')
</div>
</section>
<!-- Footer -->
<footer id="footer">
<div class="footer-content">
<div class="container">
<div class="row">
<div class="col-lg-3">
<div class="widget">
<div class="widget-title"></div>
<p class="mb-5">
<img src="{{ \MVC\Classe\Url::asset_rewrite('assets/img/1007698-ffeb3b.svg') }}" width="150">
</p>
</div>
</div>
<div class="col-lg-9">
<p>
SAND FrameWork is an CC-licensed or MIT-licenced open source project and completely free to use.
</p>
<p>
However, the amount of effort needed to maintain and develop new features for the project is not
sustainable without proper financial backing.
You can support its ongoing development by being a backer or a sponsor on
<a href="https://www.patreon.com/">Patreon campaign</a>
(recurring, with perks for different tiers), and get your company logo here.
</p>
<p>
Also, you can make a <a href="https://www.paypal.me/">one time donation via PayPal</a>.
</p>
</div>
</div>
</div>
<div class="copyright-content">
<div class="container">
<div class="copyright-text text-center">&copy; 2020-2021 Built with SAND Framework - Responsive SAND Template.</div>
</div>
</div>
</div>
</footer>
<!-- end: Footer -->
</div>
<!-- end: Body Inner -->
@endsection
```
qui étends de `application/include/vues/system/system.blade.php`
```php
<html>
<head>
<title>{{$page_title}}</title>
<meta name="description" lang="fr" content="{{$description}}"/>
@section('top-css')
@endsection
</head>
<body>
@section('top-javascript')
@endsection
@yield('body')
@section('bottom-javascript')
@endsection
</body>
<!DOCTYPE html>
<html>
<head>
<title>{{$page_title}}</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" lang="fr" content="{{$description}}"/>
<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
@section('top-css')
<link rel="stylesheet" href="{{ \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')}}">
@if(\MVC\Classe\Browser::get() == 'Internet Explorer')
<link rel="stylesheet" href="{{\MVC\Classe\Url::asset_rewrite('assets/html5-simple-date-input-polyfill-master/html5-simple-date-input-polyfill.css')}}">
<!--<link rel="stylesheet" href="{{\MVC\Classe\Url::asset_rewrite('assets/hyperform-0.12.0/css/hyperform.css')}}">-->
@endif
@show
</head>
<body>
@section('top-javascript')
@if(\MVC\Classe\Browser::get() == 'Internet Explorer')
<!-- Polyfill.io will load polyfills your browser needs -->
<script src="https://polyfill.io/v3/polyfill.min.js?features=default%2CNumber.parseInt%2CNumber.parseFloat%2CArray.prototype.find%2CArray.prototype.includes"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.12.1/polyfill.min.js" integrity="sha512-uzOpZ74myvXTYZ+mXUsPhDF+/iL/n32GDxdryI2SJronkEyKC8FBFRLiBQ7l7U/PTYebDbgTtbqTa6/vGtU23A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script>
<script src="{{\MVC\Classe\Url::asset_rewrite('assets/html5-simple-date-input-polyfill-master/html5-simple-date-input-polyfill.js')}}"></script>
<script src="{{\MVC\Classe\Url::asset_rewrite('assets/hyperform-0.12.0/dist/hyperform.js')}}"></script>
<script>hyperform(window);</script>
@endif
@show
@yield('body')
@section('bottom-javascript')
<script src="{{ \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>
@if(\MVC\Classe\Browser::get() !== 'Internet Explorer')
<script>
/*
SCRIPT JS permettant de ne valider qu'une seule fois un formulaire
ATTENTION tous les formulaires sont affecté
Lors d'une validation bootstrap personnalisé veuillez utilisé
la class do-resubmit sur le formulaire afin de permettre
l'activation supplémentaire du bouton.
*/
window.onload = function() {
let PreventAllforms = document.querySelectorAll("form");
Array.prototype.slice.call(PreventAllforms)
.forEach(function (PreventForm) {
PreventForm.onsubmit = submitted.bind(PreventForm);
});
}
function submitted(event) {
if (event.target.classList.contains('do-resubmit')) {
event.submitter.disabled = false;
}else{
event.submitter.disabled = true;
}
}
</script>
@endif
@show
</body>
</html>
```

View file

@ -6,4 +6,83 @@ Elles sont chargées dans le même ordre que les vues Blade normale:
* application/include/vues/layout
* application/include/vues/view
Cependant il faut inclure les biblitohèques Vue.js dans la page et coder à la mimine la SPA
Cependant il faut inclure les biblitohèques Vue.js dans la page et coder à la mimine la SPA
par exemple:
```php
@section('top-javascript')
@parent
<script src="https://unpkg.com/vue@2.6.12/dist/vue.js"></script>
<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script>
@endsection
@section('content')
<h1>%PAGE% - VUE.js Controlleur</h1>
<br/><br/><br/>
<div id="app">
<div>
<input v-model="searchText" placeholder="Search...">
</div>
<div v-if="items" >
<a href="#" v-for="item in itemsSearched" :key="item.id">
<div>
<div>
<h2>
@{{ item.title }}
</h2>
</div>
</div>
<div>
<p>
@{{ item.description.slice(0, 300) + "..." }}
</p>
</div>
<div>
<span>Year : @{{ item.release_date }}</span>
<span>Director : @{{ item.director }}</span>
<span>Producer : @{{ item.producer }}</span>
</div>
</a>
</div>
</div>
@endsection
@section('bottom-javascript')
@parent
<script>
const vue = new Vue({
el: '#app',
data: {
items: [],
searchText: ''
},
mounted() {
axios
.get('https://ghibliapi.herokuapp.com/films')
.then(response => {
this.items = response.data;
})
.catch(error => console.log(error))
},
computed : {
itemsSearched : function(){
var self = this;
if( this.searchText == ''){
return this.items;
}
return this.items.filter(function(item){
// https://www.reddit.com/r/vuejs/comments/62kfae/how_do_i_create_very_simple_instant_search_filter/
// Must be of string type
return item.title.toLowerCase().indexOf(self.searchText) >= 0 ||
item.producer.toLowerCase().indexOf(self.searchText) >= 0 ||
item.director.toLowerCase().indexOf(self.searchText) >= 0 ||
item.release_date.toString().indexOf(self.searchText) >= 0;
});
}
}
});
</script>
@endsection
```

View file

@ -53,14 +53,17 @@ class DefaultAction extends Action
}
```
avec cet accès dans la vue:
avec cet accès dans une vue blade:
```php
{{\MVC\Classe\ControlleurAction::inserer('default',[])}}
{{\MVC\Classe\ControlleurAction::inserer('default.default',[4,5,6])}}
{{\MVC\Classe\ControlleurAction::inserer('default.variableSlug',['var1','var2'])}}
{{\MVC\Classe\ControlleurAction::inserer('default.makeHttp11',[])}}
```
ou avec cet accès dans une vue twig:
```php
{{ action('default.defaultTwig',[4,5,6]) }}
{{ action('default.makeHttp11',[]) }}
```
il faut absolument que l'action retourne du texte soit par la la méthode `render` soit par un `système de tampon`

View file

@ -5,6 +5,8 @@ un controlleur similaire a Symfony qui est dénomé ici Conduit car il prend
en paramètre une route défini dans le fichier routing.yml.
Cette fonctionnalité permet de choisir la route indépendamment du moteur.
Elle est utlie aussi pour créer des appels Curl et Ajax.
il faut instancier le fichier `application/config/files/routing.yml`
avec la route de base et les routes que vous voulez conduire, par exemple:
```yml
@ -48,3 +50,4 @@ class FooConduit extends Conduit
}
}
```
Vous remarquerez que les variables passé en GET sont obtenu dans le conduit par `$this->varname`.

View file

@ -1,29 +1,37 @@
#Comment Configurer un module Symfony ou tout autre application php
#Comment Configurer un module ou tout autre application php
il vous faut instancier trois fichiers:
le modèle (.model) contenant le nom de la page qui porte le model
ici : `application/include/modeles/syf51.model`
ici : `application/include/modeles/my_module.model`
```yaml
name : syf51
name : my_module
page_title : Accueil de l'application modulaire
description : zatou stra bracadabla
params : params
engine : blade
ariane : {my_module_name}
arianelink : {my_module}
```
le controlleur (.php) contenant ce code qui doit être automatisé
ici: `application/include/controlleurs/syf51.php`
le controlleur (.php) contenant ce code
ici: `application/include/controlleurs/my_module.php`
```php
<?php
\MVC\Classe\Session::start();
$app = new MVC\Classe\Modular($name);
$templateData = array('app' => $app);
```
et déclarer le module dans `\application\modules\setup\registre.model`
le template (.blade.php) contenant ce code
ici: `application/include/vues/view/my_module.php`
```php
{{$app->load('module_type')}}
```
aussi il vous faudra déclarer le module dans `\application\modules\setup\registre.model`
par une ligne suplémentaire:
```yaml
syf51 : Application permettant de tester l'intégration d'un module avec symfony5.0.99
my_module : Application permettant de tester l'intégration d'un module
```
si besoin et que le module n'existe pas il vous faudras coder et modifier
le fichier `/application/class/Modular.php` voir peut-être `/application/class/ModularRegister.php`
ainsi que le dossier `\application\module\my_module`
si besoin et que le type du module n'existe pas il vous faudra ajouter le type du module en modifiant le fichier `/application/class/Modular.php` et les méthodes `__construct` et `load`
Good Luck !

View file

@ -1 +1,10 @@
#Comment bien utiliser les modules
#Comment bien utiliser les modules
Simplement vous pouvez tester les intégrations prévues dans le FrameWork avec la commande `php bin.php module:add` ainsi vous aurez le choix d'intégrer en quelques modifications à la mimine un module Symfony ou Laravel. Pour cela choisissez les paramètres de base afin que l'installation se passe bien.
Il faut comprendre qu'un module Symfony ne peut fonctionner qu'avec un template `blade`, de même manière un module Laravel ne peut fonctionner qu'avec un template `twig`.
Basiquement toute application utilisant le système de randu `twig` doit être intégré avec un template-sand `blade` et l'inverse.
Au niveau du sysème de routage, il faut absolument inclure le path du module, par exemple pour un module nommé 'SciFi', il faudra inclure dans les routes des controlleurs la chaine de caractères `\SciFi` devant toutes les routes de vos controlleurs.
Il en est de même pour les autres modules : Wordpress, GitList, PhpList, Pretashop, ... ainsi que pour tous les autres modules que vous voudriez intégrer par vous-même.

View file

@ -0,0 +1 @@
#Comment ajouter un module Symfony