Url.php 3.1 KB

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