2016-12-18 3 views
1

У меня есть сайт, где каждый uri жестко закодирован. Их нужно заменить.Как наилучшим образом динамически кодировать uri в php и html?

Как наилучшим образом справиться с этим? Если я использую определяет PHP на странице получить немного грязный, потому что вы должны кошка определяет вне эхо строк, как:

echo URL_HOME . "/distribution/getit.php";

стихи с использованием переменных

echo "$URL_HOME/....."; 

Теперь Есть две вещи, Я знаю, никогда не прошу мнения здесь и не используйте глобальные переменные. Итак, какова общая практика кодирования? Правильны ли они из перечисленных выше?

(На некоторых страницах, где конкретный адрес используется снова и снова, я просто построить вар на странице и использовать его там.)

+0

Если ОП изменил формулировку «лучший способ справиться с этим» на «общие способы обращения с этим» или даже «хорошие способы справиться с этим», и сделал «что являются общепринятой практикой кодирования «множественное число», может ли это сделать менее основанной на мнениях? Если оставить комментарий с указателем ревизии, было бы полезно, если бы такой вопрос был закрыт как основанный на мнениях. –

ответ

0

очень сильно зависит от архитектуры сайта, а именно о том, как ваш обрабатывается шаблон. Вы можете использовать $URL_HOME, но если в шаблоне/другом контексте вывода есть неглобальная область, это некрасиво.

Для простого решения, определить константу и использовать функцию для генерации адреса:

const URL_HOME = 'http://example.net/'; 

function make_url($rel_url) 
{ 
    return URL_HOME . $rel_url . '.php'; 
} 
//... 
echo make_url('distribution/getit'); 

Здесь мы добавляем в .php в-функции, а также, вызов функции просто с 'distribution/getit'. Это упростит дальнейший модификацию вашего URL-формата (например, переключение на URL-адреса расширения .html,/URL-адреса/стиль и/или работу с переписанием строки запроса и т. Д.). Затем вы можете настроить все URL-адреса в одном месте, а не объединять базовый URL и т. Д. В нескольких местах вашего кода.


на одну ступень вверх, вы можете написать класс/метод (ы) для обработки ваших URL-адресов и определить базовый URL и т.д. в его свойствах. Затем у вас также может быть несколько методов обработки разных URL-адресов или форматов URL. Вот основной пример. Во-первых со статическим использованием, в случае, если вы хотите, чтобы держать вещи коротким и не заботятся, чтобы создавать новые экземпляры в каждой области:

class Urls 
{ 
    public static $base = 'http://example.net/'; 
    public static $ext = '.php'; 

    public static function make($rel_url) 
    { 
     return $this->$base . $rel_url . $this->$ext; 
    } 
} 

echo Urls::make('distribution/getit'); 
// ... http://example.net/distribution/getit.php 

Urls::$base = 'http://sub.example.net/'; 
Urls::$ext = '.html'; 

echo Urls::make('distribution/getit'); 
// ... http://sub.example.net/distribution/getit.html 

Если вы уронили статический режим и создать экземпляр объекта, однако, вы можете назвать его внутри строки тоже:

class Urls 
{ 
    public $base = 'http://example.net/'; 
    public $ext = '.php'; 

    public function make($rel_url) 
    { 
     return $this->base . $rel_url . $this->ext; 
    } 
} 

$urly = new Urls(); 
echo "See here, {$urly->make('distribution/getit')}, the link!"; 

в противном случае, если вы буферные ваш HTML, вместо того, вторя его сразу, вы можете также использовать маркеры, например, { base_url }distribution/getit.php, и запустите перед ним str_replace('{ base_url }', 'http://whatever', $HTML);. На немного более сложном спине на этом используйте маркер, такой как {% url:distribution/getit %}, затем запустите в конце код preg_replace_callback и проведите все сопоставленные маркеры URL в ваш обработчик URL. Хороший способ пойти, если вы используете статические шаблоны HTML. (Разделение кода и презентация - хорошая идея.)

+0

Это технически правильные варианты, но IMO я не вижу, как они менее «грязны», чем оригинальное решение OP по использованию 'define' в верхней части его страницы или в include. – WillardSolutions

+0

Использование 'define' /' const' было бы прекрасным решением для самых простых потребностей. Тем не менее, Op не любит конкатенировать! (Я лично не понимаю, почему это относится к беспорядочным.) Это просто некоторые общие варианты для работы с созданием URL-адресов, и они будут обеспечивать большую гибкость в будущем, когда схемы URL-адресов будут в конечном итоге пересмотрены. Будущая редакция/переписывание - это то, где подход OP становится беспорядочным. –

Смежные вопросы