Url.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. /**
  3. * La classe Url permet de gérer les URL à travers MINZ
  4. */
  5. class Url {
  6. /**
  7. * Affiche une Url formatée selon que l'on utilise l'url_rewriting ou non
  8. * si oui, on cherche dans la table de routage la correspondance pour formater
  9. * @param $url l'url à formater définie comme un tableau :
  10. * $url['c'] = controller
  11. * $url['a'] = action
  12. * $url['params'] = tableau des paramètres supplémentaires
  13. * $url['protocol'] = protocole à utiliser (http par défaut)
  14. * ou comme une chaîne de caractère
  15. * @param $encodage pour indiquer comment encoder les & (& ou &amp; pour html)
  16. * @return l'url formatée
  17. */
  18. public static function display ($url = array (), $encodage = 'html', $absolute = false) {
  19. $url = self::checkUrl ($url);
  20. $url_string = '';
  21. if ($absolute) {
  22. $protocol = (is_array ($url) && isset ($url['protocol'])) ? ($url['protocol'] . ':') : ''; //Empty protocol will use automatic http or https
  23. $url_string = $protocol
  24. . '//'
  25. . Request::getDomainName ()
  26. . Request::getBaseUrl ();
  27. }
  28. else {
  29. $url_string = '.';
  30. }
  31. if (is_array ($url)) {
  32. $router = new Router ();
  33. if (Configuration::useUrlRewriting ()) {
  34. $url_string .= $router->printUriRewrited ($url);
  35. } else {
  36. $url_string .= self::printUri ($url, $encodage);
  37. }
  38. } else {
  39. $url_string .= $url;
  40. }
  41. return $url_string;
  42. }
  43. /**
  44. * Construit l'URI d'une URL sans url rewriting
  45. * @param l'url sous forme de tableau
  46. * @param $encodage pour indiquer comment encoder les & (& ou &amp; pour html)
  47. * @return l'uri sous la forme ?key=value&key2=value2
  48. */
  49. private static function printUri ($url, $encodage) {
  50. $uri = '';
  51. $separator = '/?';
  52. if($encodage == 'html') {
  53. $and = '&amp;';
  54. } else {
  55. $and = '&';
  56. }
  57. if (isset ($url['c'])
  58. && $url['c'] != Request::defaultControllerName ()) {
  59. $uri .= $separator . 'c=' . $url['c'];
  60. $separator = $and;
  61. }
  62. if (isset ($url['a'])
  63. && $url['a'] != Request::defaultActionName ()) {
  64. $uri .= $separator . 'a=' . $url['a'];
  65. $separator = $and;
  66. }
  67. if (isset ($url['params'])) {
  68. foreach ($url['params'] as $key => $param) {
  69. $uri .= $separator . $key . '=' . $param;
  70. $separator = $and;
  71. }
  72. }
  73. return $uri;
  74. }
  75. /**
  76. * Vérifie que les éléments du tableau représentant une url soit ok
  77. * @param l'url sous forme de tableau (sinon renverra directement $url)
  78. * @return l'url vérifié
  79. */
  80. public static function checkUrl ($url) {
  81. $url_checked = $url;
  82. if (is_array ($url)) {
  83. if (!isset ($url['c'])) {
  84. $url_checked['c'] = Request::defaultControllerName ();
  85. }
  86. if (!isset ($url['a'])) {
  87. $url_checked['a'] = Request::defaultActionName ();
  88. }
  89. if (!isset ($url['params'])) {
  90. $url_checked['params'] = array ();
  91. }
  92. }
  93. return $url_checked;
  94. }
  95. }
  96. function _url ($controller, $action) {
  97. $nb_args = func_num_args ();
  98. if($nb_args < 2 || $nb_args % 2 != 0) {
  99. return false;
  100. }
  101. $args = func_get_args ();
  102. $params = array ();
  103. for($i = 2; $i < $nb_args; $i = $i + 2) {
  104. $params[$args[$i]] = $args[$i + 1];
  105. }
  106. return Url::display (array ('c' => $controller, 'a' => $action, 'params' => $params));
  107. }