Vous êtes connecté en tant que anonymous Se Deconnecter
Browse code

ajout d'un routage Symfony sur une classe contenu dans les include avec la création de la classe Conduit permettant de rendre un page conduite par la route Symfony, ajout de la class asynchonous permettant d'injecter du js et du css

TODO: finir la class asynchonous et tester cette version de dev sur un vrai serveur appartenant à la TT+

TODO: ajouter les modules gestionMedia gestionMenu gestionPage (gestionBackendCms)

FIXME: appel curl ou fopen d'une methode http depuis une action ou un controlleur.

TODO: sécuriser les accès HTTP1.1 par un fichier config similaire a l'applet Discourse faite pour Tinternet

TODO: ajouter un plug-in symfony permettant de charger un utilisateur dans les apps a partir de l'authentification multiple

TODO: lire les documentation officielles provenant des 4 plate-formes tranquillement afin de comprendre commet doit on tester ces type d'auth quitte a créé un sous domaine particulier directement hebergé sur gittea
-->Sécuriser le serveur de dev

Emmanuel ROY authored on 05/12/2019 14:05:38
Showing 9 changed files
... ...
@@ -2,12 +2,6 @@
2 2
 
3 3
 namespace MVC\Classe;
4 4
 
5
-use Symfony\Component\Config\FileLocator as FileLocator;
6
-use Symfony\Component\Routing\Matcher\UrlMatcher as UrlMatcher;
7
-use Symfony\Component\Routing\RequestContext as RequestContext;
8
-use Symfony\Component\Routing\Loader\YamlFileLoader as YamlFileLoader;
9
-use Symfony\Component\Routing\Exception\ResourceNotFoundException;
10
-
11 5
 require APPLICATION_PATH . DIRECTORY_SEPARATOR . "parameters.php";
12 6
 
13 7
 class Application
... ...
@@ -15,35 +9,20 @@ class Application
15 9
     public $http;
16 10
     public $url;
17 11
     public $browser;
12
+    public $route;
18 13
 
19 14
 
20 15
     public function __construct(){
21 16
         $this->http = new HttpMethod();
22 17
         $this->browser = new Browser();
23 18
         $this->url = new Url($this->http->method, $this->browser->isAppRequest());
19
+
20
+        $dispacher = new Dispacher();
21
+        $this->route = $dispacher->route;
24 22
     }
25 23
 
