Url.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. * @return l'url formatée
  16. */
  17. public static function display ($url = array ()) {
  18. $url = self::checkUrl ($url);
  19. $url_string = '';
  20. if (is_array ($url) && isset ($url['protocol'])) {
  21. $protocol = $url['protocol'];
  22. } else {
  23. $protocol = 'http';
  24. }
  25. $url_string .= $protocol . '://';
  26. $url_string .= Request::getDomainName ();
  27. $url_string .= Request::getBaseUrl ();
  28. if (is_array ($url)) {
  29. $router = new Router ();
  30. if (Configuration::useUrlRewriting ()) {
  31. $url_string .= $router->printUriRewrited ($url);
  32. } else {
  33. $url_string .= self::printUri ($url);
  34. }
  35. } else {
  36. $url_string .= $url;
  37. }
  38. return $url_string;
  39. }
  40. /**
  41. * Construit l'URI d'une URL sans url rewriting
  42. * @param l'url sous forme de tableau
  43. * @return l'uri sous la forme ?key=value&key2=value2
  44. */
  45. private static function printUri ($url) {
  46. $uri = '';
  47. $separator = '/?';
  48. if (isset ($url['c'])
  49. && $url['c'] != Request::defaultControllerName ()) {
  50. $uri .= $separator . 'c=' . $url['c'];
  51. $separator = '&';
  52. }
  53. if (isset ($url['a'])
  54. && $url['a'] != Request::defaultActionName ()) {
  55. $uri .= $separator . 'a=' . $url['a'];
  56. $separator = '&';
  57. }
  58. if (isset ($url['params'])) {
  59. foreach ($url['params'] as $key => $param) {
  60. $uri .= $separator . $key . '=' . $param;
  61. $separator = '&';
  62. }
  63. }
  64. return $uri;
  65. }
  66. /**
  67. * Vérifie que les éléments du tableau représentant une url soit ok
  68. * @param l'url sous forme de tableau (sinon renverra directement $url)
  69. * @return l'url vérifié
  70. */
  71. public static function checkUrl ($url) {
  72. $url_checked = $url;
  73. if (is_array ($url)) {
  74. if (!isset ($url['c'])) {
  75. $url_checked['c'] = Request::defaultControllerName ();
  76. }
  77. if (!isset ($url['a'])) {
  78. $url_checked['a'] = Request::defaultActionName ();
  79. }
  80. if (!isset ($url['params'])) {
  81. $url_checked['params'] = array ();
  82. }
  83. }
  84. return $url_checked;
  85. }
  86. }