Как обновить пути к файлам PHP для разных сред развертывания

#php

#php

Вопрос:

Я хочу обновить пути к файлам модели / контроллеров или, если на то пошло, даже базовые about.php к чему-то без расширения .php, например, примерно/, в исходном коде, на основе сред.

Почему? Не хочу раскрывать фактические пути и переменные для обеспечения безопасности.

Например:

Когда я вызываю контроллер delete_user в среде разработки, в настоящее время тег href in <a> указывает на delete_user.php передачу идентификатора пользователя в качестве переменной GET. Затем есть контроллер, который запускает SQL-запрос на УДАЛЕНИЕ и перенаправляет обратно на вызывающую страницу.

 <a href="delete_user.php?delete_user_id=<?= $row['user_id'] ?>" class="table-action table-action-delete" data-toggle="tooltip" data-original-title="Delete">
</a>
  

В производственной среде я хочу, чтобы href вместо этого было как delete-user/user-id .

Теперь пути к файлам href должны быть обновлены и беспрепятственно интерпретироваться в разных средах.

 <a href="delete-user/<?= $row['user_id'] ?>" class="table-action table-action-delete" data-toggle="tooltip" data-original-title="Delete">
</a>
  

Среда: NGINX, PHP7.4 (LEMP)

Какой наилучший и масштабируемый способ достичь этого в PHP?

Комментарии:

1. Для этого вы можете использовать jenkins, в PhP нет решения

Ответ №1:

На вашем месте я бы рассмотрел три способа :

Первый предполагает, что вы можете поддерживать пользовательский объект под названием ApplicationLinksConfiguration map для вашего различного env.

Свойства :

  • $configKey : универсальный ключ в виде текста или целого числа, как вы предпочитаете
  • $testValue : значение для шага тестирования env
  • $stagingValue : значение для промежуточного шага env
  • $prodValue : значение для конечного шага prod env

И любые другие необходимые шаги.

Конечно, вы можете добавить установщики и получатели и пользовательский конструктор для создания объекта.

Конечно, вы можете добавить заводскую систему или любой шаблон проектирования builder, чтобы упростить управление ссылками в качестве системы конфигурации.

Второй способ рассмотреть это то, что вы можете использовать свою систему построения ссылок Framework, если таковая имеется. В качестве примера, когда вы используете Zend Framework or Laminas , которая является последней версией того же фреймворка, есть несколько помощников просмотра, которые отвечают за создание ваших ссылок во всех ваших веб-приложениях.

Конечно, существует множество помощников по просмотру, но помощник по просмотру URL может показать вам много преимуществ в повседневной работе. Для статических ресурсов также есть помощник по просмотру ресурсов.

Итак, поскольку внутри этой платформы управляются разные статусы приложений, вы можете реализовать свои, следуя директивам, указанным в официальной документации, особенно в этом разделе и в следующем.

Теперь вы можете создать пользовательский ApplicationLinksConfiguration менеджер, который поддерживает режим приложения, и написать пользовательскую среду с вашими пользовательскими правилами для создания ваших ссылок следующим образом: одна среда, одно пользовательское правило. Или одно кольцо для hrefs, одно кольцо для создания всех ваших hrefs.

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

Хорошего дня.

Ответ №2:

Вы можете добавить переменные среды в свои настройки php-fmp и прочитать их в своем коде. Это будет зависеть от настроек вашего сервера, поэтому вы можете погуглить, что вам нужно.

https://www.digitalocean.com/community/questions/setting-environment-variables-in-php-fpm

Затем в вашем php у вас есть доступ к этим переменным либо с помощью $_ENV , либо getenv()

https://www.php.net/manual/en/reserved.variables.environment.php

https://www.php.net/manual/en/function.getenv.php

в качестве альтернативы, в $_SERVER переменной может быть какое-то поле, которое может выполнять то, что вам нужно, но оно будет специфичным для вашей настройки, поэтому вам нужно var_dump($_SERVER) в вашей среде разработки и в вашей среде prod найти поле, которое может работать для вас.

https://www.php.net/manual/en/reserved.variables.server.php

Комментарии:

1. Да, я подумал о подобном подходе к ведению файла переменных .. и считыванию значений из этого файла. Файл будет настраиваемым для каждой среды. $_SERVER также является хорошим способом. В настоящее время я использую его в некоторой степени.