26 24
     public function launch(){
27
-        try {
28
-            //load config file
29
-            $fileLocator = new FileLocator(array(CONFIG_PATH . DIRECTORY_SEPARATOR . 'files'));
30
-            $loader = new YamlFileLoader($fileLocator);
31
-            $routes = $loader->load('routing.yml');
32
-
33
-            //create context
34
-            $context = new RequestContext('/');
35
-            $matcher = new UrlMatcher($routes, $context);
36
-
37
-            // Find the current route
38
-            $parameters = $matcher->match($_SERVER['REQUEST_URI']);
39
-
40
-            echo '<pre>';
41
-            print_r($parameters);
42
-            die();
43
-        } catch (ResourceNotFoundException $e) {
44
-            echo $e->getMessage();
45
-        }
46
-
25
+        //print_r($this->route);
47 26
         $controlleur = new Controlleur($this);
48 27
         //si la page n'est un controlleur d'action alors on affiche l'écran
49 28
         if(!$this->url->page['control']) {
50 29
new file mode 100644
... ...
@@ -0,0 +1,41 @@
1
+<?php
2
+
3
+
4
+namespace MVC\Classe;
5
+
6
+
7
+class Asynchonous
8
+{
9
+
10
+    private $_css;
11
+    private $_javascript;
12
+
13
+    public function __construct()
14
+    {
15
+        $this->_css = "";
16
+        $this->_javascript = "";
17
+    }
18
+
19
+    public function addCss($code)
20
+    {
21
+        $this->_css .= "\n";
22
+        $this->_css .= $code;
23
+    }
24
+
25
+    public function addJs($code)
26
+    {
27
+        $this->_javascript .= "\n";
28
+        $this->_javascript .= $code;
29
+    }
30
+
31
+    public function printCss()
32
+    {
33
+        echo $this->_css;
34
+    }
35
+
36
+    public function printJs()
37
+    {
38
+        echo $this->_javascript;
39
+    }
40
+
41
+}
0 42
\ No newline at end of file
... ...
@@ -22,7 +22,18 @@ class Controlleur{
22 22
                 }
23 23
 
24 24
             default:
25
-                if ($application->url->page['control']) {
25
+                if ($application->route != NULL) {
26
+                    $conduit = explode('::', $application->route['controller']);
27
+                    require CONDUIT_PATH . DIRECTORY_SEPARATOR . $conduit[0] . '.php';
28
+                    $conduitRoute = "\\" . $conduit[0];
29
+                    $method = strtolower($conduit[1]);
30
+                    $class = new $conduitRoute();
31
+                    $class->initialize($application->route);
32
+                    $this->vue = new VueVide();
33
+                    ob_start();
34
+                    $class->$method();
35
+                    $this->vue->ecran = ob_get_clean();
36
+                } else if ($application->url->page['control']) {
26 37
                     $url_params = $application->url->page['params'];
27 38
                     require TRAITEMENT_PATH . DIRECTORY_SEPARATOR . $application->url->page['name'] . '.php';
28 39
                 } else {
29 40
new file mode 100644
... ...
@@ -0,0 +1,46 @@
1
+<?php
2
+
3
+
4
+namespace MVC\Classe;
5
+
6
+use Symfony\Component\Config\FileLocator as FileLocator;
7
+use Symfony\Component\Routing\Matcher\UrlMatcher as UrlMatcher;
8
+use Symfony\Component\Routing\RequestContext as RequestContext;
9
+use Symfony\Component\Routing\Loader\YamlFileLoader as YamlFileLoader;
10
+use Symfony\Component\Routing\Exception\ResourceNotFoundException;
11
+
12
+
13
+class Dispacher
14
+{
15
+
16
+    public $route;
17
+
18
+    public function __construct()
19
+    {
20
+
21
+        echo $_SERVER['REQUEST_URI'];
22
+        //Avoid callback from empty homepage
23
+        if ($_SERVER['REQUEST_URI'] == '/' || $_SERVER['REQUEST_URI'] == '') {
24
+            $this->route = NULL;
25
+        } else {
26
+            //Test the route from config file
27
+            try {
28
+                //load config file
29
+                $fileLocator = new FileLocator(array(CONFIG_PATH . DIRECTORY_SEPARATOR . 'files'));
30
+                $loader = new YamlFileLoader($fileLocator);
31
+                $routes = $loader->load('routing.yml');
32
+
33
+                //create context
34
+                $context = new RequestContext('/');
35
+                $matcher = new UrlMatcher($routes, $context);
36
+
37
+                // Find the current route
38
+                $parameters = $matcher->match($_SERVER['REQUEST_URI']);
39
+
40
+                $this->route = $parameters;
41
+            } catch (ResourceNotFoundException $e) {
42
+                $this->route = NULL;
43
+            }
44
+        }
45
+    }
46
+}
0 47
\ No newline at end of file
1 48
new file mode 100644
... ...
@@ -0,0 +1,22 @@
1
+<?php
2
+
3
+
4
+namespace MVC\Classe\Implement;
5
+
6
+
7
+class Conduit extends Action
8
+{
9
+    public function initialize($var)
10
+    {
11
+        //Export variable from conduit
12
+        foreach ($var as $key => $value) {
13
+
14
+            if ($key != "controller") {
15
+                if ($key != "_route") {
16
+                    $this->$key = $value;
17
+                }
18
+            }
19
+        }
20
+        return;
21
+    }
22
+}
0 23
\ No newline at end of file
... ...
@@ -1,6 +1,7 @@
1 1
 <?php
2 2
 define("APPLICATION_PATH", dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "application");
3 3
 define("MODULES_PATH", APPLICATION_PATH . DIRECTORY_SEPARATOR . "modules");
4
+define("CONDUIT_PATH", APPLICATION_PATH . DIRECTORY_SEPARATOR . "include" . DIRECTORY_SEPARATOR . "conduits");
4 5
 define("CONTROLLERS_PATH", APPLICATION_PATH . DIRECTORY_SEPARATOR . "include" . DIRECTORY_SEPARATOR . "controlleurs");
5 6
 define("CONFIG_PATH", APPLICATION_PATH . DIRECTORY_SEPARATOR . "config");
6 7
 define("LOG_PATH", APPLICATION_PATH . DIRECTORY_SEPARATOR . "logs");
... ...
@@ -4,11 +4,11 @@ home_route:
4 4
 
5 5
 foo_route:
6 6
   path:     /foo
7
-  defaults: { controller: 'FooController::indexAction' }
7
+  defaults: { controller: 'FooConduit::index' }
8 8
 
9 9
 foo_placeholder_route:
10 10
   path:     /foo/{id}
11
-  defaults: { controller: 'FooController::loadAction' }
11
+  defaults: { controller: 'FooConduit::load' }
12 12
   requirements:
13 13
     id: '[0-9]+'
14 14
 
15 15
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+<?php
2
+
3
+
4
+use MVC\Classe\Implement\Conduit;
5
+
6
+class FooConduit extends Conduit
7
+{
8
+    // Route('/foo')
9
+    public function index()
10
+    {
11
+        $this->render('foo', ['page_title' => 'Foo', 'description' => 'FooConduit']);
12
+    }
13
+
14
+    // Route('/foo/{id}')
15
+    public function load()
16
+    {
17
+        $this->render('foo', array('page_title' => 'Foo', 'description' => 'FooConduit', 'id' => $this->id));
18
+
19
+    }
20
+}
0 21
\ No newline at end of file
1 22
new file mode 100644
... ...
@@ -0,0 +1,18 @@
1
+@extends('body')
2
+
3
+@section('sidebar')
4
+    @parent
5
+
6
+    <p>This is appended to the master sidebar.</p>
7
+@endsection
8
+
9
+@section('content')
10
+    <h1>Foo</h1>
11
+    <br/><br/><br/>
12
+    <a href="{{ \MVC\Classe\Url::link_rewrite(false, 'authentification', []) }}">S'authentifier ?</a>
13
+    <hr/>
14
+    Variable Loader:
15
+    {{ $id ? $id : 'init' }}
16
+
17
+@endsection
18
+