mirror of
https://github.com/codeigniter4/CodeIgniter4.git
synced 2025-02-20 11:44:28 +08:00
607 lines
37 KiB
HTML
607 lines
37 KiB
HTML
|
||
|
||
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en" >
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
||
<title>Code Modules — CodeIgniter 4.1.1 documentation</title>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../_static/css/citheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
||
|
||
|
||
<link rel="shortcut icon" href="../_static/favicon.ico"/>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!--[if lt IE 9]>
|
||
<script src="../_static/js/html5shiv.min.js"></script>
|
||
<![endif]-->
|
||
|
||
|
||
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<script src="../_static/language_data.js"></script>
|
||
<script src="../_static/js/citheme.js"></script>
|
||
<script src="../_static/js/carbon.js"></script>
|
||
|
||
<script type="text/javascript" src="../_static/js/theme.js"></script>
|
||
|
||
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="next" title="Managing your Applications" href="managing_apps.html" />
|
||
<link rel="prev" title="AJAX Requests" href="ajax.html" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
|
||
|
||
<div class="wy-grid-for-nav">
|
||
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" style="background: #DD4814" >
|
||
|
||
|
||
|
||
<a href="../index.html">
|
||
|
||
|
||
|
||
|
||
<img src="../_static/ci-logo-text.png" class="logo" alt="Logo"/>
|
||
|
||
</a>
|
||
|
||
|
||
|
||
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../intro/index.html">Welcome to CodeIgniter4</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/index.html">Welcome to CodeIgniter4</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/requirements.html">Server Requirements</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/credits.html">Credits</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/psr.html">PSR Compliance</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/installing_composer.html">Composer Installation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/installing_manual.html">Manual Installation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/running.html">Running Your App</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/upgrading.html">Upgrading From a Previous Version</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/troubleshooting.html">Troubleshooting</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/repositories.html">CodeIgniter Repositories</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../tutorial/index.html">Build Your First Application</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/static_pages.html">Static pages</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/news_section.html">News section</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/create_news_items.html">Create news items</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/conclusion.html">Conclusion</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../concepts/index.html">CodeIgniter4 Overview</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/structure.html">Application Structure</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/mvc.html">Models, Views, and Controllers</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/autoloader.html">Autoloading Files</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/services.html">Services</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/factories.html">Factories</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/http.html">Working With HTTP Requests</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/security.html">Security Guidelines</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul class="current">
|
||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">General Topics</a><ul class="current">
|
||
<li class="toctree-l2"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="urls.html">CodeIgniter URLs</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="helpers.html">Helper Functions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="common_functions.html">Global Functions and Constants</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="logging.html">Logging Information</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="errors.html">Error Handling</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="caching.html">Web Page Caching</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="ajax.html">AJAX Requests</a></li>
|
||
<li class="toctree-l2 current"><a class="current reference internal" href="#">Code Modules</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="managing_apps.html">Managing your Applications</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="environments.html">Handling Multiple Environments</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../incoming/index.html">Controllers and Routing</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/controllers.html">Controllers</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/routing.html">URI Routing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/filters.html">Controller Filters</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/message.html">HTTP Messages</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/request.html">Request Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/incomingrequest.html">IncomingRequest Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/content_negotiation.html">Content Negotiation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/methodspoofing.html">HTTP Method Spoofing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/restful.html">RESTful Resource Handling</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../outgoing/index.html">Building Responses</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/views.html">Views</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/view_cells.html">View Cells</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/view_renderer.html">View Renderer</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/view_layouts.html">View Layouts</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/view_parser.html">View Parser</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/table.html">HTML Table Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/response.html">HTTP Responses</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/api_responses.html">API Response Trait</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/localization.html">Localization</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../outgoing/alternative_php.html">Alternate PHP Syntax for View Files</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../database/index.html">Working With Databases</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/examples.html">Quick Start: Usage Examples</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/configuration.html">Database Configuration</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/connecting.html">Connecting to a Database</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/queries.html">Running Queries</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/results.html">Generating Query Results</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/helpers.html">Query Helper Functions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/query_builder.html">Query Builder Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/transactions.html">Transactions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/metadata.html">Getting MetaData</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/call_function.html">Custom Function Calls</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/events.html">Database Events</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/utilities.html">Database Utilities</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../models/index.html">Modeling Data</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../models/model.html">Using CodeIgniter's Model</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../models/entities.html">Using Entity Classes</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../dbmgmt/index.html">Managing Databases</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/forge.html">Database Manipulation with Database Forge</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/migration.html">Database Migrations</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/seeds.html">Database Seeding</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../libraries/index.html">Library Reference</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/caching.html">Caching Driver</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/cookies.html">Cookies</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/curlrequest.html">CURLRequest Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/email.html">Email Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/encryption.html">Encryption Service</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/files.html">Working with Files</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/honeypot.html">Honeypot Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/images.html">Image Manipulation Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/pagination.html">Pagination</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/security.html">Security</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/sessions.html">Session Library</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/throttler.html">Throttler</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/time.html">Times and Dates</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/typography.html">Typography</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/uploaded_files.html">Working with Uploaded Files</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/uri.html">Working with URIs</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/user_agent.html">User Agent Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/validation.html">Validation</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../helpers/index.html">Helpers</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/array_helper.html">Array Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/cookie_helper.html">Cookie Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/date_helper.html">Date Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/filesystem_helper.html">Filesystem Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/form_helper.html">Form Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/html_helper.html">HTML Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/inflector_helper.html">Inflector Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/number_helper.html">Number Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/security_helper.html">Security Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/test_helper.html">Test Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/text_helper.html">Text Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/url_helper.html">URL Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/xml_helper.html">XML Helper</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../testing/index.html">Testing</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/overview.html">Getting Started</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/database.html">Database</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/fabricator.html">Generating Data</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/controllers.html">Controller Testing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/feature.html">HTTP Testing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/benchmark.html">Benchmarking</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/debugging.html">Debugging Your Application</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../cli/index.html">Command Line Usage</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli.html">Running via the Command Line</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_commands.html">Custom CLI Commands</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_generators.html">CLI Generators</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_library.html">CLI Library</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_request.html">CLIRequest Class</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../extending/index.html">Extending CodeIgniter</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/core_classes.html">Creating Core System Classes</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/common.html">Replacing Common Functions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/events.html">Events</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/basecontroller.html">Extending the Controller</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/authentication.html">Authentication</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/contributing.html">Contributing to CodeIgniter</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||
|
||
|
||
<nav class="wy-nav-top" aria-label="top navigation">
|
||
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="../index.html">CodeIgniter</a>
|
||
|
||
</nav>
|
||
|
||
|
||
<div class="wy-nav-content">
|
||
|
||
<div class="rst-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||
|
||
<ul class="wy-breadcrumbs">
|
||
|
||
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
||
|
||
<li><a href="index.html">General Topics</a> »</li>
|
||
|
||
<li>Code Modules</li>
|
||
|
||
|
||
<li class="wy-breadcrumbs-aside">
|
||
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<div class="section" id="code-modules">
|
||
<h1>Code Modules<a class="headerlink" href="#code-modules" title="Permalink to this headline">¶</a></h1>
|
||
<p>CodeIgniter supports a form of code modularization to help you create reusable code. Modules are typically
|
||
centered around a specific subject, and can be thought of as mini-applications within your larger application. Any
|
||
of the standard file types within the framework are supported, like controllers, models, views, config files, helpers,
|
||
language files, etc. Modules may contain as few, or as many, of these as you like.</p>
|
||
<div class="contents local topic" id="contents">
|
||
<ul class="simple">
|
||
<li><p><a class="reference internal" href="#namespaces" id="id1">Namespaces</a></p></li>
|
||
<li><p><a class="reference internal" href="#auto-discovery" id="id2">Auto-Discovery</a></p>
|
||
<ul>
|
||
<li><p><a class="reference internal" href="#enable-disable-discover" id="id3">Enable/Disable Discover</a></p></li>
|
||
<li><p><a class="reference internal" href="#specify-discovery-items" id="id4">Specify Discovery Items</a></p></li>
|
||
<li><p><a class="reference internal" href="#discovery-and-composer" id="id5">Discovery and Composer</a></p></li>
|
||
</ul>
|
||
</li>
|
||
<li><p><a class="reference internal" href="#working-with-files" id="id6">Working With Files</a></p>
|
||
<ul>
|
||
<li><p><a class="reference internal" href="#routes" id="id7">Routes</a></p></li>
|
||
<li><p><a class="reference internal" href="#controllers" id="id8">Controllers</a></p></li>
|
||
<li><p><a class="reference internal" href="#config-files" id="id9">Config Files</a></p></li>
|
||
<li><p><a class="reference internal" href="#migrations" id="id10">Migrations</a></p></li>
|
||
<li><p><a class="reference internal" href="#seeds" id="id11">Seeds</a></p></li>
|
||
<li><p><a class="reference internal" href="#helpers" id="id12">Helpers</a></p></li>
|
||
<li><p><a class="reference internal" href="#language-files" id="id13">Language Files</a></p></li>
|
||
<li><p><a class="reference internal" href="#libraries" id="id14">Libraries</a></p></li>
|
||
<li><p><a class="reference internal" href="#models" id="id15">Models</a></p></li>
|
||
<li><p><a class="reference internal" href="#views" id="id16">Views</a></p></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section" id="namespaces">
|
||
<h2><a class="toc-backref" href="#id1">Namespaces</a><a class="headerlink" href="#namespaces" title="Permalink to this headline">¶</a></h2>
|
||
<p>The core element of the modules functionality comes from the <a class="reference internal" href="../concepts/autoloader.html"><span class="doc">PSR4-compatible autoloading</span></a>
|
||
that CodeIgniter uses. While any code can use the PSR4 autoloader and namespaces, the primary way to take full advantage of
|
||
modules is to namespace your code and add it to <strong>app/Config/Autoload.php</strong>, in the <code class="docutils literal notranslate"><span class="pre">psr4</span></code> section.</p>
|
||
<p>For example, let’s say we want to keep a simple blog module that we can re-use between applications. We might create
|
||
folder with our company name, Acme, to store all of our modules within. We will put it right alongside our <strong>app</strong>
|
||
directory in the main project root:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="nx">acme</span> <span class="c1">// New modules directory</span>
|
||
<span class="o">/</span><span class="nx">app</span>
|
||
<span class="o">/</span><span class="k">public</span>
|
||
<span class="o">/</span><span class="nb">system</span>
|
||
<span class="o">/</span><span class="nx">tests</span>
|
||
<span class="o">/</span><span class="nx">writable</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Open <strong>app/Config/Autoload.php</strong> and add the <strong>Acme</strong> namespace to the <code class="docutils literal notranslate"><span class="pre">psr4</span></code> array property:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nv">$psr4</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'Config'</span> <span class="o">=></span> <span class="nx">APPPATH</span> <span class="o">.</span> <span class="s1">'Config'</span><span class="p">,</span>
|
||
<span class="nx">APP_NAMESPACE</span> <span class="o">=></span> <span class="nx">APPPATH</span><span class="p">,</span> <span class="c1">// For custom namespace</span>
|
||
<span class="s1">'App'</span> <span class="o">=></span> <span class="nx">APPPATH</span><span class="p">,</span> <span class="c1">// To ensure filters, etc still found,</span>
|
||
<span class="s1">'Acme'</span> <span class="o">=></span> <span class="nx">ROOTPATH</span><span class="o">.</span><span class="s1">'acme'</span>
|
||
<span class="p">];</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Now that this is set up, we can access any file within the <strong>acme</strong> folder through the <code class="docutils literal notranslate"><span class="pre">Acme</span></code> namespace. This alone
|
||
takes care of 80% of what is needed for modules to work, so you should be sure to familiarize yourself with namespaces
|
||
and become comfortable with their use. Several file types will be scanned for automatically through all defined namespaces - a crucial ingredient for working with modules.</p>
|
||
<p>A common directory structure within a module will mimic the main application folder:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="nx">acme</span>
|
||
<span class="o">/</span><span class="nx">Blog</span>
|
||
<span class="o">/</span><span class="nx">Config</span>
|
||
<span class="o">/</span><span class="nx">Controllers</span>
|
||
<span class="o">/</span><span class="nx">Database</span>
|
||
<span class="o">/</span><span class="nx">Migrations</span>
|
||
<span class="o">/</span><span class="nx">Seeds</span>
|
||
<span class="o">/</span><span class="nx">Helpers</span>
|
||
<span class="o">/</span><span class="nx">Language</span>
|
||
<span class="o">/</span><span class="nx">en</span>
|
||
<span class="o">/</span><span class="nx">Libraries</span>
|
||
<span class="o">/</span><span class="nx">Models</span>
|
||
<span class="o">/</span><span class="nx">Views</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Of course, there is nothing forcing you to use this exact structure, and you should organize it in the manner that
|
||
best suits your module, leaving out directories you don’t need, creating new directories for Entities, Interfaces,
|
||
or Repositories, etc.</p>
|
||
</div>
|
||
<div class="section" id="auto-discovery">
|
||
<h2><a class="toc-backref" href="#id2">Auto-Discovery</a><a class="headerlink" href="#auto-discovery" title="Permalink to this headline">¶</a></h2>
|
||
<p>Many times, you will need to specify the full namespace to files you want to include, but CodeIgniter can be
|
||
configured to make integrating modules into your applications simpler by automatically discovering many different
|
||
file types, including:</p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference internal" href="../extending/events.html"><span class="doc">Events</span></a></p></li>
|
||
<li><p><a class="reference internal" href="configuration.html"><span class="doc">Registrars</span></a></p></li>
|
||
<li><p><a class="reference internal" href="../incoming/routing.html"><span class="doc">Route files</span></a></p></li>
|
||
<li><p><a class="reference internal" href="../concepts/services.html"><span class="doc">Services</span></a></p></li>
|
||
</ul>
|
||
<p>This is configured in the file <strong>app/Config/Modules.php</strong>.</p>
|
||
<p>The auto-discovery system works by scanning for particular directories and files within psr4 namespaces that have been defined in <strong>Config/Autoload.php</strong>.</p>
|
||
<p>To make auto-discovery work for our <strong>Blog</strong> namespace, we need to make one small adjustment.
|
||
<strong>Acme</strong> needs to be changed to <strong>Acme\Blog</strong> because each “module” within the namespace needs to be fully defined. Once your module folder path is defined, the discovery process would look for discoverable items on that path and should, for example, find the routes file at <strong>/acme/Blog/Config/Routes.php</strong>.</p>
|
||
<div class="section" id="enable-disable-discover">
|
||
<h3><a class="toc-backref" href="#id3">Enable/Disable Discover</a><a class="headerlink" href="#enable-disable-discover" title="Permalink to this headline">¶</a></h3>
|
||
<p>You can turn on or off all auto-discovery in the system with the <strong>$enabled</strong> class variable. False will disable
|
||
all discovery, optimizing performance, but negating the special capabilities of your modules.</p>
|
||
</div>
|
||
<div class="section" id="specify-discovery-items">
|
||
<h3><a class="toc-backref" href="#id4">Specify Discovery Items</a><a class="headerlink" href="#specify-discovery-items" title="Permalink to this headline">¶</a></h3>
|
||
<p>With the <strong>$aliases</strong> option, you can specify which items are automatically discovered. If the item is not
|
||
present, then no auto-discovery will happen for that item, but the others in the array will still be discovered.</p>
|
||
</div>
|
||
<div class="section" id="discovery-and-composer">
|
||
<h3><a class="toc-backref" href="#id5">Discovery and Composer</a><a class="headerlink" href="#discovery-and-composer" title="Permalink to this headline">¶</a></h3>
|
||
<p>Packages that were installed via Composer will also be discovered by default. This only requires that the namespace
|
||
that Composer knows about is a PSR4 namespace. PSR0 namespaces will not be detected.</p>
|
||
<p>If you do not want all of Composer’s known directories to be scanned when locating files, you can turn this off
|
||
by editing the <code class="docutils literal notranslate"><span class="pre">$discoverInComposer</span></code> variable in <code class="docutils literal notranslate"><span class="pre">Config\Modules.php</span></code>:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="k">public</span> <span class="nv">$discoverInComposer</span> <span class="o">=</span> <span class="k">false</span><span class="p">;</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="working-with-files">
|
||
<h2><a class="toc-backref" href="#id6">Working With Files</a><a class="headerlink" href="#working-with-files" title="Permalink to this headline">¶</a></h2>
|
||
<p>This section will take a look at each of the file types (controllers, views, language files, etc) and how they can
|
||
be used within the module. Some of this information is described in more detail in the relevant location of the user
|
||
guide, but is being reproduced here so that it’s easier to grasp how all of the pieces fit together.</p>
|
||
<div class="section" id="routes">
|
||
<h3><a class="toc-backref" href="#id7">Routes</a><a class="headerlink" href="#routes" title="Permalink to this headline">¶</a></h3>
|
||
<p>By default, <a class="reference internal" href="../incoming/routing.html"><span class="doc">routes</span></a> are automatically scanned for within modules. It can be turned off in
|
||
the <strong>Modules</strong> config file, described above.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Since the files are being included into the current scope, the <code class="docutils literal notranslate"><span class="pre">$routes</span></code> instance is already defined for you.
|
||
It will cause errors if you attempt to redefine that class.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="controllers">
|
||
<h3><a class="toc-backref" href="#id8">Controllers</a><a class="headerlink" href="#controllers" title="Permalink to this headline">¶</a></h3>
|
||
<p>Controllers outside of the main <strong>app/Controllers</strong> directory cannot be automatically routed by URI detection,
|
||
but must be specified within the Routes file itself:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="c1">// Routes.php</span>
|
||
<span class="nv">$routes</span><span class="o">-></span><span class="na">get</span><span class="p">(</span><span class="s1">'blog'</span><span class="p">,</span> <span class="s1">'Acme\Blog\Controllers\Blog::index'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>To reduce the amount of typing needed here, the <strong>group</strong> routing feature is helpful:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nv">$routes</span><span class="o">-></span><span class="na">group</span><span class="p">(</span><span class="s1">'blog'</span><span class="p">,</span> <span class="p">[</span><span class="s1">'namespace'</span> <span class="o">=></span> <span class="s1">'Acme\Blog\Controllers'</span><span class="p">],</span> <span class="k">function</span><span class="p">(</span><span class="nv">$routes</span><span class="p">)</span>
|
||
<span class="p">{</span>
|
||
<span class="nv">$routes</span><span class="o">-></span><span class="na">get</span><span class="p">(</span><span class="s1">'/'</span><span class="p">,</span> <span class="s1">'Blog::index'</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="config-files">
|
||
<h3><a class="toc-backref" href="#id9">Config Files</a><a class="headerlink" href="#config-files" title="Permalink to this headline">¶</a></h3>
|
||
<p>No special change is needed when working with configuration files. These are still namespaced classes and loaded
|
||
with the <code class="docutils literal notranslate"><span class="pre">new</span></code> command:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nv">$config</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\Acme\Blog\Config\Blog</span><span class="p">();</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Config files are automatically discovered whenever using the <strong>config()</strong> function that is always available.</p>
|
||
</div>
|
||
<div class="section" id="migrations">
|
||
<h3><a class="toc-backref" href="#id10">Migrations</a><a class="headerlink" href="#migrations" title="Permalink to this headline">¶</a></h3>
|
||
<p>Migration files will be automatically discovered within defined namespaces. All migrations found across all
|
||
namespaces will be run every time.</p>
|
||
</div>
|
||
<div class="section" id="seeds">
|
||
<h3><a class="toc-backref" href="#id11">Seeds</a><a class="headerlink" href="#seeds" title="Permalink to this headline">¶</a></h3>
|
||
<p>Seed files can be used from both the CLI and called from within other seed files as long as the full namespace
|
||
is provided. If calling on the CLI, you will need to provide double backslashes:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">></span> <span class="nx">php</span> <span class="k">public</span><span class="o">/</span><span class="nx">index</span><span class="o">.</span><span class="nx">php</span> <span class="nx">migrations</span> <span class="nx">seed</span> <span class="nx">Acme\\Blog\\Database\\Seeds\\TestPostSeeder</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="helpers">
|
||
<h3><a class="toc-backref" href="#id12">Helpers</a><a class="headerlink" href="#helpers" title="Permalink to this headline">¶</a></h3>
|
||
<p>Helpers will be located automatically from defined namespaces when using the <code class="docutils literal notranslate"><span class="pre">helper()</span></code> method, as long as it
|
||
is within the namespaces <strong>Helpers</strong> directory:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nx">helper</span><span class="p">(</span><span class="s1">'blog'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="language-files">
|
||
<h3><a class="toc-backref" href="#id13">Language Files</a><a class="headerlink" href="#language-files" title="Permalink to this headline">¶</a></h3>
|
||
<p>Language files are located automatically from defined namespaces when using the <code class="docutils literal notranslate"><span class="pre">lang()</span></code> method, as long as the
|
||
file follows the same directory structures as the main application directory.</p>
|
||
</div>
|
||
<div class="section" id="libraries">
|
||
<h3><a class="toc-backref" href="#id14">Libraries</a><a class="headerlink" href="#libraries" title="Permalink to this headline">¶</a></h3>
|
||
<p>Libraries are always instantiated by their fully-qualified class name, so no special access is provided:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nv">$lib</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\Acme\Blog\Libraries\BlogLib</span><span class="p">();</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="models">
|
||
<h3><a class="toc-backref" href="#id15">Models</a><a class="headerlink" href="#models" title="Permalink to this headline">¶</a></h3>
|
||
<p>Models are always instantiated by their fully-qualified class name, so no special access is provided:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nv">$model</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\Acme\Blog\Models\PostModel</span><span class="p">();</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="views">
|
||
<h3><a class="toc-backref" href="#id16">Views</a><a class="headerlink" href="#views" title="Permalink to this headline">¶</a></h3>
|
||
<p>Views can be loaded using the class namespace as described in the <a class="reference internal" href="../outgoing/views.html"><span class="doc">views</span></a> documentation:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="k">echo</span> <span class="nx">view</span><span class="p">(</span><span class="s1">'Acme\Blog\Views\index'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<footer>
|
||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||
<a href="managing_apps.html" class="btn btn-neutral float-right" title="Managing your Applications" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
<a href="ajax.html" class="btn btn-neutral float-left" title="AJAX Requests" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>
|
||
© Copyright 2019-2021 CodeIgniter Foundation.
|
||
<span class="lastupdated">
|
||
Last updated on Mar 12, 2021.
|
||
</span>
|
||
|
||
</p>
|
||
</div>
|
||
|
||
|
||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||
|
||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
|
||
</section>
|
||
|
||
</div>
|
||
|
||
|
||
<script type="text/javascript">
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(false);
|
||
});
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</body>
|
||
</html> |