Экспорт в Excel и PDF в PHP, вызывая избыточность кода

Мне нужно создать экспорт в Excel и экспортировать в PDF для некоторых из моих запросов MySQL и предоставить его пользователю.

Но также, пользователь должен просматривать результаты запроса на моем сайте тоже.

Итак, в этом случае возникает избыточность кода, так как мне нужно создать три файла кода php:

Один, чтобы позволить пользователю просматривать результаты запроса непосредственно на моем сайте, и,

Другой, чтобы позволить пользователю экспортировать те же результаты запроса в Excel, и,

последний, чтобы позволить пользователю экспортировать те же результаты запроса в PDF

Все три файла имеют один и тот же код, только различие заключается в способе отправки данных в Excel или в PDF.

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

6 ответов

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

1) есть одна функция, которая выбирает ваши данные из базы данных (это будет ваша модель)

2) иметь другую функцию, которая форматирует эти данные (вычислять итоги в конце строк и т. Д.), А также выбирать, какое представление использовать (это будет ваш контроллер)

3) есть другая функция, которая специализируется на показе ваших данных (так что у вас будет представление для PDF, одно для XLS и другое для веб)

также следуйте этому совету из комментария

"Есть ли какой-нибудь способ, с помощью которого я мог бы иметь только один файл и использовать его для всех целей, для просмотра, для экспорта в pdf и для экспорта в excel". Я думаю, что ответ ДА.

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

<select name="viewoption" id="viewoption">
<option value="view">Page view</option>
<option value="xls">Export in Excel</option>
<option value="pdf">Export in PDF</option>
</select>

а затем на странице действий вам просто нужно проверить значение $_POST['viewoption'] и поставить, если условие согласно требованиям.

Это может быть полезно для вас. Дайте мне знать в случае любого запроса.

Благодарю.

Вы могли бы поместить все это в один файл с данными ответами, но я бы сказал, зачем вам это делать? Вероятно, у вас есть куча другого кода, или вы будете в конечном итоге.

Вы должны использовать дизайн Model View Controller (MVC). У вас должен быть один класс, который обрабатывает все sql (исключительно данные и гарантирует, что данные точно созданы, сохранены, возвращены), другой файл, который принимает / выполняет запросы к данным и указывает, какое представление визуализировать, и, наконец, только 2 или 3 шаблона. введите файлы (представления), которые просто форматируют и отображают данные, созданные в вашем контроллере.

Наличие большего количества файлов / классов лучше и делает ваш код более модульным, что устраняет избыточность кода. Упаковка всего в один файл увеличивает избыточность кода.

Поместите весь код в один файл. использование $_GET['format'] решить, нужно ли вам форматировать как PDF или Excel, по умолчанию это опция веб-страницы, например

<?php

if($_GET['format'] == "pdf")
{
     // export as PDF
}
elseif($_GET['format'] == "excel")
{
     // export as excel
}

Используйте гиперссылки на ту же страницу, что и:

http://www.site.com/page.php?format=pdf
http://www.site.com/page.php?format=excel
http://www.site.com/page.php //webpage

Здесь нет избыточности, так как вы еще ничего не написали. Избыточность в идеях. При правильной абстракции вы можете написать код, который будет СУХИМ. Например, у вас может быть выбор, такой как Чандерш, представленный выше:

<select name="viewoption" id="viewoption">
<option value="view">Page view</option>
<option value="xls">Export in Excel</option>
<option value="pdf">Export in PDF</option>
</select>

Затем вы должны написать некоторый код - контроллер, если хотите - который слушает запросы. Поскольку вы записываете одни и те же данные, но в другом формате, вы можете сделать что-то вроде этого:

  1. получить данные (из модели, если хотите)
  2. решить, какую функцию / код / ​​представление запустить, используя запрос
  3. вызовите вашу функцию/ код / ​​представление, которое генерирует правильный формат, используя ваше предыдущее решение
  4. сделанный

Я думаю, что это не имеет значения, используете ли вы MVC или нет, но фактическую работу, которую ваши компоненты делают вместе.

Просто примечание: наличие нескольких файлов не означает дублирование кода. Файлы - это просто контейнеры. Взять, к примеру, Java. В Java принято помещать каждый класс в отдельный файл.

Повторяющийся код всегда является признаком неоптимального проектирования программного обеспечения, и существует множество возможностей для его предотвращения. Вот некоторые из них для вашей конкретной задачи:

1. Используйте параметры

Объедините ваши файлы в один и используйте GET-параметры в вашем URL, например file.php?output=pfd, В вашем скрипте вы можете прочитать этот параметр из $_GET['output'] и решить, какой формат экспорта генерировать (if ... else, switch).

2. Использование Включает

Иметь только один большой файл будет очень запутанным. Таким образом, вы также можете сохранить ваши три файла php и создать четвертый файл get_data.inc.php где у вас есть весь дублирующий код, извлекающий данные. Теперь вы можете загрузить и запустить этот файл в каждом из ваших трех php через include get_data.inc.php,

3. Используйте функции

Аутсорсинг кода во включаемый файл, возможно, также вводит в заблуждение, поскольку вы понятия не имеете, что будет делать включение и каковы зависимости. Так что лучше заключить функциональность в функцию. Здесь вы можете четко определить, что вставлять в функцию (db connection?) И что вы получите (массив данных?). Создать новый файл get_data.func.php и определить function get_data($db_connection), делая все вещи и возвращая данные, готовые к выводу. Затем в каждый файл включите файл через require_once get_data.func.php и скажи $Data = get_data($db_connection);,

4. Используйте наследование классов

Вы можете использовать концепцию наследования классов. Вы можете определить абстрактный класс, который включает в себя функциональность для извлечения ваших данных из базы данных, и вы можете определить абстрактную функцию abstract public function output();, Затем вы можете создавать дочерние классы, расширяющие ваш класс, которые реализуют output() функционировать определенным образом.

5. Используйте MVC Framework

Вы можете использовать установленную платформу для реализации шаблона "Model View Controller" (MVC). Здесь вы разделяете различные слои вашего приложения (данные из базы данных, готовите данные для вывода, представляете данные) очень чистым способом.

Отказ от ответственности: это всего лишь несколько советов для обучения, чтобы лучше организовать свои проекты. Если у вас мало опыта, я не рекомендую напрямую начинать с большой среды MVC. Просто пройди путь просветления сверху вниз;)

Другие вопросы по тегам