CodeIgniter4/outgoing/view_parser.html
2023-11-27 23:33:48 +00:00

1413 lines
108 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>View Parser &mdash; CodeIgniter 4.4.3 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/citheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/citheme_dark.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 data-url_root="../" id="documentation_options" 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/js/citheme.js"></script>
<script src="../_static/js/carbon.js"></script>
<script 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="View Decorators" href="view_decorators.html" />
<link rel="prev" title="View Layouts" href="view_layouts.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" >
<a href="../index.html">
<img src="../_static/ci-logo-text.svg" 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" aria-label="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="Navigation menu">
<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>
<li class="toctree-l2"><a class="reference internal" href="../license.html">License Agreement</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/troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../changelogs/index.html">Change Logs</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/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>
<li class="toctree-l1"><a class="reference internal" href="../general/index.html">General Topics</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../general/configuration.html">Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/urls.html">CodeIgniter URLs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/helpers.html">Helper Functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/common_functions.html">Global Functions and Constants</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/logging.html">Logging Information</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/errors.html">Error Handling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/caching.html">Web Page Caching</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/ajax.html">AJAX Requests</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/modules.html">Code Modules</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/managing_apps.html">Managing your Applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="../general/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/routing.html">URI Routing</a></li>
<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/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 class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Building Responses</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="views.html">Views</a></li>
<li class="toctree-l2"><a class="reference internal" href="view_cells.html">View Cells</a></li>
<li class="toctree-l2"><a class="reference internal" href="view_renderer.html">View Renderer</a></li>
<li class="toctree-l2"><a class="reference internal" href="view_layouts.html">View Layouts</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">View Parser</a></li>
<li class="toctree-l2"><a class="reference internal" href="view_decorators.html">View Decorators</a></li>
<li class="toctree-l2"><a class="reference internal" href="table.html">HTML Table Class</a></li>
<li class="toctree-l2"><a class="reference internal" href="response.html">HTTP Responses</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_responses.html">API Response Trait</a></li>
<li class="toctree-l2"><a class="reference internal" href="csp.html">Content Security Policy</a></li>
<li class="toctree-l2"><a class="reference internal" href="localization.html">Localization</a></li>
<li class="toctree-l2"><a class="reference internal" href="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>
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/db_commands.html">Database Commands</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/file_collections.html">File Collections</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/publisher.html">Publisher</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/response.html">Testing Responses</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>
<li class="toctree-l2"><a class="reference internal" href="../testing/mocking.html">Mocking</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_overview.html">CLI Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_controllers.html">Running Controllers via CLI</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/spark_commands.html">Spark Commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_commands.html">Creating Spark 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/composer_packages.html">Creating Composer Packages</a></li>
<li class="toctree-l2"><a class="reference internal" href="../extending/contributing.html">Contributing to CodeIgniter</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../libraries/official_packages.html">Official Packages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<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">
<a class="btn btn-neutral float-right" href="https://github.com/codeigniter4/CodeIgniter4/edit/develop/user_guide_src/source/outgoing/view_parser.rst">Edit this page</a>
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">Building Responses</a></li>
<li class="breadcrumb-item active">View Parser</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">
<section id="view-parser">
<h1>View Parser<a class="headerlink" href="#view-parser" title="Permalink to this headline"></a></h1>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#using-the-view-parser-class" id="id1">Using the View Parser Class</a></p>
<ul>
<li><p><a class="reference internal" href="#what-it-does" id="id2">What It Does</a></p></li>
<li><p><a class="reference internal" href="#parser-templates" id="id3">Parser templates</a></p></li>
<li><p><a class="reference internal" href="#parser-configuration-options" id="id4">Parser Configuration Options</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#substitution-variations" id="id5">Substitution Variations</a></p>
<ul>
<li><p><a class="reference internal" href="#loop-substitutions" id="id6">Loop Substitutions</a></p></li>
<li><p><a class="reference internal" href="#nested-substitutions" id="id7">Nested Substitutions</a></p></li>
<li><p><a class="reference internal" href="#comments" id="id8">Comments</a></p></li>
<li><p><a class="reference internal" href="#cascading-data" id="id9">Cascading Data</a></p></li>
<li><p><a class="reference internal" href="#preventing-parsing" id="id10">Preventing Parsing</a></p></li>
<li><p><a class="reference internal" href="#conditional-logic" id="id11">Conditional Logic</a></p></li>
<li><p><a class="reference internal" href="#escaping-data" id="id12">Escaping Data</a></p></li>
<li><p><a class="reference internal" href="#filters" id="id13">Filters</a></p></li>
<li><p><a class="reference internal" href="#parser-plugins" id="id14">Parser Plugins</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#usage-notes" id="id15">Usage Notes</a></p>
<ul>
<li><p><a class="reference internal" href="#view-fragments" id="id16">View Fragments</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#namespace-CodeIgniter\View" id="id17">Class Reference</a></p></li>
</ul>
</div>
<p>The View Parser can perform simple text substitution for
pseudo-variables contained within your view files.
It can parse simple variables or variable tag pairs.</p>
<p>Pseudo-variable names or control constructs are enclosed in braces, like this:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="nx">html</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">head</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">title</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">blog_title</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">title</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">head</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">body</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">h3</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">blog_heading</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">h3</span><span class="o">&gt;</span>
<span class="p">{</span><span class="nx">blog_entries</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h5</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">h5</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">p</span><span class="o">&gt;</span>
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entries</span><span class="p">}</span>
<span class="o">&lt;/</span><span class="nx">body</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">html</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>These variables are not actual PHP variables, but rather plain text
representations that allow you to eliminate PHP from your templates
(view files).</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>CodeIgniter does <strong>not</strong> require you to use this class since
using pure PHP in your view pages (for instance using the
<a class="reference internal" href="view_renderer.html"><span class="doc">View renderer</span></a> )
lets them run a little faster.
However, some developers prefer to use some form of template engine if
they work with designers who they feel would find some
confusion working with PHP.</p>
</div>
<section id="using-the-view-parser-class">
<h2><a class="toc-backref" href="#id1">Using the View Parser Class</a><a class="headerlink" href="#using-the-view-parser-class" title="Permalink to this headline"></a></h2>
<p>The simplest method to load the parser class is through its service:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$parser</span> <span class="o">=</span> <span class="nx">\Config\Services</span><span class="o">::</span><span class="na">parser</span><span class="p">();</span>
</pre></div>
</div>
<p>Alternately, if you are not using the <code class="docutils literal notranslate"><span class="pre">Parser</span></code> class as your default renderer, you
can instantiate it directly:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$parser</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\CodeIgniter\View\Parser</span><span class="p">();</span>
</pre></div>
</div>
<p>Then you can use any of the three standard rendering methods that it provides:
<code class="docutils literal notranslate"><span class="pre">render()</span></code>, <code class="docutils literal notranslate"><span class="pre">setVar()</span></code> and
<code class="docutils literal notranslate"><span class="pre">setData()</span></code>. You will also be able to specify delimiters directly,
through the <code class="docutils literal notranslate"><span class="pre">setDelimiters()</span></code> method.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Using the <code class="docutils literal notranslate"><span class="pre">Parser</span></code>, your view templates are processed only by the Parser
itself, and not like a conventional view PHP script. PHP code in such a script
is ignored by the parser, and only substitutions are performed.</p>
<p>This is purposeful: view files with no PHP.</p>
</div>
<section id="what-it-does">
<h3><a class="toc-backref" href="#id2">What It Does</a><a class="headerlink" href="#what-it-does" title="Permalink to this headline"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">Parser</span></code> class processes “PHP/HTML scripts” stored in the applications view path.
These scripts can not contain any PHP.</p>
<p>Each view parameter (which we refer to as a pseudo-variable) triggers a substitution,
based on the type of value you provided for it. Pseudo-variables are not
extracted into PHP variables; instead their value is accessed through the pseudo-variable
syntax, where its name is referenced inside braces.</p>
<p>The Parser class uses an associative array internally, to accumulate pseudo-variable
settings until you call its <code class="docutils literal notranslate"><span class="pre">render()</span></code>. This means that your pseudo-variable names
need to be unique, or a later parameter setting will over-ride an earlier one.</p>
<p>This also impacts escaping parameter values for different contexts inside your
script. You will have to give each escaped value a unique parameter name.</p>
</section>
<section id="parser-templates">
<h3><a class="toc-backref" href="#id3">Parser templates</a><a class="headerlink" href="#parser-templates" title="Permalink to this headline"></a></h3>
<p>You can use the <code class="docutils literal notranslate"><span class="pre">render()</span></code> method to parse (or render) simple templates,
like this:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;blog_title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Title&#39;</span><span class="p">,</span>
<span class="s1">&#39;blog_heading&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Heading&#39;</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">render</span><span class="p">(</span><span class="s1">&#39;blog_template&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>View parameters are passed to <code class="docutils literal notranslate"><span class="pre">setData()</span></code> as an associative
array of data to be replaced in the template. In the above example, the
template would contain two variables: <code class="docutils literal notranslate"><span class="pre">{blog_title}</span></code> and <code class="docutils literal notranslate"><span class="pre">{blog_heading}</span></code>
The first parameter to <code class="docutils literal notranslate"><span class="pre">render()</span></code> contains the name of the <a class="reference internal" href="views.html"><span class="doc">view
file</span></a>, Where <em>blog_template</em> is the name of your view file.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>If the file extension is omitted, then the views are expected to end with the .php extension.</p>
</div>
</section>
<section id="parser-configuration-options">
<h3><a class="toc-backref" href="#id4">Parser Configuration Options</a><a class="headerlink" href="#parser-configuration-options" title="Permalink to this headline"></a></h3>
<p>Several options can be passed to the <code class="docutils literal notranslate"><span class="pre">render()</span></code> or <code class="docutils literal notranslate"><span class="pre">renderString()</span></code> methods.</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">cache</span></code> - the time in seconds, to save a views results; ignored for renderString()</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cache_name</span></code> - the ID used to save/retrieve a cached view result; defaults to the viewpath;
ignored for renderString()</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">saveData</span></code> - true if the view data parameters should be retained for subsequent calls;
default is <strong>true</strong></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cascadeData</span></code> - true if pseudo-variable settings should be passed on to nested
substitutions; default is <strong>true</strong></p></li>
</ul>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">render</span><span class="p">(</span><span class="s1">&#39;blog_template&#39;</span><span class="p">,</span> <span class="p">[</span>
<span class="s1">&#39;cache&#39;</span> <span class="o">=&gt;</span> <span class="nx">HOUR</span><span class="p">,</span>
<span class="s1">&#39;cache_name&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;something_unique&#39;</span><span class="p">,</span>
<span class="p">]);</span>
</pre></div>
</div>
</section>
</section>
<section id="substitution-variations">
<h2><a class="toc-backref" href="#id5">Substitution Variations</a><a class="headerlink" href="#substitution-variations" title="Permalink to this headline"></a></h2>
<p>There are three types of substitution supported: simple, looping, and nested.
Substitutions are performed in the same sequence that pseudo-variables were added.</p>
<p>The <strong>simple substitution</strong> performed by the parser is a one-to-one
replacement of pseudo-variables where the corresponding data parameter
has either a scalar or string value, as in this example:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">&#39;&lt;head&gt;&lt;title&gt;{blog_title}&lt;/title&gt;&lt;/head&gt;&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;blog_title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My ramblings&#39;</span><span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
<span class="c1">// Result: &lt;head&gt;&lt;title&gt;My ramblings&lt;/title&gt;&lt;/head&gt;</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">Parser</span></code> takes substitution a lot further with “variable pairs”,
used for nested substitutions or looping, and with some advanced
constructs for conditional substitution.</p>
<p>When the parser executes, it will generally</p>
<ul class="simple">
<li><p>handle any conditional substitutions</p></li>
<li><p>handle any nested/looping substitutions</p></li>
<li><p>handle the remaining single substitutions</p></li>
</ul>
<section id="loop-substitutions">
<h3><a class="toc-backref" href="#id6">Loop Substitutions</a><a class="headerlink" href="#loop-substitutions" title="Permalink to this headline"></a></h3>
<p>A loop substitution happens when the value for a pseudo-variable is
a sequential array of arrays, like an array of row settings.</p>
<p>The above example code allows simple variables to be replaced. What if
you would like an entire block of variables to be repeated, with each
iteration containing new values? Consider the template example we showed
at the top of the page:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="nx">html</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">head</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">title</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">blog_title</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">title</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">head</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">body</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">h3</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">blog_heading</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">h3</span><span class="o">&gt;</span>
<span class="p">{</span><span class="nx">blog_entries</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h5</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">h5</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">p</span><span class="o">&gt;</span>
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entries</span><span class="p">}</span>
<span class="o">&lt;/</span><span class="nx">body</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">html</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>In the above code youll notice a pair of variables: <code class="docutils literal notranslate"><span class="pre">{blog_entries}</span></code>
data… <code class="docutils literal notranslate"><span class="pre">{/blog_entries}</span></code>. In a case like this, the entire chunk of data
between these pairs would be repeated multiple times, corresponding to
the number of rows in the “blog_entries” element of the parameters array.</p>
<p>Parsing variable pairs is done using the identical code shown above to
parse single variables, except, you will add a multi-dimensional array
corresponding to your variable pair data. Consider this example:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;blog_title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Title&#39;</span><span class="p">,</span>
<span class="s1">&#39;blog_heading&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Heading&#39;</span><span class="p">,</span>
<span class="s1">&#39;blog_entries&#39;</span> <span class="o">=&gt;</span> <span class="p">[</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Title 1&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Body 1&#39;</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Title 2&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Body 2&#39;</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Title 3&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Body 3&#39;</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Title 4&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Body 4&#39;</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Title 5&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Body 5&#39;</span><span class="p">],</span>
<span class="p">],</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">render</span><span class="p">(</span><span class="s1">&#39;blog_template&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>The value for the pseudo-variable <code class="docutils literal notranslate"><span class="pre">blog_entries</span></code> is a sequential
array of associative arrays. The outer level does not have keys associated
with each of the nested “rows”.</p>
<p>If your “pair” data is coming from a database result, which is already a
multi-dimensional array, you can simply use the database <code class="docutils literal notranslate"><span class="pre">getResultArray()</span></code>
method:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$query</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-&gt;</span><span class="na">query</span><span class="p">(</span><span class="s1">&#39;SELECT * FROM blog&#39;</span><span class="p">);</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;blog_title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Title&#39;</span><span class="p">,</span>
<span class="s1">&#39;blog_heading&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Heading&#39;</span><span class="p">,</span>
<span class="s1">&#39;blog_entries&#39;</span> <span class="o">=&gt;</span> <span class="nv">$query</span><span class="o">-&gt;</span><span class="na">getResultArray</span><span class="p">(),</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">render</span><span class="p">(</span><span class="s1">&#39;blog_template&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>If the array you are trying to loop over contains objects instead of arrays,
the parser will first look for an <code class="docutils literal notranslate"><span class="pre">asArray()</span></code> method on the object. If it exists,
that method will be called and the resulting array is then looped over just as
described above. If no <code class="docutils literal notranslate"><span class="pre">asArray()</span></code> method exists, the object will be cast as
an array and its public properties will be made available to the Parser.</p>
<p>This is especially useful with the Entity classes, which has an <code class="docutils literal notranslate"><span class="pre">asArray()</span></code> method
that returns all public and protected properties (minus the _options property) and
makes them available to the Parser.</p>
</section>
<section id="nested-substitutions">
<h3><a class="toc-backref" href="#id7">Nested Substitutions</a><a class="headerlink" href="#nested-substitutions" title="Permalink to this headline"></a></h3>
<p>A nested substitution happens when the value for a pseudo-variable is
an associative array of values, like a record from a database:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;blog_title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Title&#39;</span><span class="p">,</span>
<span class="s1">&#39;blog_heading&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;My Blog Heading&#39;</span><span class="p">,</span>
<span class="s1">&#39;blog_entries&#39;</span> <span class="o">=&gt;</span> <span class="p">[</span>
<span class="p">[</span>
<span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Title 1&#39;</span><span class="p">,</span>
<span class="s1">&#39;body&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Body 1&#39;</span><span class="p">,</span>
<span class="p">],</span>
<span class="p">],</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">render</span><span class="p">(</span><span class="s1">&#39;blog_template&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>The value for the pseudo-variable <code class="docutils literal notranslate"><span class="pre">blog_entries</span></code> is an associative
array. The key/value pairs defined inside it will be exposed inside
the variable pair loop for that variable.</p>
<p>A <strong>blog_template.php</strong> that might work for the above:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">blog_title</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="nx">blog_heading</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="nx">blog_entries</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">h2</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">h2</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">p</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">div</span><span class="o">&gt;</span>
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entries</span><span class="p">}</span>
</pre></div>
</div>
<p>If you would like the other pseudo-variables accessible inside the <code class="docutils literal notranslate"><span class="pre">blog_entries</span></code>
scope, then make sure that the <code class="docutils literal notranslate"><span class="pre">cascadeData</span></code> option is set to true.</p>
</section>
<section id="comments">
<h3><a class="toc-backref" href="#id8">Comments</a><a class="headerlink" href="#comments" title="Permalink to this headline"></a></h3>
<p>You can place comments in your templates that will be ignored and removed during parsing by wrapping the
comments in a <code class="docutils literal notranslate"><span class="pre">{#</span>&#160; <span class="pre">#}</span></code> symbols.</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="c1"># This comment is removed during parsing. #}</span>
<span class="p">{</span><span class="nx">blog_entry</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">h2</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">h2</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o">&lt;/</span><span class="nx">p</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">div</span><span class="o">&gt;</span>
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entry</span><span class="p">}</span>
</pre></div>
</div>
</section>
<section id="cascading-data">
<h3><a class="toc-backref" href="#id9">Cascading Data</a><a class="headerlink" href="#cascading-data" title="Permalink to this headline"></a></h3>
<p>With both a nested and a loop substitution, you have the option of cascading
data pairs into the inner substitution.</p>
<p>The following example is not impacted by cascading:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">&#39;{name} lives in {locations}{city} on {planet}{/locations}.&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;name&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;George&#39;</span><span class="p">,</span>
<span class="s1">&#39;locations&#39;</span> <span class="o">=&gt;</span> <span class="p">[</span>
<span class="p">[</span><span class="s1">&#39;city&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Red City&#39;</span><span class="p">,</span> <span class="s1">&#39;planet&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Mars&#39;</span><span class="p">],</span>
<span class="p">],</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
<span class="c1">// Result: George lives in Red City on Mars.</span>
</pre></div>
</div>
<p>This example gives different results, depending on cascading:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">&#39;{locations}{name} lives in {city} on {planet}{/locations}.&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;name&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;George&#39;</span><span class="p">,</span>
<span class="s1">&#39;locations&#39;</span> <span class="o">=&gt;</span> <span class="p">[</span>
<span class="p">[</span><span class="s1">&#39;city&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Red City&#39;</span><span class="p">,</span> <span class="s1">&#39;planet&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Mars&#39;</span><span class="p">],</span>
<span class="p">],</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;cascadeData&#39;</span> <span class="o">=&gt;</span> <span class="k">false</span><span class="p">]);</span>
<span class="c1">// Result: {name} lives in Red City on Mars.</span>
<span class="c1">// or</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;cascadeData&#39;</span> <span class="o">=&gt;</span> <span class="k">true</span><span class="p">]);</span>
<span class="c1">// Result: George lives in Red City on Mars.</span>
</pre></div>
</div>
</section>
<section id="preventing-parsing">
<h3><a class="toc-backref" href="#id10">Preventing Parsing</a><a class="headerlink" href="#preventing-parsing" title="Permalink to this headline"></a></h3>
<p>You can specify portions of the page to not be parsed with the <code class="docutils literal notranslate"><span class="pre">{noparse}</span></code> <code class="docutils literal notranslate"><span class="pre">{/noparse}</span></code> tag pair. Anything in this
section will stay exactly as it is, with no variable substitution, looping, etc, happening to the markup between the brackets.</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="nx">noparse</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">Untouched</span> <span class="nx">Code</span><span class="o">&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="o">/</span><span class="nx">noparse</span><span class="p">}</span>
</pre></div>
</div>
</section>
<section id="conditional-logic">
<h3><a class="toc-backref" href="#id11">Conditional Logic</a><a class="headerlink" href="#conditional-logic" title="Permalink to this headline"></a></h3>
<p>The Parser class supports some basic conditionals to handle <code class="docutils literal notranslate"><span class="pre">if</span></code>, <code class="docutils literal notranslate"><span class="pre">else</span></code>, and <code class="docutils literal notranslate"><span class="pre">elseif</span></code> syntax. All <code class="docutils literal notranslate"><span class="pre">if</span></code>
blocks must be closed with an <code class="docutils literal notranslate"><span class="pre">endif</span></code> tag:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="k">if</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">&#39;admin&#39;</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Admin</span><span class="o">!&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="k">endif</span><span class="p">}</span>
</pre></div>
</div>
<p>This simple block is converted to the following during parsing:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$role</span> <span class="o">===</span> <span class="s1">&#39;admin&#39;</span><span class="p">)</span><span class="o">:</span> <span class="cp">?&gt;</span>
<span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>Welcome, Admin!<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
<span class="cp">&lt;?php</span> <span class="k">endif</span> <span class="cp">?&gt;</span>
</pre></div>
</div>
<p>All variables used within if statements must have been previously set with the same name. Other than that, it is
treated exactly like a standard PHP conditional, and all standard PHP rules would apply here. You can use any
of the comparison operators you would normally, like <code class="docutils literal notranslate"><span class="pre">==</span></code>, <code class="docutils literal notranslate"><span class="pre">===</span></code>, <code class="docutils literal notranslate"><span class="pre">!==</span></code>, <code class="docutils literal notranslate"><span class="pre">&lt;</span></code>, <code class="docutils literal notranslate"><span class="pre">&gt;</span></code>, etc.</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="k">if</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">&#39;admin&#39;</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Admin</span><span class="o">&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="k">elseif</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">&#39;moderator&#39;</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Moderator</span><span class="o">&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="k">else</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">User</span><span class="o">&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="k">endif</span><span class="p">}</span>
</pre></div>
</div>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>In the background, conditionals are parsed using an <code class="docutils literal notranslate"><span class="pre">eval()</span></code>, so you must ensure that you take
care with the user data that is used within conditionals, or you could open your application up to security risks.</p>
</div>
<section id="changing-the-conditional-delimiters">
<h4>Changing the Conditional Delimiters<a class="headerlink" href="#changing-the-conditional-delimiters" title="Permalink to this headline"></a></h4>
<p>If you have JavaScript code like the following in your templates, the Parser raises a syntax error because there are strings that can be interpreted as a conditional:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="nx">script</span> <span class="nx">type</span><span class="o">=</span><span class="s2">&quot;text/javascript&quot;</span><span class="o">&gt;</span>
<span class="k">var</span> <span class="nx">f</span> <span class="o">=</span> <span class="k">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">hasAlert</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;{message}&#39;</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="o">&lt;/</span><span class="nx">script</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>In that case, you can change the delimiters for conditionals with the <code class="docutils literal notranslate"><span class="pre">setConditionalDelimiters()</span></code> method to avoid misinterpretations:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setConditionalDelimiters</span><span class="p">(</span><span class="s1">&#39;{%&#39;</span><span class="p">,</span> <span class="s1">&#39;%}&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>In this case, you will write code in your template:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">%</span> <span class="k">if</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">&#39;admin&#39;</span> <span class="o">%</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Admin</span><span class="o">&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="o">%</span> <span class="k">else</span> <span class="o">%</span><span class="p">}</span>
<span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">User</span><span class="o">&lt;/</span><span class="nx">h1</span><span class="o">&gt;</span>
<span class="p">{</span><span class="o">%</span> <span class="k">endif</span> <span class="o">%</span><span class="p">}</span>
</pre></div>
</div>
</section>
</section>
<section id="escaping-data">
<h3><a class="toc-backref" href="#id12">Escaping Data</a><a class="headerlink" href="#escaping-data" title="Permalink to this headline"></a></h3>
<p>By default, all variable substitution is escaped to help prevent XSS attacks on your pages. CodeIgniters <code class="docutils literal notranslate"><span class="pre">esc()</span></code> method
supports several different contexts, like general <code class="docutils literal notranslate"><span class="pre">html</span></code>, when its in an HTML <code class="docutils literal notranslate"><span class="pre">attr</span></code>, in <code class="docutils literal notranslate"><span class="pre">css</span></code>, etc. If nothing
else is specified, the data will be assumed to be in an HTML context. You can specify the context used by using the <code class="docutils literal notranslate"><span class="pre">esc()</span></code>
filter:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">user_styles</span> <span class="o">|</span> <span class="nx">esc</span><span class="p">(</span><span class="nx">css</span><span class="p">)</span> <span class="p">}</span>
<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">&quot;{ user_link | esc(attr) }&quot;</span><span class="o">&gt;</span><span class="p">{</span> <span class="nx">title</span> <span class="p">}</span><span class="o">&lt;/</span><span class="nx">a</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>There will be times when you absolutely need something to used and NOT escaped. You can do this by adding exclamation
marks to the opening and closing braces:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">!</span> <span class="nx">unescaped_var</span> <span class="o">!</span><span class="p">}</span>
</pre></div>
</div>
</section>
<section id="filters">
<h3><a class="toc-backref" href="#id13">Filters</a><a class="headerlink" href="#filters" title="Permalink to this headline"></a></h3>
<p>Any single variable substitution can have one or more filters applied to it to modify the way it is presented. These
are not intended to drastically change the output, but provide ways to reuse the same variable data but with different
presentations. The <code class="docutils literal notranslate"><span class="pre">esc</span></code> filter discussed above is one example. Dates are another common use case, where you might
need to format the same data differently in several sections on the same page.</p>
<p>Filters are commands that come after the pseudo-variable name, and are separated by the pipe symbol, <code class="docutils literal notranslate"><span class="pre">|</span></code>:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="c1">// -55 is displayed as 55</span>
<span class="p">{</span> <span class="nx">value</span><span class="o">|</span><span class="nb">abs</span> <span class="p">}</span>
</pre></div>
</div>
<p>If the parameter takes any arguments, they must be separated by commas and enclosed in parentheses:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">created_at</span><span class="o">|</span><span class="nb">date</span><span class="p">(</span><span class="nx">Y</span><span class="o">-</span><span class="nx">m</span><span class="o">-</span><span class="nx">d</span><span class="p">)</span> <span class="p">}</span>
</pre></div>
</div>
<p>Multiple filters can be applied to the value by piping multiple ones together. They are processed in order, from
left to right:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">created_at</span><span class="o">|</span><span class="nb">date_modify</span><span class="p">(</span><span class="o">+</span><span class="mi">5</span> <span class="nx">days</span><span class="p">)</span><span class="o">|</span><span class="nb">date</span><span class="p">(</span><span class="nx">Y</span><span class="o">-</span><span class="nx">m</span><span class="o">-</span><span class="nx">d</span><span class="p">)</span> <span class="p">}</span>
</pre></div>
</div>
<section id="provided-filters">
<h4>Provided Filters<a class="headerlink" href="#provided-filters" title="Permalink to this headline"></a></h4>
<p>The following filters are available when using the parser:</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 12%" />
<col style="width: 13%" />
<col style="width: 45%" />
<col style="width: 29%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Filter</p></th>
<th class="head"><p>Arguments</p></th>
<th class="head"><p>Description</p></th>
<th class="head"><p>Example</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>abs</p></td>
<td></td>
<td><p>Displays the absolute value of a number.</p></td>
<td><p>{ v|abs }</p></td>
</tr>
<tr class="row-odd"><td><p>capitalize</p></td>
<td></td>
<td><p>Displays the string in sentence case: all lowercase
with firstletter capitalized.</p></td>
<td><p>{ v|capitalize}</p></td>
</tr>
<tr class="row-even"><td><p>date</p></td>
<td><p>format (Y-m-d)</p></td>
<td><p>A PHP <strong>date</strong>-compatible formatting string.</p></td>
<td><p>{ v|date(Y-m-d) }</p></td>
</tr>
<tr class="row-odd"><td><p>date_modify</p></td>
<td><p>value to add
/ subtract</p></td>
<td><p>A <strong>strtotime</strong> compatible string to modify the date,
like <code class="docutils literal notranslate"><span class="pre">+5</span> <span class="pre">day</span></code> or <code class="docutils literal notranslate"><span class="pre">-1</span> <span class="pre">week</span></code>.</p></td>
<td><p>{ v|date_modify(+1 day) }</p></td>
</tr>
<tr class="row-even"><td><p>default</p></td>
<td><p>default value</p></td>
<td><p>Displays the default value if the variable is empty or
undefined.</p></td>
<td><p>{ v|default(just in case) }</p></td>
</tr>
<tr class="row-odd"><td><p>esc</p></td>
<td><p>html, attr,
css, js</p></td>
<td><p>Specifies the context to escape the data.</p></td>
<td><p>{ v|esc(attr) }</p></td>
</tr>
<tr class="row-even"><td><p>excerpt</p></td>
<td><p>phrase, radius</p></td>
<td><p>Returns the text within a radius of words from a given
phrase. Same as <strong>excerpt</strong> helper function.</p></td>
<td><p>{ v|excerpt(green giant, 20) }</p></td>
</tr>
<tr class="row-odd"><td><p>highlight</p></td>
<td><p>phrase</p></td>
<td><p>Highlights a given phrase within the text using
&lt;mark&gt;&lt;/mark&gt; tags.</p></td>
<td><p>{ v|highlight(view parser) }</p></td>
</tr>
<tr class="row-even"><td><p>highlight_code</p></td>
<td></td>
<td><p>Highlights code samples with HTML/CSS.</p></td>
<td><p>{ v|highlight_code }</p></td>
</tr>
<tr class="row-odd"><td><p>limit_chars</p></td>
<td><p>limit</p></td>
<td><p>Limits the number of characters to $limit.</p></td>
<td><p>{ v|limit_chars(100) }</p></td>
</tr>
<tr class="row-even"><td><p>limit_words</p></td>
<td><p>limit</p></td>
<td><p>Limits the number of words to $limit.</p></td>
<td><p>{ v|limit_words(20) }</p></td>
</tr>
<tr class="row-odd"><td><p>local_currency</p></td>
<td><p>currency,
locale,
fraction</p></td>
<td><p>Displays a localized version of a currency. “currency”
valueis any 3-letter ISO 4217 currency code.</p></td>
<td><p>{ v|local_currency(EUR,en_US) }</p></td>
</tr>
<tr class="row-even"><td><p>local_number</p></td>
<td><p>type, precision,
locale</p></td>
<td><p>Displays a localized version of a number. “type” can be
one of: decimal, currency, percent, scientific, spellout,
ordinal, duration.</p></td>
<td><p>{ v|local_number(decimal,2,en_US) }</p></td>
</tr>
<tr class="row-odd"><td><p>lower</p></td>
<td></td>
<td><p>Converts a string to lowercase.</p></td>
<td><p>{ v|lower }</p></td>
</tr>
<tr class="row-even"><td><p>nl2br</p></td>
<td></td>
<td><p>Replaces all newline characters (n) to an HTML &lt;br/&gt; tag.</p></td>
<td><p>{ v|nl2br }</p></td>
</tr>
<tr class="row-odd"><td><p>number_format</p></td>
<td><p>places</p></td>
<td><p>Wraps PHP <strong>number_format</strong> function for use within the
parser.</p></td>
<td><p>{ v|number_format(3) }</p></td>
</tr>
<tr class="row-even"><td><p>prose</p></td>
<td></td>
<td><p>Takes a body of text and uses the <strong>auto_typography()</strong>
method to turn it into prettier, easier-to-read, prose.</p></td>
<td><p>{ v|prose }</p></td>
</tr>
<tr class="row-odd"><td><p>round</p></td>
<td><p>places, type</p></td>
<td><p>Rounds a number to the specified places. Types of <strong>ceil</strong>
and <strong>floor</strong> can be passed to use those functions instead.</p></td>
<td><p>{ v|round(3) } { v|round(ceil) }</p></td>
</tr>
<tr class="row-even"><td><p>strip_tags</p></td>
<td><p>allowed chars</p></td>
<td><p>Wraps PHP <strong>strip_tags</strong>. Can accept a string of allowed
tags.</p></td>
<td><p>{ v|strip_tags(&lt;br&gt;) }</p></td>
</tr>
<tr class="row-odd"><td><p>title</p></td>
<td></td>
<td><p>Displays a “title case” version of the string, with all
lowercase, and each word capitalized.</p></td>
<td><p>{ v|title }</p></td>
</tr>
<tr class="row-even"><td><p>upper</p></td>
<td></td>
<td><p>Displays the string in all uppercase.</p></td>
<td><p>{ v|upper }</p></td>
</tr>
</tbody>
</table>
<p>See <a class="reference external" href="https://www.php.net/manual/en/numberformatter.create.php">PHPs NumberFormatter</a> for details relevant to the
“local_number” filter.</p>
</section>
<section id="custom-filters">
<h4>Custom Filters<a class="headerlink" href="#custom-filters" title="Permalink to this headline"></a></h4>
<p>You can easily create your own filters by editing <strong>app/Config/View.php</strong> and adding new entries to the
<code class="docutils literal notranslate"><span class="pre">$filters</span></code> array. Each key is the name which the filter is called by in the view, and its value is any valid PHP
callable:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
<span class="p">{</span>
<span class="k">public</span> <span class="nv">$filters</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;foo&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;\Some\Class::methodName&#39;</span><span class="p">,</span>
<span class="s1">&#39;str_repeat&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;str_repeat&#39;</span><span class="p">,</span> <span class="c1">// native php function</span>
<span class="p">];</span>
<span class="c1">// ...</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
</section>
<section id="parser-plugins">
<h3><a class="toc-backref" href="#id14">Parser Plugins</a><a class="headerlink" href="#parser-plugins" title="Permalink to this headline"></a></h3>
<p>Plugins allow you to extend the parser, adding custom features for each project. They can be any PHP callable, making
them very simple to implement. Within templates, plugins are specified by <code class="docutils literal notranslate"><span class="pre">{+</span> <span class="pre">+}</span></code> tags:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="nx">foo</span> <span class="o">+</span><span class="p">}</span> <span class="nx">inner</span> <span class="nx">content</span> <span class="p">{</span><span class="o">+</span> <span class="o">/</span><span class="nx">foo</span> <span class="o">+</span><span class="p">}</span>
</pre></div>
</div>
<p>This example shows a plugin named <strong>foo</strong>. It can manipulate any of the content between its opening and closing tags.
In this example, it could work with the text ” inner content “. Plugins are processed before any pseudo-variable
replacements happen.</p>
<p>While plugins will often consist of tag pairs, like shown above, they can also be a single tag, with no closing tag:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="nx">foo</span> <span class="o">+</span><span class="p">}</span>
</pre></div>
</div>
<p>Opening tags can also contain parameters that can customize how the plugin works. The parameters are represented as
key/value pairs:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="nx">foo</span> <span class="nx">bar</span><span class="o">=</span><span class="mi">2</span> <span class="nx">baz</span><span class="o">=</span><span class="s2">&quot;x y&quot;</span> <span class="o">+</span><span class="p">}</span>
</pre></div>
</div>
<p>Parameters can also be single values:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="k">include</span> <span class="nx">somefile</span><span class="o">.</span><span class="nx">php</span> <span class="o">+</span><span class="p">}</span>
</pre></div>
</div>
<section id="provided-plugins">
<h4>Provided Plugins<a class="headerlink" href="#provided-plugins" title="Permalink to this headline"></a></h4>
<p>The following plugins are available when using the parser:</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 12%" />
<col style="width: 17%" />
<col style="width: 29%" />
<col style="width: 42%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Plugin</p></th>
<th class="head"><p>Arguments</p></th>
<th class="head"><p>Description</p></th>
<th class="head"><p>Example</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>current_url</p></td>
<td></td>
<td><p>Alias for the current_url helper function.</p></td>
<td><p>{+ current_url +}</p></td>
</tr>
<tr class="row-odd"><td><p>previous_url</p></td>
<td></td>
<td><p>Alias for the previous_url helper function.</p></td>
<td><p>{+ previous_url +}</p></td>
</tr>
<tr class="row-even"><td><p>siteURL</p></td>
<td></td>
<td><p>Alias for the site_url helper function.</p></td>
<td><p>{+ siteURL “login” +}</p></td>
</tr>
<tr class="row-odd"><td><p>mailto</p></td>
<td><p>email, title, attributes</p></td>
<td><p>Alias for the mailto helper function.</p></td>
<td><p>{+ mailto <a class="reference external" href="mailto:email=foo&#37;&#52;&#48;example&#46;com">email=foo<span>&#64;</span>example<span>&#46;</span>com</a> title=”Stranger Things” +}</p></td>
</tr>
<tr class="row-even"><td><p>safe_mailto</p></td>
<td><p>email, title, attributes</p></td>
<td><p>Alias for the safe_mailto helper function.</p></td>
<td><p>{+ safe_mailto <a class="reference external" href="mailto:email=foo&#37;&#52;&#48;example&#46;com">email=foo<span>&#64;</span>example<span>&#46;</span>com</a> title=”Stranger Things” +}</p></td>
</tr>
<tr class="row-odd"><td><p>lang</p></td>
<td><p>language string</p></td>
<td><p>Alias for the lang helper function.</p></td>
<td><p>{+ lang number.terabyteAbbr +}</p></td>
</tr>
<tr class="row-even"><td><p>validation_errors</p></td>
<td><p>fieldname(optional)</p></td>
<td><p>Returns either error string for the field
(if specified) or all validation errors.</p></td>
<td><p>{+ validation_errors +} , {+ validation_errors field=”email” +}</p></td>
</tr>
<tr class="row-odd"><td><p>route</p></td>
<td><p>route name</p></td>
<td><p>Alias for the route_to helper function.</p></td>
<td><p>{+ route “login” +}</p></td>
</tr>
<tr class="row-even"><td><p>csp_script_nonce</p></td>
<td></td>
<td><p>Alias for the csp_script_nonce helper
function.</p></td>
<td><p>{+ csp_script_nonce +}</p></td>
</tr>
<tr class="row-odd"><td><p>csp_style_nonce</p></td>
<td></td>
<td><p>Alias for the csp_style_nonce helper
function.</p></td>
<td><p>{+ csp_style_nonce +}</p></td>
</tr>
</tbody>
</table>
</section>
<section id="registering-a-plugin">
<h4>Registering a Plugin<a class="headerlink" href="#registering-a-plugin" title="Permalink to this headline"></a></h4>
<p>At its simplest, all you need to do to register a new plugin and make it ready for use is to add it to the
<strong>app/Config/View.php</strong>, under the <code class="docutils literal notranslate"><span class="pre">$plugins</span></code> array. The key is the name of the plugin that is
used within the template file. The value is any valid PHP callable, including static class methods:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
<span class="p">{</span>
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;foo&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;\Some\Class::methodName&#39;</span><span class="p">,</span>
<span class="p">];</span>
<span class="c1">// ...</span>
<span class="p">}</span>
</pre></div>
</div>
<p>You can also use closures, but these can only be defined in the config files constructor:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
<span class="p">{</span>
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[];</span>
<span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">()</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">plugins</span><span class="p">[</span><span class="s1">&#39;bar&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="k">static</span> <span class="nx">fn</span> <span class="p">(</span><span class="k">array</span> <span class="nv">$params</span> <span class="o">=</span> <span class="p">[])</span> <span class="o">=&gt;</span> <span class="nv">$params</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">??</span> <span class="s1">&#39;&#39;</span><span class="p">;</span>
<span class="k">parent</span><span class="o">::</span><span class="na">__construct</span><span class="p">();</span>
<span class="p">}</span>
<span class="c1">// ...</span>
<span class="p">}</span>
</pre></div>
</div>
<p>If the callable is on its own, it is treated as a single tag, not a open/close one. It will be replaced by
the return value from the plugin:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
<span class="p">{</span>
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;foo&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;\Some\Class::methodName&#39;</span><span class="p">,</span>
<span class="p">];</span>
<span class="c1">// ...</span>
<span class="p">}</span>
<span class="cm">/*</span>
<span class="cm"> * Tag is replaced by the return value of Some\Class::methodName() static function.</span>
<span class="cm"> * {+ foo +}</span>
<span class="cm"> */</span>
</pre></div>
</div>
<p>If the callable is wrapped in an array, it is treated as an open/close tag pair that can operate on any of
the content between its tags:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
<span class="p">{</span>
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;foo&#39;</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">&#39;\Some\Class::methodName&#39;</span><span class="p">],</span>
<span class="p">];</span>
<span class="c1">// ...</span>
<span class="p">}</span>
<span class="c1">// {+ foo +} inner content {+ /foo +}</span>
</pre></div>
</div>
</section>
</section>
</section>
<section id="usage-notes">
<h2><a class="toc-backref" href="#id15">Usage Notes</a><a class="headerlink" href="#usage-notes" title="Permalink to this headline"></a></h2>
<p>If you include substitution parameters that are not referenced in your
template, they are ignored:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">&#39;Hello, {firstname} {lastname}&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Mr&#39;</span><span class="p">,</span>
<span class="s1">&#39;firstname&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;John&#39;</span><span class="p">,</span>
<span class="s1">&#39;lastname&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Doe&#39;</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
<span class="c1">// Result: Hello, John Doe</span>
</pre></div>
</div>
<p>If you do not include a substitution parameter that is referenced in your
template, the original pseudo-variable is shown in the result:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">&#39;Hello, {firstname} {initials} {lastname}&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Mr&#39;</span><span class="p">,</span>
<span class="s1">&#39;firstname&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;John&#39;</span><span class="p">,</span>
<span class="s1">&#39;lastname&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Doe&#39;</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
<span class="c1">// Result: Hello, John {initials} Doe</span>
</pre></div>
</div>
<p>If you provide a string substitution parameter when an array is expected,
i.e., for a variable pair, the substitution is done for the opening variable
pair tag, but the closing variable pair tag is not rendered properly:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">&#39;Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;degrees&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Mr&#39;</span><span class="p">,</span>
<span class="s1">&#39;firstname&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;John&#39;</span><span class="p">,</span>
<span class="s1">&#39;lastname&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Doe&#39;</span><span class="p">,</span>
<span class="s1">&#39;titles&#39;</span> <span class="o">=&gt;</span> <span class="p">[</span>
<span class="p">[</span><span class="s1">&#39;degree&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;BSc&#39;</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;degree&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;PhD&#39;</span><span class="p">],</span>
<span class="p">],</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
<span class="c1">// Result: Hello, John Doe (Mr{degree} {/degrees})</span>
</pre></div>
</div>
<section id="view-fragments">
<h3><a class="toc-backref" href="#id16">View Fragments</a><a class="headerlink" href="#view-fragments" title="Permalink to this headline"></a></h3>
<p>You do not have to use variable pairs to get the effect of iteration in
your views. It is possible to use a view fragment for what would be inside
a variable pair, and to control the iteration in your controller instead
of in the view.</p>
<p>An example with the iteration controlled in the view:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nv">$template</span> <span class="o">=</span> <span class="s1">&#39;&lt;ul&gt;{menuitems}</span>
<span class="s1"> &lt;li&gt;&lt;a href=&quot;{link}&quot;&gt;{title}&lt;/a&gt;&lt;/li&gt;</span>
<span class="s1">{/menuitems}&lt;/ul&gt;&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;menuitems&#39;</span> <span class="o">=&gt;</span> <span class="p">[</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;First Link&#39;</span><span class="p">,</span> <span class="s1">&#39;link&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;/first&#39;</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Second Link&#39;</span><span class="p">,</span> <span class="s1">&#39;link&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;/second&#39;</span><span class="p">],</span>
<span class="p">]</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
</pre></div>
</div>
<p>Result:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="nx">ul</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">li</span><span class="o">&gt;&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">&quot;/first&quot;</span><span class="o">&gt;</span><span class="nx">First</span> <span class="nx">Link</span><span class="o">&lt;/</span><span class="nx">a</span><span class="o">&gt;&lt;/</span><span class="nx">li</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">li</span><span class="o">&gt;&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">&quot;/second&quot;</span><span class="o">&gt;</span><span class="nx">Second</span> <span class="nx">Link</span><span class="o">&lt;/</span><span class="nx">a</span><span class="o">&gt;&lt;/</span><span class="nx">li</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">ul</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>An example with the iteration controlled in the controller,
using a view fragment:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$temp</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span>
<span class="nv">$template1</span> <span class="o">=</span> <span class="s1">&#39;&lt;li&gt;&lt;a href=&quot;{link}&quot;&gt;{title}&lt;/a&gt;&lt;/li&gt;&#39;</span><span class="p">;</span>
<span class="nv">$data1</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;First Link&#39;</span><span class="p">,</span> <span class="s1">&#39;link&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;/first&#39;</span><span class="p">],</span>
<span class="p">[</span><span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Second Link&#39;</span><span class="p">,</span> <span class="s1">&#39;link&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;/second&#39;</span><span class="p">],</span>
<span class="p">];</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$data1</span> <span class="k">as</span> <span class="nv">$menuItem</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$temp</span> <span class="o">.=</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$menuItem</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template1</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$template2</span> <span class="o">=</span> <span class="s1">&#39;&lt;ul&gt;{menuitems}&lt;/ul&gt;&#39;</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;menuitems&#39;</span> <span class="o">=&gt;</span> <span class="nv">$temp</span><span class="p">,</span>
<span class="p">];</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template2</span><span class="p">);</span>
</pre></div>
</div>
<p>Result:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="nx">ul</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">li</span><span class="o">&gt;&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">&quot;/first&quot;</span><span class="o">&gt;</span><span class="nx">First</span> <span class="nx">Link</span><span class="o">&lt;/</span><span class="nx">a</span><span class="o">&gt;&lt;/</span><span class="nx">li</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="nx">li</span><span class="o">&gt;&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">&quot;/second&quot;</span><span class="o">&gt;</span><span class="nx">Second</span> <span class="nx">Link</span><span class="o">&lt;/</span><span class="nx">a</span><span class="o">&gt;&lt;/</span><span class="nx">li</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="nx">ul</span><span class="o">&gt;</span>
</pre></div>
</div>
</section>
</section>
<section id="namespace-CodeIgniter\View">
<span id="class-reference"></span><h2><a class="toc-backref" href="#id17">Class Reference</a><a class="headerlink" href="#namespace-CodeIgniter\View" title="Permalink to this headline"></a></h2>
<dl class="php class">
<dt class="sig sig-object php" id="CodeIgniter\View\Parser">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">CodeIgniter\View\</span></span><span class="sig-name descname"><span class="pre">Parser</span></span><a class="headerlink" href="#CodeIgniter\View\Parser" title="Permalink to this definition"></a></dt>
<dd><dl class="php method">
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::render">
<span class="sig-name descname"><span class="pre">render</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$view</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$options</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$saveData</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::render" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>$view</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) File name of the view source</p></li>
<li><p><strong>$options</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">array</span></code></span>) Array of options, as key/value pairs</p></li>
<li><p><strong>$saveData</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">boolean</span></code></span>) If true, will save data for use with any other calls, if false, will clean the data after rendering the view.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The rendered text for the chosen view</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span></p>
</dd>
</dl>
<p>Builds the output based upon a file name and any data that has already been set:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">render</span><span class="p">(</span><span class="s1">&#39;myview&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>Options supported:</p>
<blockquote>
<div><ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">cache</span></code> - the time in seconds, to save a views results</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cache_name</span></code> - the ID used to save/retrieve a cached view result; defaults to the viewpath</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cascadeData</span></code> - true if the data pairs in effect when a nested or loop substitution occurs should be propagated</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">saveData</span></code> - true if the view data parameter should be retained for subsequent calls</p></li>
</ul>
</div></blockquote>
<p>Any conditional substitutions are performed first, then remaining
substitutions are performed for each data pair.</p>
</dd></dl>
<dl class="php method">
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::renderString">
<span class="sig-name descname"><span class="pre">renderString</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$template</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$options</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$saveData</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::renderString" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>$template</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) View source provided as a string</p></li>
<li><p><strong>$options</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">array</span></code></span>) Array of options, as key/value pairs</p></li>
<li><p><strong>$saveData</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">boolean</span></code></span>) If true, will save data for use with any other calls, if false, will clean the data after rendering the view.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The rendered text for the chosen view</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span></p>
</dd>
</dl>
<p>Builds the output based upon a provided template source and any data that has already been set:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">renderString</span><span class="p">(</span><span class="s1">&#39;&lt;ul&gt;&lt;li&gt;Item 1&lt;/li&gt;&lt;li&gt;Item 2&lt;/li&gt;&lt;/ul&gt;&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>Options supported, and behavior, as above.</p>
</dd></dl>
<dl class="php method">
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setData">
<span class="sig-name descname"><span class="pre">setData</span></span><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param"><span class="pre">$data</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$context</span> <span class="pre">=</span> <span class="pre">null</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setData" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>$data</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">array</span></code></span>) Array of view data strings, as key/value pairs</p></li>
<li><p><strong>$context</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) The context to use for data escaping.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The Renderer, for method chaining</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
</dd>
</dl>
<p>Sets several pieces of view data at once:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setData</span><span class="p">([</span><span class="s1">&#39;name&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;George&#39;</span><span class="p">,</span> <span class="s1">&#39;position&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Boss&#39;</span><span class="p">]);</span>
</pre></div>
</div>
<p>Supported escape contexts: html, css, js, url, or attr or raw.
If raw, no escaping will happen.</p>
</dd></dl>
<dl class="php method">
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setVar">
<span class="sig-name descname"><span class="pre">setVar</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$name</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$value</span> <span class="pre">=</span> <span class="pre">null</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$context</span> <span class="pre">=</span> <span class="pre">null</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setVar" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>$name</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) Name of the view data variable</p></li>
<li><p><strong>$value</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">mixed</span></code></span>) The value of this view data</p></li>
<li><p><strong>$context</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) The context to use for data escaping.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The Renderer, for method chaining</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
</dd>
</dl>
<p>Sets a single piece of view data:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setVar</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span> <span class="s1">&#39;Joe&#39;</span><span class="p">,</span> <span class="s1">&#39;html&#39;</span><span class="p">);</span>
</pre></div>
</div>
<p>Supported escape contexts: html, css, js, url, attr or raw.
If raw, no escaping will happen.</p>
</dd></dl>
<dl class="php method">
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setDelimiters">
<span class="sig-name descname"><span class="pre">setDelimiters</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$leftDelimiter</span> <span class="pre">=</span> <span class="pre">'{'</span></em>, <em class="sig-param"><span class="pre">$rightDelimiter</span> <span class="pre">=</span> <span class="pre">'}'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setDelimiters" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>$leftDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) Left delimiter for substitution fields</p></li>
<li><p><strong>$rightDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) right delimiter for substitution fields</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The Renderer, for method chaining</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
</dd>
</dl>
<p>Override the substitution field delimiters:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setDelimiters</span><span class="p">(</span><span class="s1">&#39;[&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">);</span>
</pre></div>
</div>
</dd></dl>
<dl class="php method">
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setConditionalDelimiters">
<span class="sig-name descname"><span class="pre">setConditionalDelimiters</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$leftDelimiter</span> <span class="pre">=</span> <span class="pre">'{'</span></em>, <em class="sig-param"><span class="pre">$rightDelimiter</span> <span class="pre">=</span> <span class="pre">'}'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setConditionalDelimiters" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>$leftDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) Left delimiter for conditionals</p></li>
<li><p><strong>$rightDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) right delimiter for conditionals</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The Renderer, for method chaining</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
</dd>
</dl>
<p>Override the conditional delimiters:</p>
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;?</span><span class="nx">php</span>
<span class="nv">$parser</span><span class="o">-&gt;</span><span class="na">setConditionalDelimiters</span><span class="p">(</span><span class="s1">&#39;{%&#39;</span><span class="p">,</span> <span class="s1">&#39;%}&#39;</span><span class="p">);</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="view_layouts.html" class="btn btn-neutral float-left" title="View Layouts" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="view_decorators.html" class="btn btn-neutral float-right" title="View Decorators" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2019-2023 CodeIgniter Foundation.
<span class="lastupdated">Last updated on Nov 27, 2023.
</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>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(false);
});
</script>
</body>
</html>