This guide is designed for developers familiar with CodeIgniter, but new to Bonfire. It does not assume any prior experience with Bonfire.
Bonfire is intended to provide a kickstart for new web applications built in CodeIgniter. If you don't know CodeIgniter, you will need to familiarize yourself with it, first. There are a number of free tutorials out there, including:
Bonfire is a framework for your web application, built on top of the CodeIgniter PHP Framework. It is not a CMS, but a starting point for new projects that require ready-made tools like:
Bonfire ships with a number of individual components which are described below. Don't get hung up on the details of of each component for now. Many of these will be described in more detail later.
MY_Model
provides a robust set of standard methods from which you can derive your models. It includes methods covering all standard CRUD routines, as well as simple methods that chain together. For simple models, all you have to do is extend the MY_Model class and set a couple of variables, then you'll be up and running without any additional code.
The application/core
directory provides 4 different controllers which you can use to keep common functions within each 'zone' of your website: Base_Controller
, Front_Controller
, Authenticated_Controller
, and Admin_Controller
. You can set different defaults in each controller for a different part of your site. For example, setting the admin theme in the Admin_Controller
, or making sure the user is logged in with the Authenticated_Controller
.
For best results, create a custom controller (e.g. MY_Controller
) which extends one of these controllers to add the common functionality desired for your site.
Bonfire's User module provides a flexible User_model
, ready for your users to login with, as well as flexible RBAC that is simple to use and flexible enough to fit most needs.
Quickly browse your database, perform backups, restore old backups, and keep your database versioned with Migrations. Unlike CodeIgniter's built-in migrations, Bonfire allows for the core, your app, and each module to maintain their own set of migrations.
Very similar to CodeIgniter's Hooks, System Events allow you to hook into Bonfire's core code without modifying core files. It also provides a simple way for you to add hooks to your own code for other modules to use.
This library provides a simple way to log user activities, such as 'JohnDoe deleted the Page titled "Page 1"'. This makes it simple to keep a clear, consistent log of every important action of every user.
Easily store application-wide settings in the database, allowing your users to change settings simply and easily.
Once you log into the admin portion of Bonfire, you will find a menu with 4 categories across the top: Content, Reports, Settings, and Developer. These four categories are what Bonfire calls Contexts.
A Context is a way to group related content from different modules. It all happens automatically based upon the names of the controller and a little behind-the-scenes magic in the routes file. You don't need to understand all of the details about contexts just yet, but we will touch on how to use them in the tutorial.
You can create as many custom contexts as you want, and even remove the Content and Reports contexts, to meet the needs of your app. The Settings and Developer contexts are a central part of how Bonfire works and cannot be removed.
Contexts don't have to be visible to everyone who uses your admin area, though. They can be hidden individually per user role.
Bonfire is primarily a collection of modules that handle all of the various parts. This makes it easy to create your own modules that can be reused and passed around with a minimum of work.
If you navigate the project, look in the main bonfire folder. You will find the following folder structure:
Folder | Purpose |
---|---|
application | Holds Bonfire's primary files and the core modules. |
codeigniter | Holds the CodeIgniter system files. |
modules | Holds your own custom modules. |
themes | Holds all of your themes. |
A module is a mini-application that can contain assets (like CSS or JS), config files, controllers, models, libraries, helpers, and views. This is all powered by Modular Extensions HMVC and allows for HMVC usage (which we will touch on later in the tutorial).
The best way to use this guide is to follow along, step-by-step, entering the code at each step. Everything you need to make this project work is included in this tutorial.
During this tutorial we will create a (simple) blog module that will have you mastering your way around Bonfire in no time.
Next: A Simple Blog Tutorial
1 ms | Loading Time: Base Classes |
7 ms | Controller Execution Time ( Docs / Index ) |
11 ms | Total Execution Time |
0.0002 | SELECT GET_LOCK('0226fc810b20b19009f9528a135451d2', 300) AS ci_session_lockSpeed: 0.0002 - Possible keys: - Key Used: - Type: - Rows: - Extra: No tables used |
0.0003 | SELECT `data` FROM `bf_ci_sessions` WHERE `id` = 'vgmb9ng9gf3ur72vcq9o6orth83mt33p' and `ip_address` = '18.218.250.241'Speed: 0.0003 - Possible keys: - Key Used: - Type: - Rows: - Extra: Impossible WHERE noticed after reading const tables |
0.0003 | SHOW TABLES FROM `bonfire` |
0.0002 | SELECT * FROM `bf_settings`Speed: 0.0002 - Possible keys: - Key Used: - Type: ALL - Rows: 42 - Extra: |
0.0010 | Total Query Execution Time |
__ci_last_regenerate | 1734909310 |
requested_page | https://kampensonline.com/docs/developer/getting_started_with_bonfire |
previous_page | https://kampensonline.com/docs/developer/getting_started_with_bonfire |
No GET data exists |
No POST data exists |
docs/developer/getting_started_with_bonfire |
docs/index |
HTTP_ACCEPT | */* |
HTTP_USER_AGENT | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) |
HTTP_CONNECTION | |
SERVER_PORT | 443 |
SERVER_NAME | kampensonline.com |
REMOTE_ADDR | 18.218.250.241 |
SERVER_SOFTWARE | Apache/2.4.62 (Ubuntu) |
HTTP_ACCEPT_LANGUAGE | |
SCRIPT_NAME | /index.php |
REQUEST_METHOD | GET |
HTTP_HOST | |
REMOTE_HOST | |
CONTENT_TYPE | |
SERVER_PROTOCOL | HTTP/1.1 |
QUERY_STRING | |
HTTP_ACCEPT_ENCODING | gzip, br, zstd, deflate |
HTTP_X_FORWARDED_FOR |
domain | kampensonline.com |
base_url | https://kampensonline.com |
index_page | |
uri_protocol | AUTO |
url_suffix | |
language | english |
charset | UTF-8 |
enable_hooks | true |
subclass_prefix | MY_ |
composer_autoload | false |
permitted_uri_chars | a-z 0-9~%.:_- |
allow_get_array | true |
enable_query_strings | false |
controller_trigger | c |
function_trigger | m |
directory_trigger | d |
log_threshold | 4 |
log_path | /var/www/htdocs/bonfire/application/logs/ |
log_file_extension | |
log_file_permissions | 436 |
log_date_format | Y-m-d H:i:s |
error_views_path | |
cache_path | /var/www/htdocs/bonfire/application/cache/ |
cache_query_string | false |
encryption_key | 92b35b02920621aedbed3b8b9a68c0f1 |
sess_cookie_name | bf_session |
sess_expiration | 7200 |
sess_time_to_update | 300 |
sess_match_ip | true |
sess_driver | database |
sess_regenerate_destroy | false |
sess_save_path | ci_sessions |
cookie_prefix | |
cookie_domain | kampensonline.com |
cookie_path | / |
cookie_secure | false |
cookie_httponly | true |
cookie_samesite | Strict |
standardize_newlines | false |
csrf_protection | true |
csrf_token_name | ci_csrf_token |
csrf_cookie_name | ci_csrf_token |
csrf_expire | 7200 |
csrf_regenerate | true |
csrf_exclude_uris | Array ( ) |
compress_output | false |
time_reference | local |
rewrite_short_tags | false |
proxy_ips | |
bonfire.installed | 1 |
site.default_user_timezone | UP12 |
modules_locations | Array ( [/var/www/htdocs/bonfire/application/modules/] => ../../application/modules/ [/var/www/htdocs/bonfire/bonfire/modules/] => ../../bonfire/modules/ ) |
site.backup_folder | archives/ |
contexts | Array ( [0] => content [1] => reports [2] => settings [3] => developer ) |
enable_activity_logging | true |
sparks_path | ../sparks/ |
template.site_path | /var/www/htdocs/bonfire/public/ |
template.theme_paths | Array ( [0] => themes ) |
template.default_layout | index |
template.ajax_layout | ajax |
template.use_mobile_themes | false |
template.default_theme | default/ |
template.admin_theme | admin |
template.message_template | <div class="alert alert-{type} alert-dismissable"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> <div>{message}</div> </div> |
template.breadcrumb_symbol | : |
template.parse_views | false |
assets.directories | Array ( [base] => assets [cache] => cache [css] => css [image] => images [js] => js [module] => module ) |
assets.js_opener | $(document).ready(function() { |
assets.js_closer | }); |
assets.css_combine | false |
assets.js_combine | false |
assets.css_minify | true |
assets.js_minify | true |
assets.encrypt_name | false |
assets.encode | false |
assets.base_folder | assets |
assets.asset_folders | Array ( [css] => css [js] => js [image] => images ) |
ui.current_shortcuts | Array ( [form_save] => Array ( [description] => Save any form in the admin area. [action] => $("input[name=save]").click();return false; ) [create_new] => Array ( [description] => Create a new record in the module. [action] => window.location.href=$("a#create_new").attr("href"); ) [select_all] => Array ( [description] => Select all records in an index page. [action] => $("table input[type=checkbox]").click();return false; ) [delete] => Array ( [description] => Delete the record(s). [action] => $("#delete-me.btn-danger").click(); ) [module_index] => Array ( [description] => Return to the index of the current module. [action] => window.location.href=$("a#list").attr("href"); ) [goto_content] => Array ( [description] => Jump to the Content context. [action] => window.location.href=$("#tb_content").attr("href") ) [goto_reports] => Array ( [description] => Jump to the Reports context. [action] => window.location.href=$("#tb_reports").attr("href") ) [goto_settings] => Array ( [description] => Jump to the Settings context. [action] => window.location.href=$("#tb_settings").attr("href") ) [goto_developer] => Array ( [description] => Jump to the Developer context. [action] => window.location.href=$("#tb_developer").attr("href") ) ) |
emailer.write_to_file | false |
migrate.auto_core | false |
migrate.auto_app | false |
commonmark.valid_drivers | Array ( [0] => Parsedown [1] => Markdown [2] => MarkdownExtra [3] => LeagueCommonMark ) |
commonmark.driver | MarkdownExtended |
docs.theme | docs |
docs.default_group | developer |
docs.show_dev_docs | true |
docs.show_app_docs | true |
docs.toc_file | _toc.ini |
docs.permitted_environments | Array ( [0] => development [1] => testing [2] => production ) |
application.php /var/www/htdocs/bonfire/application/config/application.php |
autoload.php /var/www/htdocs/bonfire/application/config/autoload.php |
config.php /var/www/htdocs/bonfire/application/config/config.php |
constants.php /var/www/htdocs/bonfire/application/config/constants.php |
database.php /var/www/htdocs/bonfire/application/config/database.php |
events.php /var/www/htdocs/bonfire/application/config/events.php |
hooks.php /var/www/htdocs/bonfire/application/config/hooks.php |
mimes.php /var/www/htdocs/bonfire/application/config/mimes.php |
profiler.php /var/www/htdocs/bonfire/application/config/profiler.php |
routes.php /var/www/htdocs/bonfire/application/config/routes.php |
Base_Controller.php /var/www/htdocs/bonfire/application/core/Base_Controller.php |
MY_Model.php /var/www/htdocs/bonfire/application/core/MY_Model.php |
App_hooks.php /var/www/htdocs/bonfire/application/hooks/App_hooks.php |
application_lang.php /var/www/htdocs/bonfire/application/language/english/application_lang.php |
Profiler.php /var/www/htdocs/bonfire/application/libraries/Profiler.php |
Base.php /var/www/htdocs/bonfire/application/third_party/MX/Base.php |
Config.php /var/www/htdocs/bonfire/application/third_party/MX/Config.php |
Controller.php /var/www/htdocs/bonfire/application/third_party/MX/Controller.php |
Lang.php /var/www/htdocs/bonfire/application/third_party/MX/Lang.php |
Loader.php /var/www/htdocs/bonfire/application/third_party/MX/Loader.php |
Benchmark.php /var/www/htdocs/bonfire/bonfire/ci3/core/Benchmark.php |
CodeIgniter.php /var/www/htdocs/bonfire/bonfire/ci3/core/CodeIgniter.php |
Common.php /var/www/htdocs/bonfire/bonfire/ci3/core/Common.php |
Config.php /var/www/htdocs/bonfire/bonfire/ci3/core/Config.php |
Controller.php /var/www/htdocs/bonfire/bonfire/ci3/core/Controller.php |
Hooks.php /var/www/htdocs/bonfire/bonfire/ci3/core/Hooks.php |
Input.php /var/www/htdocs/bonfire/bonfire/ci3/core/Input.php |
Lang.php /var/www/htdocs/bonfire/bonfire/ci3/core/Lang.php |
Loader.php /var/www/htdocs/bonfire/bonfire/ci3/core/Loader.php |
Log.php /var/www/htdocs/bonfire/bonfire/ci3/core/Log.php |
Model.php /var/www/htdocs/bonfire/bonfire/ci3/core/Model.php |
Output.php /var/www/htdocs/bonfire/bonfire/ci3/core/Output.php |
Router.php /var/www/htdocs/bonfire/bonfire/ci3/core/Router.php |
Security.php /var/www/htdocs/bonfire/bonfire/ci3/core/Security.php |
URI.php /var/www/htdocs/bonfire/bonfire/ci3/core/URI.php |
Utf8.php /var/www/htdocs/bonfire/bonfire/ci3/core/Utf8.php |
hash.php /var/www/htdocs/bonfire/bonfire/ci3/core/compat/hash.php |
mbstring.php /var/www/htdocs/bonfire/bonfire/ci3/core/compat/mbstring.php |
password.php /var/www/htdocs/bonfire/bonfire/ci3/core/compat/password.php |
standard.php /var/www/htdocs/bonfire/bonfire/ci3/core/compat/standard.php |
DB.php /var/www/htdocs/bonfire/bonfire/ci3/database/DB.php |
DB_driver.php /var/www/htdocs/bonfire/bonfire/ci3/database/DB_driver.php |
DB_query_builder.php /var/www/htdocs/bonfire/bonfire/ci3/database/DB_query_builder.php |
DB_result.php /var/www/htdocs/bonfire/bonfire/ci3/database/DB_result.php |
mysqli_driver.php /var/www/htdocs/bonfire/bonfire/ci3/database/drivers/mysqli/mysqli_driver.php |
mysqli_result.php /var/www/htdocs/bonfire/bonfire/ci3/database/drivers/mysqli/mysqli_result.php |
directory_helper.php /var/www/htdocs/bonfire/bonfire/ci3/helpers/directory_helper.php |
form_helper.php /var/www/htdocs/bonfire/bonfire/ci3/helpers/form_helper.php |
language_helper.php /var/www/htdocs/bonfire/bonfire/ci3/helpers/language_helper.php |
url_helper.php /var/www/htdocs/bonfire/bonfire/ci3/helpers/url_helper.php |
profiler_lang.php /var/www/htdocs/bonfire/bonfire/ci3/language/english/profiler_lang.php |
Cache.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Cache/Cache.php |
Cache_dummy.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Cache/drivers/Cache_dummy.php |
Driver.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Driver.php |
CI_Session_driver_interface.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Session/CI_Session_driver_interface.php |
PHP8SessionWrapper.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Session/PHP8SessionWrapper.php |
Session.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Session/Session.php |
Session_driver.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Session/Session_driver.php |
Session_database_driver.php /var/www/htdocs/bonfire/bonfire/ci3/libraries/Session/drivers/Session_database_driver.php |
BF_Loader.php /var/www/htdocs/bonfire/bonfire/core/BF_Loader.php |
BF_Router.php /var/www/htdocs/bonfire/bonfire/core/BF_Router.php |
BF_directory_helper.php /var/www/htdocs/bonfire/bonfire/helpers/BF_directory_helper.php |
BF_form_helper.php /var/www/htdocs/bonfire/bonfire/helpers/BF_form_helper.php |
application_helper.php /var/www/htdocs/bonfire/bonfire/helpers/application_helper.php |
config_file_helper.php /var/www/htdocs/bonfire/bonfire/helpers/config_file_helper.php |
markdown_extended_helper.php /var/www/htdocs/bonfire/bonfire/helpers/markdown_extended_helper.php |
markdown_helper.php /var/www/htdocs/bonfire/bonfire/helpers/markdown_helper.php |
Assets.php /var/www/htdocs/bonfire/bonfire/libraries/Assets.php |
BF_Model.php /var/www/htdocs/bonfire/bonfire/libraries/BF_Model.php |
CommonMark.php /var/www/htdocs/bonfire/bonfire/libraries/CommonMark.php |
CommonMarkDriver.php /var/www/htdocs/bonfire/bonfire/libraries/CommonMark/CommonMarkDriver.php |
CommonMark_MarkdownExtended.php /var/www/htdocs/bonfire/bonfire/libraries/CommonMark/drivers/CommonMark_MarkdownExtended.php |
Console.php /var/www/htdocs/bonfire/bonfire/libraries/Console.php |
Events.php /var/www/htdocs/bonfire/bonfire/libraries/Events.php |
Modules.php /var/www/htdocs/bonfire/bonfire/libraries/Modules.php |
Route.php /var/www/htdocs/bonfire/bonfire/libraries/Route.php |
Template.php /var/www/htdocs/bonfire/bonfire/libraries/Template.php |
docs.php /var/www/htdocs/bonfire/bonfire/modules/docs/config/docs.php |
routes.php /var/www/htdocs/bonfire/bonfire/modules/docs/config/routes.php |
Docs.php /var/www/htdocs/bonfire/bonfire/modules/docs/controllers/Docs.php |
docs_lang.php /var/www/htdocs/bonfire/bonfire/modules/docs/language/english/docs_lang.php |
_sidebar.php /var/www/htdocs/bonfire/bonfire/modules/docs/views/_sidebar.php |
index.php /var/www/htdocs/bonfire/bonfire/modules/docs/views/index.php |
Settings_lib.php /var/www/htdocs/bonfire/bonfire/modules/settings/libraries/Settings_lib.php |
Settings_model.php /var/www/htdocs/bonfire/bonfire/modules/settings/models/Settings_model.php |
index.php index.php |
index.php themes/docs/index.php |