From 6c7a4266410070d30f8f6bcdf9c9e67f3d6478e3 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Mon, 19 Jun 2017 11:33:58 +0300 Subject: [ci skip] 3.1.5 release --- user_guide/general/alternative_php.html | 567 ++++++++++++ user_guide/general/ancillary_classes.html | 579 ++++++++++++ user_guide/general/autoloader.html | 520 +++++++++++ user_guide/general/caching.html | 564 +++++++++++ user_guide/general/cli.html | 574 ++++++++++++ user_guide/general/common_functions.html | 777 ++++++++++++++++ user_guide/general/compatibility_functions.html | 915 ++++++++++++++++++ user_guide/general/controllers.html | 846 +++++++++++++++++ user_guide/general/core_classes.html | 613 ++++++++++++ user_guide/general/creating_drivers.html | 525 +++++++++++ user_guide/general/creating_libraries.html | 754 +++++++++++++++ user_guide/general/credits.html | 503 ++++++++++ user_guide/general/drivers.html | 531 +++++++++++ user_guide/general/environments.html | 539 +++++++++++ user_guide/general/errors.html | 650 +++++++++++++ user_guide/general/helpers.html | 630 +++++++++++++ user_guide/general/hooks.html | 618 +++++++++++++ user_guide/general/index.html | 570 ++++++++++++ user_guide/general/libraries.html | 522 +++++++++++ user_guide/general/managing_apps.html | 555 +++++++++++ user_guide/general/models.html | 686 ++++++++++++++ user_guide/general/profiling.html | 625 +++++++++++++ user_guide/general/requirements.html | 512 ++++++++++ user_guide/general/reserved_names.html | 584 ++++++++++++ user_guide/general/routing.html | 690 ++++++++++++++ user_guide/general/security.html | 664 +++++++++++++ user_guide/general/styleguide.html | 1129 +++++++++++++++++++++++ user_guide/general/urls.html | 598 ++++++++++++ user_guide/general/views.html | 705 ++++++++++++++ user_guide/general/welcome.html | 521 +++++++++++ 30 files changed, 19066 insertions(+) create mode 100644 user_guide/general/alternative_php.html create mode 100644 user_guide/general/ancillary_classes.html create mode 100644 user_guide/general/autoloader.html create mode 100644 user_guide/general/caching.html create mode 100644 user_guide/general/cli.html create mode 100644 user_guide/general/common_functions.html create mode 100644 user_guide/general/compatibility_functions.html create mode 100644 user_guide/general/controllers.html create mode 100644 user_guide/general/core_classes.html create mode 100644 user_guide/general/creating_drivers.html create mode 100644 user_guide/general/creating_libraries.html create mode 100644 user_guide/general/credits.html create mode 100644 user_guide/general/drivers.html create mode 100644 user_guide/general/environments.html create mode 100644 user_guide/general/errors.html create mode 100644 user_guide/general/helpers.html create mode 100644 user_guide/general/hooks.html create mode 100644 user_guide/general/index.html create mode 100644 user_guide/general/libraries.html create mode 100644 user_guide/general/managing_apps.html create mode 100644 user_guide/general/models.html create mode 100644 user_guide/general/profiling.html create mode 100644 user_guide/general/requirements.html create mode 100644 user_guide/general/reserved_names.html create mode 100644 user_guide/general/routing.html create mode 100644 user_guide/general/security.html create mode 100644 user_guide/general/styleguide.html create mode 100644 user_guide/general/urls.html create mode 100644 user_guide/general/views.html create mode 100644 user_guide/general/welcome.html (limited to 'user_guide/general') diff --git a/user_guide/general/alternative_php.html b/user_guide/general/alternative_php.html new file mode 100644 index 000000000..381405310 --- /dev/null +++ b/user_guide/general/alternative_php.html @@ -0,0 +1,567 @@ + + + + + + + + + + Alternate PHP Syntax for View Files — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Alternate PHP Syntax for View Files

+

If you do not utilize CodeIgniter’s template +engine, you’ll be using pure PHP in your +View files. To minimize the PHP code in these files, and to make it +easier to identify the code blocks it is recommended that you use PHPs +alternative syntax for control structures and short tag echo statements. +If you are not familiar with this syntax, it allows you to eliminate the +braces from your code, and eliminate “echo” statements.

+
+

Automatic Short Tag Support

+
+

Note

+

If you find that the syntax described in this page does not +work on your server it might be that “short tags” are disabled in your +PHP ini file. CodeIgniter will optionally rewrite short tags on-the-fly, +allowing you to use that syntax even if your server doesn’t support it. +This feature can be enabled in your config/config.php file.

+
+

Please note that if you do use this feature, if PHP errors are +encountered in your view files, the error message and line number +will not be accurately shown. Instead, all errors will be shown as +eval() errors.

+
+
+

Alternative Echos

+

Normally to echo, or print out a variable you would do this:

+
<?php echo $variable; ?>
+
+
+

With the alternative syntax you can instead do it this way:

+
<?=$variable?>
+
+
+
+
+

Alternative Control Structures

+

Controls structures, like if, for, foreach, and while can be written in +a simplified format as well. Here is an example using foreach:

+
<ul>
+
+<?php foreach ($todo as $item): ?>
+
+        <li><?=$item?></li>
+
+<?php endforeach; ?>
+
+</ul>
+
+
+

Notice that there are no braces. Instead, the end brace is replaced with +endforeach. Each of the control structures listed above has a similar +closing syntax: endif, endfor, endforeach, and endwhile

+

Also notice that instead of using a semicolon after each structure +(except the last one), there is a colon. This is important!

+

Here is another example, using if/elseif/else. Notice the colons:

+
<?php if ($username === 'sally'): ?>
+
+        <h3>Hi Sally</h3>
+
+<?php elseif ($username === 'joe'): ?>
+
+        <h3>Hi Joe</h3>
+
+<?php else: ?>
+
+        <h3>Hi unknown user</h3>
+
+<?php endif; ?>
+
+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/ancillary_classes.html b/user_guide/general/ancillary_classes.html new file mode 100644 index 000000000..08cff0ae6 --- /dev/null +++ b/user_guide/general/ancillary_classes.html @@ -0,0 +1,579 @@ + + + + + + + + + + Creating Ancillary Classes — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Creating Ancillary Classes

+

In some cases you may want to develop classes that exist apart from your +controllers but have the ability to utilize all of CodeIgniter’s +resources. This is easily possible as you’ll see.

+
+

get_instance()

+
+
+get_instance()
+
+++ + + + + + +
Returns:Reference to your controller’s instance
Return type:CI_Controller
+
+ +

Any class that you instantiate within your controller methods can +access CodeIgniter’s native resources simply by using the +get_instance() function. This function returns the main +CodeIgniter object.

+

Normally, to call any of the available methods, CodeIgniter requires +you to use the $this construct:

+
$this->load->helper('url');
+$this->load->library('session');
+$this->config->item('base_url');
+// etc.
+
+
+

$this, however, only works within your controllers, your models, +or your views. If you would like to use CodeIgniter’s classes from +within your own custom classes you can do so as follows:

+

First, assign the CodeIgniter object to a variable:

+
$CI =& get_instance();
+
+
+

Once you’ve assigned the object to a variable, you’ll use that variable +instead of $this:

+
$CI =& get_instance();
+
+$CI->load->helper('url');
+$CI->load->library('session');
+$CI->config->item('base_url');
+// etc.
+
+
+

If you’ll be using get_instance() inside another class, then it would +be better if you assign it to a property. This way, you won’t need to call +get_instance() in every single method.

+

Example:

+
class Example {
+
+        protected $CI;
+
+        // We'll use a constructor, as you can't directly call a function
+        // from a property definition.
+        public function __construct()
+        {
+                // Assign the CodeIgniter super-object
+                $this->CI =& get_instance();
+        }
+
+        public function foo()
+        {
+                $this->CI->load->helper('url');
+                redirect();
+        }
+
+        public function bar()
+        {
+                $this->CI->config->item('base_url');
+        }
+}
+
+
+

In the above example, both methods foo() and bar() will work +after you instantiate the Example class, without the need to call +get_instance() in each of them.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/autoloader.html b/user_guide/general/autoloader.html new file mode 100644 index 000000000..4093a625b --- /dev/null +++ b/user_guide/general/autoloader.html @@ -0,0 +1,520 @@ + + + + + + + + + + Auto-loading Resources — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Auto-loading Resources

+

CodeIgniter comes with an “Auto-load” feature that permits libraries, +helpers, and models to be initialized automatically every time the +system runs. If you need certain resources globally throughout your +application you should consider auto-loading them for convenience.

+

The following items can be loaded automatically:

+
    +
  • Classes found in the libraries/ directory
  • +
  • Helper files found in the helpers/ directory
  • +
  • Custom config files found in the config/ directory
  • +
  • Language files found in the system/language/ directory
  • +
  • Models found in the models/ folder
  • +
+

To autoload resources, open the application/config/autoload.php +file and add the item you want loaded to the autoload array. You’ll +find instructions in that file corresponding to each type of item.

+
+

Note

+

Do not include the file extension (.php) when adding items to +the autoload array.

+
+

Additionally, if you want CodeIgniter to use a Composer +auto-loader, just set $config['composer_autoload'] to TRUE or +a custom path in application/config/config.php.

+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/caching.html b/user_guide/general/caching.html new file mode 100644 index 000000000..ea7b12e2d --- /dev/null +++ b/user_guide/general/caching.html @@ -0,0 +1,564 @@ + + + + + + + + + + Web Page Caching — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Web Page Caching

+

CodeIgniter lets you cache your pages in order to achieve maximum +performance.

+

Although CodeIgniter is quite fast, the amount of dynamic information +you display in your pages will correlate directly to the server +resources, memory, and processing cycles utilized, which affect your +page load speeds. By caching your pages, since they are saved in their +fully rendered state, you can achieve performance that nears that of +static web pages.

+
+

How Does Caching Work?

+

Caching can be enabled on a per-page basis, and you can set the length +of time that a page should remain cached before being refreshed. When a +page is loaded for the first time, the cache file will be written to +your application/cache folder. On subsequent page loads the cache file +will be retrieved and sent to the requesting user’s browser. If it has +expired, it will be deleted and refreshed before being sent to the +browser.

+
+
+

Enabling Caching

+

To enable caching, put the following tag in any of your controller +methods:

+
$this->output->cache($n);
+
+
+

Where $n is the number of minutes you wish the page to remain +cached between refreshes.

+

The above tag can go anywhere within a method. It is not affected by +the order that it appears, so place it wherever it seems most logical to +you. Once the tag is in place, your pages will begin being cached.

+
+

Important

+

Because of the way CodeIgniter stores content for output, +caching will only work if you are generating display for your +controller with a view.

+
+
+

Important

+

If you change configuration options that might affect +your output, you have to manually delete your cache files.

+
+
+

Note

+

Before the cache files can be written you must set the file +permissions on your application/cache/ directory such that +it is writable.

+
+
+
+

Deleting Caches

+

If you no longer wish to cache a file you can remove the caching tag and +it will no longer be refreshed when it expires.

+
+

Note

+

Removing the tag will not delete the cache immediately. It will +have to expire normally.

+
+

If you need to manually delete the cache, you can use the delete_cache() +method:

+
// Deletes cache for the currently requested URI
+$this->output->delete_cache();
+
+// Deletes cache for /foo/bar
+$this->output->delete_cache('/foo/bar');
+
+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/cli.html b/user_guide/general/cli.html new file mode 100644 index 000000000..309915a7f --- /dev/null +++ b/user_guide/general/cli.html @@ -0,0 +1,574 @@ + + + + + + + + + + Running via the CLI — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Running via the CLI

+

As well as calling an applications Controllers +via the URL in a browser they can also be loaded via the command-line +interface (CLI).

+ +
+

What is the CLI?

+

The command-line interface is a text-based method of interacting with +computers. For more information, check the Wikipedia +article.

+
+
+

Why run via the command-line?

+

There are many reasons for running CodeIgniter from the command-line, +but they are not always obvious.

+
    +
  • Run your cron-jobs without needing to use wget or curl
  • +
  • Make your cron-jobs inaccessible from being loaded in the URL by +checking the return value of is_cli().
  • +
  • Make interactive “tasks” that can do things like set permissions, +prune cache folders, run backups, etc.
  • +
  • Integrate with other applications in other languages. For example, a +random C++ script could call one command and run code in your models!
  • +
+
+
+

Let’s try it: Hello World!

+

Let’s create a simple controller so you can see it in action. Using your +text editor, create a file called Tools.php, and put the following code +in it:

+
<?php
+class Tools extends CI_Controller {
+
+        public function message($to = 'World')
+        {
+                echo "Hello {$to}!".PHP_EOL;
+        }
+}
+
+
+

Then save the file to your application/controllers/ folder.

+

Now normally you would visit the site using a URL similar to this:

+
example.com/index.php/tools/message/to
+
+
+

Instead, we are going to open the terminal in Mac/Linux or go to Run > “cmd” +in Windows and navigate to our CodeIgniter project.

+
$ cd /path/to/project;
+$ php index.php tools message
+
+
+

If you did it right, you should see Hello World! printed.

+
$ php index.php tools message "John Smith"
+
+
+

Here we are passing it a argument in the same way that URL parameters +work. “John Smith” is passed as a argument and output is:

+
Hello John Smith!
+
+
+
+
+

That’s it!

+

That, in a nutshell, is all there is to know about controllers on the +command line. Remember that this is just a normal controller, so routing +and _remap() works fine.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/common_functions.html b/user_guide/general/common_functions.html new file mode 100644 index 000000000..6384c17fb --- /dev/null +++ b/user_guide/general/common_functions.html @@ -0,0 +1,777 @@ + + + + + + + + + + Common Functions — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Common Functions

+

CodeIgniter uses a few functions for its operation that are globally +defined, and are available to you at any point. These do not require +loading any libraries or helpers.

+
+
+is_php($version)
+
+++ + + + + + + + +
Parameters:
    +
  • $version (string) – Version number
  • +
+
Returns:

TRUE if the running PHP version is at least the one specified or FALSE if not

+
Return type:

bool

+
+

Determines if the PHP version being used is greater than the +supplied version number.

+

Example:

+
if (is_php('5.3'))
+{
+        $str = quoted_printable_encode($str);
+}
+
+
+

Returns boolean TRUE if the installed version of PHP is equal to or +greater than the supplied version number. Returns FALSE if the installed +version of PHP is lower than the supplied version number.

+
+ +
+
+is_really_writable($file)
+
+++ + + + + + + + +
Parameters:
    +
  • $file (string) – File path
  • +
+
Returns:

TRUE if the path is writable, FALSE if not

+
Return type:

bool

+
+

is_writable() returns TRUE on Windows servers when you really can’t +write to the file as the OS reports to PHP as FALSE only if the +read-only attribute is marked.

+

This function determines if a file is actually writable by attempting +to write to it first. Generally only recommended on platforms where +this information may be unreliable.

+

Example:

+
if (is_really_writable('file.txt'))
+{
+        echo "I could write to this if I wanted to";
+}
+else
+{
+        echo "File is not writable";
+}
+
+
+
+

Note

+

See also PHP bug #54709 for more info.

+
+
+ +
+
+config_item($key)
+
+++ + + + + + + + +
Parameters:
    +
  • $key (string) – Config item key
  • +
+
Returns:

Configuration key value or NULL if not found

+
Return type:

mixed

+
+

The Config Library is the preferred way of +accessing configuration information, however config_item() can be used +to retrieve single keys. See Config Library +documentation for more information.

+
+ +
+
+set_status_header($code[, $text = ''])
+
+++ + + + + + +
Parameters:
    +
  • $code (int) – HTTP Response status code
  • +
  • $text (string) – A custom message to set with the status code
  • +
+
Return type:

void

+
+

Permits you to manually set a server status header. Example:

+
set_status_header(401);
+// Sets the header as:  Unauthorized
+
+
+

See here for +a full list of headers.

+
+ +
+
+remove_invisible_characters($str[, $url_encoded = TRUE])
+
+++ + + + + + + + +
Parameters:
    +
  • $str (string) – Input string
  • +
  • $url_encoded (bool) – Whether to remove URL-encoded characters as well
  • +
+
Returns:

Sanitized string

+
Return type:

string

+
+

This function prevents inserting NULL characters between ASCII +characters, like Java\0script.

+

Example:

+
remove_invisible_characters('Java\\0script');
+// Returns: 'Javascript'
+
+
+
+ +
+
+html_escape($var)
+
+++ + + + + + + + +
Parameters:
    +
  • $var (mixed) – Variable to escape (string or array)
  • +
+
Returns:

HTML escaped string(s)

+
Return type:

mixed

+
+

This function acts as an alias for PHP’s native htmlspecialchars() +function, with the advantage of being able to accept an array of strings.

+

It is useful in preventing Cross Site Scripting (XSS).

+
+ +
+
+get_mimes()
+
+++ + + + + + +
Returns:An associative array of file types
Return type:array
+

This function returns a reference to the MIMEs array from +application/config/mimes.php.

+
+ +
+
+is_https()
+
+++ + + + + + +
Returns:TRUE if currently using HTTP-over-SSL, FALSE if not
Return type:bool
+

Returns TRUE if a secure (HTTPS) connection is used and FALSE +in any other case (including non-HTTP requests).

+
+ +
+
+is_cli()
+
+++ + + + + + +
Returns:TRUE if currently running under CLI, FALSE otherwise
Return type:bool
+

Returns TRUE if the application is run through the command line +and FALSE if not.

+
+

Note

+

This function checks both if the PHP_SAPI value is ‘cli’ +or if the STDIN constant is defined.

+
+
+ +
+
+function_usable($function_name)
+
+++ + + + + + + + +
Parameters:
    +
  • $function_name (string) – Function name
  • +
+
Returns:

TRUE if the function can be used, FALSE if not

+
Return type:

bool

+
+

Returns TRUE if a function exists and is usable, FALSE otherwise.

+

This function runs a function_exists() check and if the +Suhosin extension <http://www.hardened-php.net/suhosin/> is loaded, +checks if it doesn’t disable the function being checked.

+

It is useful if you want to check for the availability of functions +such as eval() and exec(), which are dangerous and might be +disabled on servers with highly restrictive security policies.

+
+

Note

+

This function was introduced because Suhosin terminated +script execution, but this turned out to be a bug. A fix +has been available for some time (version 0.9.34), but is +unfortunately not released yet.

+
+
+ +
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/compatibility_functions.html b/user_guide/general/compatibility_functions.html new file mode 100644 index 000000000..d085b1f3c --- /dev/null +++ b/user_guide/general/compatibility_functions.html @@ -0,0 +1,915 @@ + + + + + + + + + + Compatibility Functions — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Compatibility Functions

+

CodeIgniter provides a set of compatibility functions that enable +you to use functions what are otherwise natively available in PHP, +but only in higher versions or depending on a certain extension.

+

Being custom implementations, these functions will also have some +set of dependencies on their own, but are still useful if your +PHP setup doesn’t offer them natively.

+
+

Note

+

Much like the common functions, the +compatibility functions are always available, as long as +their dependencies are met.

+
+ +
+

Password Hashing

+

This set of compatibility functions offers a “backport” of PHP’s +standard Password Hashing extension +that is otherwise available only since PHP 5.5.

+
+

Dependencies

+
    +
  • PHP 5.3.7
  • +
  • CRYPT_BLOWFISH support for crypt()
  • +
+
+
+

Constants

+
    +
  • PASSWORD_BCRYPT
  • +
  • PASSWORD_DEFAULT
  • +
+
+
+

Function reference

+
+
+password_get_info($hash)
+
+++ + + + + + + + +
Parameters:
    +
  • $hash (string) – Password hash
  • +
+
Returns:

Information about the hashed password

+
Return type:

array

+
+

For more information, please refer to the PHP manual for +password_get_info().

+
+ +
+
+password_hash($password, $algo[, $options = array()])
+
+++ + + + + + + + +
Parameters:
    +
  • $password (string) – Plain-text password
  • +
  • $algo (int) – Hashing algorithm
  • +
  • $options (array) – Hashing options
  • +
+
Returns:

Hashed password or FALSE on failure

+
Return type:

string

+
+

For more information, please refer to the PHP manual for +password_hash().

+
+

Note

+

Unless you provide your own (and valid) salt, this function +has a further dependency on an available CSPRNG source. Each +of the following would satisfy that: +- mcrypt_create_iv() with MCRYPT_DEV_URANDOM +- openssl_random_pseudo_bytes() +- /dev/arandom +- /dev/urandom

+
+
+ +
+
+password_needs_rehash()
+
+++ + + + + + + + +
Parameters:
    +
  • $hash (string) – Password hash
  • +
  • $algo (int) – Hashing algorithm
  • +
  • $options (array) – Hashing options
  • +
+
Returns:

TRUE if the hash should be rehashed to match the given algorithm and options, FALSE otherwise

+
Return type:

bool

+
+

For more information, please refer to the PHP manual for +password_needs_rehash().

+
+ +
+
+password_verify($password, $hash)
+
+++ + + + + + + + +
Parameters:
    +
  • $password (string) – Plain-text password
  • +
  • $hash (string) – Password hash
  • +
+
Returns:

TRUE if the password matches the hash, FALSE if not

+
Return type:

bool

+
+

For more information, please refer to the PHP manual for +password_verify().

+
+ +
+
+
+

Hash (Message Digest)

+

This compatibility layer contains backports for the hash_equals() +and hash_pbkdf2() functions, which otherwise require PHP 5.6 and/or +PHP 5.5 respectively.

+
+

Dependencies

+
    +
  • None
  • +
+
+
+

Function reference

+
+
+hash_equals($known_string, $user_string)
+
+++ + + + + + + + +
Parameters:
    +
  • $known_string (string) – Known string
  • +
  • $user_string (string) – User-supplied string
  • +
+
Returns:

TRUE if the strings match, FALSE otherwise

+
Return type:

string

+
+

For more information, please refer to the PHP manual for +hash_equals().

+
+ +
+
+hash_pbkdf2($algo, $password, $salt, $iterations[, $length = 0[, $raw_output = FALSE]])
+
+++ + + + + + + + +
Parameters:
    +
  • $algo (string) – Hashing algorithm
  • +
  • $password (string) – Password
  • +
  • $salt (string) – Hash salt
  • +
  • $iterations (int) – Number of iterations to perform during derivation
  • +
  • $length (int) – Output string length
  • +
  • $raw_output (bool) – Whether to return raw binary data
  • +
+
Returns:

Password-derived key or FALSE on failure

+
Return type:

string

+
+

For more information, please refer to the PHP manual for +hash_pbkdf2().

+
+ +
+
+
+

Multibyte String

+

This set of compatibility functions offers limited support for PHP’s +Multibyte String extension. Because of +the limited alternative solutions, only a few functions are available.

+
+

Note

+

When a character set parameter is ommited, +$config['charset'] will be used.

+
+
+

Dependencies

+ +
+

Important

+

This dependency is optional and these functions will +always be declared. If iconv is not available, they WILL +fall-back to their non-mbstring versions.

+
+
+

Important

+

Where a character set is supplied, it must be +supported by iconv and in a format that it recognizes.

+
+
+

Note

+

For you own dependency check on the actual mbstring +extension, use the MB_ENABLED constant.

+
+
+
+

Function reference

+
+
+mb_strlen($str[, $encoding = NULL])
+
+++ + + + + + + + +
Parameters:
    +
  • $str (string) – Input string
  • +
  • $encoding (string) – Character set
  • +
+
Returns:

Number of characters in the input string or FALSE on failure

+
Return type:

string

+
+

For more information, please refer to the PHP manual for +mb_strlen().

+
+ +
+
+mb_strpos($haystack, $needle[, $offset = 0[, $encoding = NULL]])
+
+++ + + + + + + + +
Parameters:
    +
  • $haystack (string) – String to search in
  • +
  • $needle (string) – Part of string to search for
  • +
  • $offset (int) – Search offset
  • +
  • $encoding (string) – Character set
  • +
+
Returns:

Numeric character position of where $needle was found or FALSE if not found

+
Return type:

mixed

+
+

For more information, please refer to the PHP manual for +mb_strpos().

+
+ +
+
+mb_substr($str, $start[, $length = NULL[, $encoding = NULL]])
+
+++ + + + + + + + +
Parameters:
    +
  • $str (string) – Input string
  • +
  • $start (int) – Position of first character
  • +
  • $length (int) – Maximum number of characters
  • +
  • $encoding (string) – Character set
  • +
+
Returns:

Portion of $str specified by $start and $length or FALSE on failure

+
Return type:

string

+
+

For more information, please refer to the PHP manual for +mb_substr().

+
+ +
+
+
+

Standard Functions

+

This set of compatibility functions offers support for a few +standard functions in PHP that otherwise require a newer PHP version.

+
+

Dependencies

+
    +
  • None
  • +
+
+
+

Function reference

+
+
+array_column(array $array, $column_key[, $index_key = NULL])
+
+++ + + + + + + + +
Parameters:
    +
  • $array (array) – Array to fetch results from
  • +
  • $column_key (mixed) – Key of the column to return values from
  • +
  • $index_key (mixed) – Key to use for the returned values
  • +
+
Returns:

An array of values representing a single column from the input array

+
Return type:

array

+
+

For more information, please refer to the PHP manual for +array_column().

+
+ +
+
+hex2bin($data)
+
+++ + + + + + + + +
Parameters:
    +
  • $data (array) – Hexadecimal representation of data
  • +
+
Returns:

Binary representation of the given data

+
Return type:

string

+
+

For more information, please refer to the PHP manual for hex2bin().

+
+ +
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/controllers.html b/user_guide/general/controllers.html new file mode 100644 index 000000000..2ffe7f5fc --- /dev/null +++ b/user_guide/general/controllers.html @@ -0,0 +1,846 @@ + + + + + + + + + + Controllers — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Controllers

+

Controllers are the heart of your application, as they determine how +HTTP requests should be handled.

+ +
+

What is a Controller?

+

A Controller is simply a class file that is named in a way that can be +associated with a URI.

+

Consider this URI:

+
example.com/index.php/blog/
+
+
+

In the above example, CodeIgniter would attempt to find a controller +named Blog.php and load it.

+

When a controller’s name matches the first segment of a URI, it will +be loaded.

+
+
+

Let’s try it: Hello World!

+

Let’s create a simple controller so you can see it in action. Using your +text editor, create a file called Blog.php, and put the following code +in it:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                echo 'Hello World!';
+        }
+}
+
+
+

Then save the file to your application/controllers/ directory.

+
+

Important

+

The file must be called ‘Blog.php’, with a capital ‘B’.

+
+

Now visit the your site using a URL similar to this:

+
example.com/index.php/blog/
+
+
+

If you did it right, you should see:

+
+
Hello World!
+
+

Important

+

Class names must start with an uppercase letter.

+
+

This is valid:

+
<?php
+class Blog extends CI_Controller {
+
+}
+
+
+

This is not valid:

+
<?php
+class blog extends CI_Controller {
+
+}
+
+
+

Also, always make sure your controller extends the parent controller +class so that it can inherit all its methods.

+
+
+

Methods

+

In the above example the method name is index(). The “index” method +is always loaded by default if the second segment of the URI is +empty. Another way to show your “Hello World” message would be this:

+
example.com/index.php/blog/index/
+
+
+

The second segment of the URI determines which method in the +controller gets called.

+

Let’s try it. Add a new method to your controller:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                echo 'Hello World!';
+        }
+
+        public function comments()
+        {
+                echo 'Look at this!';
+        }
+}
+
+
+

Now load the following URL to see the comment method:

+
example.com/index.php/blog/comments/
+
+
+

You should see your new message.

+
+
+

Passing URI Segments to your methods

+

If your URI contains more than two segments they will be passed to your +method as parameters.

+

For example, let’s say you have a URI like this:

+
example.com/index.php/products/shoes/sandals/123
+
+
+

Your method will be passed URI segments 3 and 4 (“sandals” and “123”):

+
<?php
+class Products extends CI_Controller {
+
+        public function shoes($sandals, $id)
+        {
+                echo $sandals;
+                echo $id;
+        }
+}
+
+
+
+

Important

+

If you are using the URI Routing +feature, the segments passed to your method will be the re-routed +ones.

+
+
+
+

Defining a Default Controller

+

CodeIgniter can be told to load a default controller when a URI is not +present, as will be the case when only your site root URL is requested. +To specify a default controller, open your application/config/routes.php +file and set this variable:

+
$route['default_controller'] = 'blog';
+
+
+

Where ‘blog’ is the name of the controller class you want used. If you now +load your main index.php file without specifying any URI segments you’ll +see your “Hello World” message by default.

+

For more information, please refer to the “Reserved Routes” section of the +URI Routing documentation.

+
+
+

Remapping Method Calls

+

As noted above, the second segment of the URI typically determines which +method in the controller gets called. CodeIgniter permits you to override +this behavior through the use of the _remap() method:

+
public function _remap()
+{
+        // Some code here...
+}
+
+
+
+

Important

+

If your controller contains a method named _remap(), +it will always get called regardless of what your URI contains. It +overrides the normal behavior in which the URI determines which method +is called, allowing you to define your own method routing rules.

+
+

The overridden method call (typically the second segment of the URI) will +be passed as a parameter to the _remap() method:

+
public function _remap($method)
+{
+        if ($method === 'some_method')
+        {
+                $this->$method();
+        }
+        else
+        {
+                $this->default_method();
+        }
+}
+
+
+

Any extra segments after the method name are passed into _remap() as an +optional second parameter. This array can be used in combination with +PHP’s call_user_func_array() +to emulate CodeIgniter’s default behavior.

+

Example:

+
public function _remap($method, $params = array())
+{
+        $method = 'process_'.$method;
+        if (method_exists($this, $method))
+        {
+                return call_user_func_array(array($this, $method), $params);
+        }
+        show_404();
+}
+
+
+
+
+

Processing Output

+

CodeIgniter has an output class that takes care of sending your final +rendered data to the web browser automatically. More information on this +can be found in the Views and Output Class pages. In some cases, however, you might want to +post-process the finalized data in some way and send it to the browser +yourself. CodeIgniter permits you to add a method named _output() +to your controller that will receive the finalized output data.

+
+

Important

+

If your controller contains a method named _output(), +it will always be called by the output class instead of +echoing the finalized data directly. The first parameter of the +method will contain the finalized output.

+
+

Here is an example:

+
public function _output($output)
+{
+        echo $output;
+}
+
+
+
+

Note

+

Please note that your _output() method will receive the +data in its finalized state. Benchmark and memory usage data +will be rendered, cache files written (if you have caching +enabled), and headers will be sent (if you use that +feature) before it is handed off +to the _output() method. +To have your controller’s output cached properly, its +_output() method can use:

+
if ($this->output->cache_expiration > 0)
+{
+        $this->output->_write_cache($output);
+}
+
+
+

If you are using this feature the page execution timer and +memory usage stats might not be perfectly accurate since they +will not take into account any further processing you do. +For an alternate way to control output before any of the +final processing is done, please see the available methods +in the Output Library.

+
+
+
+

Private methods

+

In some cases you may want certain methods hidden from public access. +In order to achieve this, simply declare the method as being private +or protected and it will not be served via a URL request. For example, +if you were to have a method like this:

+
private function _utility()
+{
+        // some code
+}
+
+
+

Trying to access it via the URL, like this, will not work:

+
example.com/index.php/blog/_utility/
+
+
+
+

Note

+

Prefixing method names with an underscore will also prevent +them from being called. This is a legacy feature that is left +for backwards-compatibility.

+
+
+
+

Organizing Your Controllers into Sub-directories

+

If you are building a large application you might want to hierarchically +organize or structure your controllers into sub-directories. CodeIgniter +permits you to do this.

+

Simply create sub-directories under the main application/controllers/ +one and place your controller classes within them.

+
+

Note

+

When using this feature the first segment of your URI must +specify the folder. For example, let’s say you have a controller located +here:

+
application/controllers/products/Shoes.php
+
+
+

To call the above controller your URI will look something like this:

+
example.com/index.php/products/shoes/show/123
+
+
+
+

Each of your sub-directories may contain a default controller which will be +called if the URL contains only the sub-directory. Simply put a controller +in there that matches the name of your ‘default_controller’ as specified in +your application/config/routes.php file.

+

CodeIgniter also permits you to remap your URIs using its URI +Routing feature.

+
+
+

Class Constructors

+

If you intend to use a constructor in any of your Controllers, you +MUST place the following line of code in it:

+
parent::__construct();
+
+
+

The reason this line is necessary is because your local constructor will +be overriding the one in the parent controller class so we need to +manually call it.

+

Example:

+
<?php
+class Blog extends CI_Controller {
+
+        public function __construct()
+        {
+                parent::__construct();
+                // Your own constructor code
+        }
+}
+
+
+

Constructors are useful if you need to set some default values, or run a +default process when your class is instantiated. Constructors can’t +return a value, but they can do some default work.

+
+
+

Reserved method names

+

Since your controller classes will extend the main application +controller you must be careful not to name your methods identically to +the ones used by that class, otherwise your local functions will +override them. See Reserved Names for a full +list.

+
+

Important

+

You should also never have a method named identically +to its class name. If you do, and there is no __construct() +method in the same class, then your e.g. Index::index() +method will be executed as a class constructor! This is a PHP4 +backwards-compatibility feature.

+
+
+
+

That’s it!

+

That, in a nutshell, is all there is to know about controllers.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/core_classes.html b/user_guide/general/core_classes.html new file mode 100644 index 000000000..024007db8 --- /dev/null +++ b/user_guide/general/core_classes.html @@ -0,0 +1,613 @@ + + + + + + + + + + Creating Core System Classes — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Creating Core System Classes

+

Every time CodeIgniter runs there are several base classes that are +initialized automatically as part of the core framework. It is possible, +however, to swap any of the core system classes with your own versions +or even extend the core versions.

+

Most users will never have any need to do this, but the option to +replace or extend them does exist for those who would like to +significantly alter the CodeIgniter core.

+
+

Note

+

Messing with a core system class has a lot of implications, so +make sure you know what you are doing before attempting it.

+
+
+

System Class List

+

The following is a list of the core system files that are invoked every +time CodeIgniter runs:

+
    +
  • Benchmark
  • +
  • Config
  • +
  • Controller
  • +
  • Exceptions
  • +
  • Hooks
  • +
  • Input
  • +
  • Language
  • +
  • Loader
  • +
  • Log
  • +
  • Output
  • +
  • Router
  • +
  • Security
  • +
  • URI
  • +
  • Utf8
  • +
+
+
+

Replacing Core Classes

+

To use one of your own system classes instead of a default one simply +place your version inside your local application/core/ directory:

+
application/core/some_class.php
+
+
+

If this directory does not exist you can create it.

+

Any file named identically to one from the list above will be used +instead of the one normally used.

+

Please note that your class must use CI as a prefix. For example, if +your file is named Input.php the class will be named:

+
class CI_Input {
+
+}
+
+
+
+
+

Extending Core Class

+

If all you need to do is add some functionality to an existing library - +perhaps add a method or two - then it’s overkill to replace the entire +library with your version. In this case it’s better to simply extend the +class. Extending a class is nearly identical to replacing a class with a +couple exceptions:

+
    +
  • The class declaration must extend the parent class.
  • +
  • Your new class name and filename must be prefixed with MY_ (this +item is configurable. See below.).
  • +
+

For example, to extend the native Input class you’ll create a file named +application/core/MY_Input.php, and declare your class with:

+
class MY_Input extends CI_Input {
+
+}
+
+
+
+

Note

+

If you need to use a constructor in your class make sure you +extend the parent constructor:

+
class MY_Input extends CI_Input {
+
+        public function __construct()
+        {
+                parent::__construct();
+        }
+}
+
+
+
+

Tip: Any functions in your class that are named identically to the +methods in the parent class will be used instead of the native ones +(this is known as “method overriding”). This allows you to substantially +alter the CodeIgniter core.

+

If you are extending the Controller core class, then be sure to extend +your new class in your application controller’s constructors.

+
class Welcome extends MY_Controller {
+
+        public function __construct()
+        {
+                parent::__construct();
+                // Your own constructor code
+        }
+
+        public function index()
+        {
+                $this->load->view('welcome_message');
+        }
+}
+
+
+
+

Setting Your Own Prefix

+

To set your own sub-class prefix, open your +application/config/config.php file and look for this item:

+
$config['subclass_prefix'] = 'MY_';
+
+
+

Please note that all native CodeIgniter libraries are prefixed +with CI_ so DO NOT use that as your prefix.

+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/creating_drivers.html b/user_guide/general/creating_drivers.html new file mode 100644 index 000000000..192f52be8 --- /dev/null +++ b/user_guide/general/creating_drivers.html @@ -0,0 +1,525 @@ + + + + + + + + + + Creating Drivers — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Creating Drivers

+
+

Driver Directory and File Structure

+

Sample driver directory and file structure layout:

+
    +
  • /application/libraries/Driver_name
      +
    • Driver_name.php
    • +
    • drivers
        +
      • Driver_name_subclass_1.php
      • +
      • Driver_name_subclass_2.php
      • +
      • Driver_name_subclass_3.php
      • +
      +
    • +
    +
  • +
+
+

Note

+

In order to maintain compatibility on case-sensitive +file systems, the Driver_name directory must be +named in the format returned by ucfirst().

+
+
+

Note

+

The Driver library’s architecture is such that +the subclasses don’t extend and therefore don’t inherit +properties or methods of the main driver.

+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/creating_libraries.html b/user_guide/general/creating_libraries.html new file mode 100644 index 000000000..7295ef1dc --- /dev/null +++ b/user_guide/general/creating_libraries.html @@ -0,0 +1,754 @@ + + + + + + + + + + Creating Libraries — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Creating Libraries

+

When we use the term “Libraries” we are normally referring to the +classes that are located in the libraries directory and described in the +Class Reference of this user guide. In this case, however, we will +instead describe how you can create your own libraries within your +application/libraries directory in order to maintain separation between +your local resources and the global framework resources.

+

As an added bonus, CodeIgniter permits your libraries to extend native +classes if you simply need to add some functionality to an existing +library. Or you can even replace native libraries just by placing +identically named versions in your application/libraries directory.

+

In summary:

+
    +
  • You can create entirely new libraries.
  • +
  • You can extend native libraries.
  • +
  • You can replace native libraries.
  • +
+

The page below explains these three concepts in detail.

+
+

Note

+

The Database classes can not be extended or replaced with your +own classes. All other classes are able to be replaced/extended.

+
+
+

Storage

+

Your library classes should be placed within your application/libraries +directory, as this is where CodeIgniter will look for them when they are +initialized.

+
+
+

Naming Conventions

+
    +
  • File names must be capitalized. For example: Myclass.php
  • +
  • Class declarations must be capitalized. For example: class Myclass
  • +
  • Class names and file names must match.
  • +
+
+
+

The Class File

+

Classes should have this basic prototype:

+
<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+class Someclass {
+
+        public function some_method()
+        {
+        }
+}
+
+
+
+

Note

+

We are using the name Someclass purely as an example.

+
+
+
+

Using Your Class

+

From within any of your Controller methods you +can initialize your class using the standard:

+
$this->load->library('someclass');
+
+
+

Where someclass is the file name, without the ”.php” file extension. +You can submit the file name capitalized or lower case. CodeIgniter +doesn’t care.

+

Once loaded you can access your class using the lower case version:

+
$this->someclass->some_method();  // Object instances will always be lower case
+
+
+
+
+

Passing Parameters When Initializing Your Class

+

In the library loading method you can dynamically pass data as an +array via the second parameter and it will be passed to your class +constructor:

+
$params = array('type' => 'large', 'color' => 'red');
+
+$this->load->library('someclass', $params);
+
+
+

If you use this feature you must set up your class constructor to expect +data:

+
<?php defined('BASEPATH') OR exit('No direct script access allowed');
+
+class Someclass {
+
+        public function __construct($params)
+        {
+                // Do something with $params
+        }
+}
+
+
+

You can also pass parameters stored in a config file. Simply create a +config file named identically to the class file name and store it in +your application/config/ directory. Note that if you dynamically pass +parameters as described above, the config file option will not be +available.

+
+
+

Utilizing CodeIgniter Resources within Your Library

+

To access CodeIgniter’s native resources within your library use the +get_instance() method. This method returns the CodeIgniter super +object.

+

Normally from within your controller methods you will call any of the +available CodeIgniter methods using the $this construct:

+
$this->load->helper('url');
+$this->load->library('session');
+$this->config->item('base_url');
+// etc.
+
+
+

$this, however, only works directly within your controllers, your +models, or your views. If you would like to use CodeIgniter’s classes +from within your own custom classes you can do so as follows:

+

First, assign the CodeIgniter object to a variable:

+
$CI =& get_instance();
+
+
+

Once you’ve assigned the object to a variable, you’ll use that variable +instead of $this:

+
$CI =& get_instance();
+
+$CI->load->helper('url');
+$CI->load->library('session');
+$CI->config->item('base_url');
+// etc.
+
+
+
+

Note

+

You’ll notice that the above get_instance() function is being +passed by reference:

+
$CI =& get_instance();
+
+
+

This is very important. Assigning by reference allows you to use the +original CodeIgniter object rather than creating a copy of it.

+
+

However, since a library is a class, it would be better if you +take full advantage of the OOP principles. So, in order to +be able to use the CodeIgniter super-object in all of the class +methods, you’re encouraged to assign it to a property instead:

+
class Example_library {
+
+        protected $CI;
+
+        // We'll use a constructor, as you can't directly call a function
+        // from a property definition.
+        public function __construct()
+        {
+                // Assign the CodeIgniter super-object
+                $this->CI =& get_instance();
+        }
+
+        public function foo()
+        {
+                $this->CI->load->helper('url');
+                redirect();
+        }
+
+        public function bar()
+        {
+                echo $this->CI->config->item('base_url');
+        }
+
+}
+
+
+
+
+

Replacing Native Libraries with Your Versions

+

Simply by naming your class files identically to a native library will +cause CodeIgniter to use it instead of the native one. To use this +feature you must name the file and the class declaration exactly the +same as the native library. For example, to replace the native Email +library you’ll create a file named application/libraries/Email.php, +and declare your class with:

+
class CI_Email {
+
+}
+
+
+

Note that most native classes are prefixed with CI_.

+

To load your library you’ll see the standard loading method:

+
$this->load->library('email');
+
+
+
+

Note

+

At this time the Database classes can not be replaced with +your own versions.

+
+
+
+

Extending Native Libraries

+

If all you need to do is add some functionality to an existing library - +perhaps add a method or two - then it’s overkill to replace the entire +library with your version. In this case it’s better to simply extend the +class. Extending a class is nearly identical to replacing a class with a +couple exceptions:

+
    +
  • The class declaration must extend the parent class.
  • +
  • Your new class name and filename must be prefixed with MY_ (this +item is configurable. See below.).
  • +
+

For example, to extend the native Email class you’ll create a file named +application/libraries/MY_Email.php, and declare your class with:

+
class MY_Email extends CI_Email {
+
+}
+
+
+

If you need to use a constructor in your class make sure you +extend the parent constructor:

+
class MY_Email extends CI_Email {
+
+        public function __construct($config = array())
+        {
+                parent::__construct($config);
+        }
+
+}
+
+
+
+

Note

+

Not all of the libraries have the same (or any) parameters +in their constructor. Take a look at the library that you’re +extending first to see how it should be implemented.

+
+
+

Loading Your Sub-class

+

To load your sub-class you’ll use the standard syntax normally used. DO +NOT include your prefix. For example, to load the example above, which +extends the Email class, you will use:

+
$this->load->library('email');
+
+
+

Once loaded you will use the class variable as you normally would for +the class you are extending. In the case of the email class all calls +will use:

+
$this->email->some_method();
+
+
+
+
+

Setting Your Own Prefix

+

To set your own sub-class prefix, open your +application/config/config.php file and look for this item:

+
$config['subclass_prefix'] = 'MY_';
+
+
+

Please note that all native CodeIgniter libraries are prefixed with CI_ +so DO NOT use that as your prefix.

+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/credits.html b/user_guide/general/credits.html new file mode 100644 index 000000000..e144576c8 --- /dev/null +++ b/user_guide/general/credits.html @@ -0,0 +1,503 @@ + + + + + + + + + + Credits — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+
    +
  • Docs »
  • + +
  • Credits
  • +
  • + +
  • +
    + classic layout +
    +
+
+
+
+ +
+

Credits

+

CodeIgniter was originally developed by Rick Ellis +(CEO of EllisLab, Inc.). The framework was written for +performance in the real world, with many of the class libraries, helpers, and +sub-systems borrowed from the code-base of ExpressionEngine.

+

It was, for years, developed and maintained by EllisLab, the ExpressionEngine +Development Team and a group of community members called the Reactor Team.

+

In 2014, CodeIgniter was acquired by the British Columbia Institute of Technology and was then officially announced as a community-maintained +project.

+

Bleeding edge development is spearheaded by the handpicked contributors +of the Reactor Team.

+

A hat tip goes to Ruby on Rails for inspiring us to create a PHP framework, and +for bringing frameworks into the general consciousness of the web community.

+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/drivers.html b/user_guide/general/drivers.html new file mode 100644 index 000000000..c4ba14ef6 --- /dev/null +++ b/user_guide/general/drivers.html @@ -0,0 +1,531 @@ + + + + + + + + + + Using CodeIgniter Drivers — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Using CodeIgniter Drivers

+

Drivers are a special type of Library that has a parent class and any +number of potential child classes. Child classes have access to the +parent class, but not their siblings. Drivers provide an elegant syntax +in your controllers for libraries that benefit +from or require being broken down into discrete classes.

+

Drivers are found in the system/libraries/ directory, in their own +sub-directory which is identically named to the parent library class. +Also inside that directory is a subdirectory named drivers, which +contains all of the possible child class files.

+

To use a driver you will initialize it within a controller using the +following initialization method:

+
$this->load->driver('class_name');
+
+
+

Where class name is the name of the driver class you want to invoke. For +example, to load a driver named “Some_parent” you would do this:

+
$this->load->driver('some_parent');
+
+
+

Methods of that class can then be invoked with:

+
$this->some_parent->some_method();
+
+
+

The child classes, the drivers themselves, can then be called directly +through the parent class, without initializing them:

+
$this->some_parent->child_one->some_method();
+$this->some_parent->child_two->another_method();
+
+
+
+

Creating Your Own Drivers

+

Please read the section of the user guide that discusses how to create +your own drivers.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/environments.html b/user_guide/general/environments.html new file mode 100644 index 000000000..c4c29eda5 --- /dev/null +++ b/user_guide/general/environments.html @@ -0,0 +1,539 @@ + + + + + + + + + + Handling Multiple Environments — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Handling Multiple Environments

+

Developers often desire different system behavior depending on whether +an application is running in a development or production environment. +For example, verbose error output is something that would be useful +while developing an application, but it may also pose a security issue +when “live”.

+
+

The ENVIRONMENT Constant

+

By default, CodeIgniter comes with the environment constant set to use +the value provided in $_SERVER['CI_ENV'], otherwise defaults to +‘development’. At the top of index.php, you will see:

+
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
+
+
+

This server variable can be set in your .htaccess file, or Apache +config using SetEnv. +Alternative methods are available for nginx and other servers, or you can +remove this logic entirely and set the constant based on the server’s IP address.

+

In addition to affecting some basic framework behavior (see the next +section), you may use this constant in your own development to +differentiate between which environment you are running in.

+
+
+

Effects On Default Framework Behavior

+

There are some places in the CodeIgniter system where the ENVIRONMENT +constant is used. This section describes how default framework behavior +is affected.

+
+

Error Reporting

+

Setting the ENVIRONMENT constant to a value of ‘development’ will cause +all PHP errors to be rendered to the browser when they occur. +Conversely, setting the constant to ‘production’ will disable all error +output. Disabling error reporting in production is a good security +practice.

+
+
+

Configuration Files

+

Optionally, you can have CodeIgniter load environment-specific +configuration files. This may be useful for managing things like +differing API keys across multiple environments. This is described in +more detail in the environment section of the Config Class documentation.

+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/errors.html b/user_guide/general/errors.html new file mode 100644 index 000000000..90a0c8246 --- /dev/null +++ b/user_guide/general/errors.html @@ -0,0 +1,650 @@ + + + + + + + + + + Error Handling — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Error Handling

+

CodeIgniter lets you build error reporting into your applications using +the functions described below. In addition, it has an error logging +class that permits error and debugging messages to be saved as text +files.

+
+

Note

+

By default, CodeIgniter displays all PHP errors. You might +wish to change this behavior once your development is complete. You’ll +find the error_reporting() function located at the top of your main +index.php file. Disabling error reporting will NOT prevent log files +from being written if there are errors.

+
+

Unlike most systems in CodeIgniter, the error functions are simple +procedural interfaces that are available globally throughout the +application. This approach permits error messages to get triggered +without having to worry about class/function scoping.

+

CodeIgniter also returns a status code whenever a portion of the core +calls exit(). This exit status code is separate from the HTTP status +code, and serves as a notice to other processes that may be watching of +whether the script completed successfully, or if not, what kind of +problem it encountered that caused it to abort. These values are +defined in application/config/constants.php. While exit status codes +are most useful in CLI settings, returning the proper code helps server +software keep track of your scripts and the health of your application.

+

The following functions let you generate errors:

+
+
+show_error($message, $status_code, $heading = 'An Error Was Encountered')
+
+++ + + + + + +
Parameters:
    +
  • $message (mixed) – Error message
  • +
  • $status_code (int) – HTTP Response status code
  • +
  • $heading (string) – Error page heading
  • +
+
Return type:

void

+
+

This function will display the error message supplied to it using +the error template appropriate to your execution:

+
application/views/errors/html/error_general.php
+
+
+

or:

+
+
application/views/errors/cli/error_general.php
+

The optional parameter $status_code determines what HTTP status +code should be sent with the error. If $status_code is less +than 100, the HTTP status code will be set to 500, and the exit +status code will be set to $status_code + EXIT__AUTO_MIN. +If that value is larger than EXIT__AUTO_MAX, or if +$status_code is 100 or higher, the exit status code will be set +to EXIT_ERROR. +You can check in application/config/constants.php for more detail.

+
+ +
+
+show_404($page = '', $log_error = TRUE)
+
+++ + + + + + +
Parameters:
    +
  • $page (string) – URI string
  • +
  • $log_error (bool) – Whether to log the error
  • +
+
Return type:

void

+
+

This function will display the 404 error message supplied to it +using the error template appropriate to your execution:

+
application/views/errors/html/error_404.php
+
+
+

or:

+
+
application/views/errors/cli/error_404.php
+

The function expects the string passed to it to be the file path to +the page that isn’t found. The exit status code will be set to +EXIT_UNKNOWN_FILE. +Note that CodeIgniter automatically shows 404 messages if +controllers are not found.

+

CodeIgniter automatically logs any show_404() calls. Setting the +optional second parameter to FALSE will skip logging.

+
+ +
+
+log_message($level, $message)
+
+++ + + + + + +
Parameters:
    +
  • $level (string) – Log level: ‘error’, ‘debug’ or ‘info’
  • +
  • $message (string) – Message to log
  • +
+
Return type:

void

+
+

This function lets you write messages to your log files. You must +supply one of three “levels” in the first parameter, indicating what +type of message it is (debug, error, info), with the message itself +in the second parameter.

+

Example:

+
if ($some_var == '')
+{
+        log_message('error', 'Some variable did not contain a value.');
+}
+else
+{
+        log_message('debug', 'Some variable was correctly set');
+}
+
+log_message('info', 'The purpose of some variable is to provide some value.');
+
+
+

There are three message types:

+
    +
  1. Error Messages. These are actual errors, such as PHP errors or +user errors.
  2. +
  3. Debug Messages. These are messages that assist in debugging. For +example, if a class has been initialized, you could log this as +debugging info.
  4. +
  5. Informational Messages. These are the lowest priority messages, +simply giving information regarding some process.
  6. +
+
+

Note

+

In order for the log file to actually be written, the +logs/ directory must be writable. In addition, you must +set the “threshold” for logging in +application/config/config.php. You might, for example, +only want error messages to be logged, and not the other +two types. If you set it to zero logging will be disabled.

+
+
+ +
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/helpers.html b/user_guide/general/helpers.html new file mode 100644 index 000000000..32dc23a5e --- /dev/null +++ b/user_guide/general/helpers.html @@ -0,0 +1,630 @@ + + + + + + + + + + Helper Functions — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Helper Functions

+

Helpers, as the name suggests, help you with tasks. Each helper file is +simply a collection of functions in a particular category. There are URL +Helpers, that assist in creating links, there are Form Helpers that help +you create form elements, Text Helpers perform various text formatting +routines, Cookie Helpers set and read cookies, File Helpers help you +deal with files, etc.

+

Unlike most other systems in CodeIgniter, Helpers are not written in an +Object Oriented format. They are simple, procedural functions. Each +helper function performs one specific task, with no dependence on other +functions.

+

CodeIgniter does not load Helper Files by default, so the first step in +using a Helper is to load it. Once loaded, it becomes globally available +in your controller and +views.

+

Helpers are typically stored in your system/helpers, or +application/helpers directory. CodeIgniter will look first in your +application/helpers directory. If the directory does not exist or the +specified helper is not located there CI will instead look in your +global system/helpers/ directory.

+
+

Loading a Helper

+

Loading a helper file is quite simple using the following method:

+
$this->load->helper('name');
+
+
+

Where name is the file name of the helper, without the .php file +extension or the “helper” part.

+

For example, to load the URL Helper file, which is named +url_helper.php, you would do this:

+
$this->load->helper('url');
+
+
+

A helper can be loaded anywhere within your controller methods (or +even within your View files, although that’s not a good practice), as +long as you load it before you use it. You can load your helpers in your +controller constructor so that they become available automatically in +any function, or you can load a helper in a specific function that needs +it.

+
+

Note

+

The Helper loading method above does not return a value, so +don’t try to assign it to a variable. Just use it as shown.

+
+
+
+

Loading Multiple Helpers

+

If you need to load more than one helper you can specify them in an +array, like this:

+
$this->load->helper(
+        array('helper1', 'helper2', 'helper3')
+);
+
+
+
+
+

Auto-loading Helpers

+

If you find that you need a particular helper globally throughout your +application, you can tell CodeIgniter to auto-load it during system +initialization. This is done by opening the application/config/autoload.php +file and adding the helper to the autoload array.

+
+
+

Using a Helper

+

Once you’ve loaded the Helper File containing the function you intend to +use, you’ll call it the way you would a standard PHP function.

+

For example, to create a link using the anchor() function in one of +your view files you would do this:

+
<?php echo anchor('blog/comments', 'Click Here');?>
+
+
+

Where “Click Here” is the name of the link, and “blog/comments” is the +URI to the controller/method you wish to link to.

+
+
+

“Extending” Helpers

+

To “extend” Helpers, create a file in your application/helpers/ folder +with an identical name to the existing Helper, but prefixed with MY_ +(this item is configurable. See below.).

+

If all you need to do is add some functionality to an existing helper - +perhaps add a function or two, or change how a particular helper +function operates - then it’s overkill to replace the entire helper with +your version. In this case it’s better to simply “extend” the Helper.

+
+

Note

+

The term “extend” is used loosely since Helper functions are +procedural and discrete and cannot be extended in the traditional +programmatic sense. Under the hood, this gives you the ability to +add to or or to replace the functions a Helper provides.

+
+

For example, to extend the native Array Helper you’ll create a file +named application/helpers/MY_array_helper.php, and add or override +functions:

+
// any_in_array() is not in the Array Helper, so it defines a new function
+function any_in_array($needle, $haystack)
+{
+        $needle = is_array($needle) ? $needle : array($needle);
+
+        foreach ($needle as $item)
+        {
+                if (in_array($item, $haystack))
+                {
+                        return TRUE;
+                }
+        }
+
+        return FALSE;
+}
+
+// random_element() is included in Array Helper, so it overrides the native function
+function random_element($array)
+{
+        shuffle($array);
+        return array_pop($array);
+}
+
+
+
+

Setting Your Own Prefix

+

The filename prefix for “extending” Helpers is the same used to extend +libraries and core classes. To set your own prefix, open your +application/config/config.php file and look for this item:

+
$config['subclass_prefix'] = 'MY_';
+
+
+

Please note that all native CodeIgniter libraries are prefixed with CI_ +so DO NOT use that as your prefix.

+
+
+
+

Now What?

+

In the Table of Contents you’ll find a list of all the available Helper +Files. Browse each one to see what they do.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/hooks.html b/user_guide/general/hooks.html new file mode 100644 index 000000000..c2faf26a2 --- /dev/null +++ b/user_guide/general/hooks.html @@ -0,0 +1,618 @@ + + + + + + + + + + Hooks - Extending the Framework Core — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Hooks - Extending the Framework Core

+

CodeIgniter’s Hooks feature provides a means to tap into and modify the +inner workings of the framework without hacking the core files. When +CodeIgniter runs it follows a specific execution process, diagramed in +the Application Flow page. There may be +instances, however, where you’d like to cause some action to take place +at a particular stage in the execution process. For example, you might +want to run a script right before your controllers get loaded, or right +after, or you might want to trigger one of your own scripts in some +other location.

+
+

Enabling Hooks

+

The hooks feature can be globally enabled/disabled by setting the +following item in the application/config/config.php file:

+
$config['enable_hooks'] = TRUE;
+
+
+
+
+

Defining a Hook

+

Hooks are defined in the application/config/hooks.php file. +Each hook is specified as an array with this prototype:

+
$hook['pre_controller'] = array(
+        'class'    => 'MyClass',
+        'function' => 'Myfunction',
+        'filename' => 'Myclass.php',
+        'filepath' => 'hooks',
+        'params'   => array('beer', 'wine', 'snacks')
+);
+
+
+

Notes:

+

The array index correlates to the name of the particular hook point you +want to use. In the above example the hook point is pre_controller. A +list of hook points is found below. The following items should be +defined in your associative hook array:

+
    +
  • class The name of the class you wish to invoke. If you prefer to +use a procedural function instead of a class, leave this item blank.
  • +
  • function The function (or method) name you wish to call.
  • +
  • filename The file name containing your class/function.
  • +
  • filepath The name of the directory containing your script. +Note: +Your script must be located in a directory INSIDE your application/ +directory, so the file path is relative to that directory. For example, +if your script is located in application/hooks/, you will simply use +‘hooks’ as your filepath. If your script is located in +application/hooks/utilities/ you will use ‘hooks/utilities’ as your +filepath. No trailing slash.
  • +
  • params Any parameters you wish to pass to your script. This item +is optional.
  • +
+

You can also use lambda/anoymous functions (or closures) as hooks, with +a simpler syntax:

+
$hook['post_controller'] = function()
+{
+        /* do something here */
+};
+
+
+
+
+

Multiple Calls to the Same Hook

+

If want to use the same hook point with more than one script, simply +make your array declaration multi-dimensional, like this:

+
$hook['pre_controller'][] = array(
+        'class'    => 'MyClass',
+        'function' => 'MyMethod',
+        'filename' => 'Myclass.php',
+        'filepath' => 'hooks',
+        'params'   => array('beer', 'wine', 'snacks')
+);
+
+$hook['pre_controller'][] = array(
+        'class'    => 'MyOtherClass',
+        'function' => 'MyOtherMethod',
+        'filename' => 'Myotherclass.php',
+        'filepath' => 'hooks',
+        'params'   => array('red', 'yellow', 'blue')
+);
+
+
+

Notice the brackets after each array index:

+
$hook['pre_controller'][]
+
+
+

This permits you to have the same hook point with multiple scripts. The +order you define your array will be the execution order.

+
+
+

Hook Points

+

The following is a list of available hook points.

+
    +
  • pre_system +Called very early during system execution. Only the benchmark and +hooks class have been loaded at this point. No routing or other +processes have happened.
  • +
  • pre_controller +Called immediately prior to any of your controllers being called. +All base classes, routing, and security checks have been done.
  • +
  • post_controller_constructor +Called immediately after your controller is instantiated, but prior +to any method calls happening.
  • +
  • post_controller +Called immediately after your controller is fully executed.
  • +
  • display_override +Overrides the _display() method, used to send the finalized page +to the web browser at the end of system execution. This permits you +to use your own display methodology. Note that you will need to +reference the CI superobject with $this->CI =& get_instance() and +then the finalized data will be available by calling +$this->CI->output->get_output().
  • +
  • cache_override +Enables you to call your own method instead of the _display_cache() +method in the Output Library. This permits +you to use your own cache display mechanism.
  • +
  • post_system +Called after the final rendered page is sent to the browser, at the +end of system execution after the finalized data is sent to the +browser.
  • +
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/index.html b/user_guide/general/index.html new file mode 100644 index 000000000..68921a4b7 --- /dev/null +++ b/user_guide/general/index.html @@ -0,0 +1,570 @@ + + + + + + + + + + General Topics — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+
    +
  • Docs »
  • + +
  • General Topics
  • +
  • + +
  • +
    + classic layout +
    +
+
+
+ +
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/libraries.html b/user_guide/general/libraries.html new file mode 100644 index 000000000..58ebe9614 --- /dev/null +++ b/user_guide/general/libraries.html @@ -0,0 +1,522 @@ + + + + + + + + + + Using CodeIgniter Libraries — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Using CodeIgniter Libraries

+

All of the available libraries are located in your system/libraries/ +directory. In most cases, to use one of these classes involves initializing +it within a controller using the following +initialization method:

+
$this->load->library('class_name');
+
+
+

Where ‘class_name’ is the name of the class you want to invoke. For +example, to load the Form Validation Library you would do this:

+
$this->load->library('form_validation');
+
+
+

Once initialized you can use it as indicated in the user guide page +corresponding to that class.

+

Additionally, multiple libraries can be loaded at the same time by +passing an array of libraries to the load method.

+

Example:

+
$this->load->library(array('email', 'table'));
+
+
+
+

Creating Your Own Libraries

+

Please read the section of the user guide that discusses how to +create your own libraries.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/managing_apps.html b/user_guide/general/managing_apps.html new file mode 100644 index 000000000..b63e07685 --- /dev/null +++ b/user_guide/general/managing_apps.html @@ -0,0 +1,555 @@ + + + + + + + + + + Managing your Applications — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Managing your Applications

+

By default it is assumed that you only intend to use CodeIgniter to +manage one application, which you will build in your application/ +directory. It is possible, however, to have multiple sets of +applications that share a single CodeIgniter installation, or even to +rename or relocate your application directory.

+
+

Renaming the Application Directory

+

If you would like to rename your application directory you may do so +as long as you open your main index.php file and set its name using +the $application_folder variable:

+
$application_folder = 'application';
+
+
+
+
+

Relocating your Application Directory

+

It is possible to move your application directory to a different +location on your server than your web root. To do so open +your main index.php and set a full server path in the +$application_folder variable:

+
$application_folder = '/path/to/your/application';
+
+
+
+
+

Running Multiple Applications with one CodeIgniter Installation

+

If you would like to share a common CodeIgniter installation to manage +several different applications simply put all of the directories located +inside your application directory into their own sub-directory.

+

For example, let’s say you want to create two applications, named “foo” +and “bar”. You could structure your application directories like this:

+
applications/foo/
+applications/foo/config/
+applications/foo/controllers/
+applications/foo/libraries/
+applications/foo/models/
+applications/foo/views/
+applications/bar/
+applications/bar/config/
+applications/bar/controllers/
+applications/bar/libraries/
+applications/bar/models/
+applications/bar/views/
+
+
+

To select a particular application for use requires that you open your +main index.php file and set the $application_folder variable. For +example, to select the “foo” application for use you would do this:

+
$application_folder = 'applications/foo';
+
+
+
+

Note

+

Each of your applications will need its own index.php file +which calls the desired application. The index.php file can be named +anything you want.

+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/models.html b/user_guide/general/models.html new file mode 100644 index 000000000..1bd641388 --- /dev/null +++ b/user_guide/general/models.html @@ -0,0 +1,686 @@ + + + + + + + + + + Models — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Models

+

Models are optionally available for those who want to use a more +traditional MVC approach.

+ +
+

What is a Model?

+

Models are PHP classes that are designed to work with information in +your database. For example, let’s say you use CodeIgniter to manage a +blog. You might have a model class that contains functions to insert, +update, and retrieve your blog data. Here is an example of what such a +model class might look like:

+
class Blog_model extends CI_Model {
+
+        public $title;
+        public $content;
+        public $date;
+
+        public function get_last_ten_entries()
+        {
+                $query = $this->db->get('entries', 10);
+                return $query->result();
+        }
+
+        public function insert_entry()
+        {
+                $this->title    = $_POST['title']; // please read the below note
+                $this->content  = $_POST['content'];
+                $this->date     = time();
+
+                $this->db->insert('entries', $this);
+        }
+
+        public function update_entry()
+        {
+                $this->title    = $_POST['title'];
+                $this->content  = $_POST['content'];
+                $this->date     = time();
+
+                $this->db->update('entries', $this, array('id' => $_POST['id']));
+        }
+
+}
+
+
+
+

Note

+

The methods in the above example use the Query Builder database methods.

+
+
+

Note

+

For the sake of simplicity in this example we’re using $_POST +directly. This is generally bad practice, and a more common approach +would be to use the Input Library +$this->input->post('title').

+
+
+
+

Anatomy of a Model

+

Model classes are stored in your application/models/ directory. +They can be nested within sub-directories if you want this type of +organization.

+

The basic prototype for a model class is this:

+
class Model_name extends CI_Model {
+
+        public function __construct()
+        {
+                parent::__construct();
+                // Your own constructor code
+        }
+
+}
+
+
+

Where Model_name is the name of your class. Class names must have +the first letter capitalized with the rest of the name lowercase. Make +sure your class extends the base Model class.

+

The file name must match the class name. For example, if this is your class:

+
class User_model extends CI_Model {
+
+        public function __construct()
+        {
+                parent::__construct();
+                // Your own constructor code
+        }
+
+}
+
+
+

Your file will be this:

+
application/models/User_model.php
+
+
+
+
+

Loading a Model

+

Your models will typically be loaded and called from within your +controller methods. To load a model you will use +the following method:

+
$this->load->model('model_name');
+
+
+

If your model is located in a sub-directory, include the relative path +from your models directory. For example, if you have a model located at +application/models/blog/Queries.php you’ll load it using:

+
$this->load->model('blog/queries');
+
+
+

Once loaded, you will access your model methods using an object with the +same name as your class:

+
$this->load->model('model_name');
+
+$this->model_name->method();
+
+
+

If you would like your model assigned to a different object name you can +specify it via the second parameter of the loading method:

+
$this->load->model('model_name', 'foobar');
+
+$this->foobar->method();
+
+
+

Here is an example of a controller, that loads a model, then serves a +view:

+
class Blog_controller extends CI_Controller {
+
+        public function blog()
+        {
+                $this->load->model('blog');
+
+                $data['query'] = $this->blog->get_last_ten_entries();
+
+                $this->load->view('blog', $data);
+        }
+}
+
+
+
+
+

Auto-loading Models

+

If you find that you need a particular model globally throughout your +application, you can tell CodeIgniter to auto-load it during system +initialization. This is done by opening the +application/config/autoload.php file and adding the model to the +autoload array.

+
+
+

Connecting to your Database

+

When a model is loaded it does NOT connect automatically to your +database. The following options for connecting are available to you:

+
    +
  • You can connect using the standard database methods described +here, either from within your +Controller class or your Model class.

    +
  • +
  • You can tell the model loading method to auto-connect by passing +TRUE (boolean) via the third parameter, and connectivity settings, +as defined in your database config file will be used:

    +
    $this->load->model('model_name', '', TRUE);
    +
    +
    +
  • +
  • You can manually pass database connectivity settings via the third +parameter:

    +
    $config['hostname'] = 'localhost';
    +$config['username'] = 'myusername';
    +$config['password'] = 'mypassword';
    +$config['database'] = 'mydatabase';
    +$config['dbdriver'] = 'mysqli';
    +$config['dbprefix'] = '';
    +$config['pconnect'] = FALSE;
    +$config['db_debug'] = TRUE;
    +
    +$this->load->model('model_name', '', $config);
    +
    +
    +
  • +
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/profiling.html b/user_guide/general/profiling.html new file mode 100644 index 000000000..68d856852 --- /dev/null +++ b/user_guide/general/profiling.html @@ -0,0 +1,625 @@ + + + + + + + + + + Profiling Your Application — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Profiling Your Application

+

The Profiler Class will display benchmark results, queries you have run, +and $_POST data at the bottom of your pages. This information can be +useful during development in order to help with debugging and +optimization.

+
+

Initializing the Class

+
+

Important

+

This class does NOT need to be initialized. It is loaded +automatically by the Output Library +if profiling is enabled as shown below.

+
+
+
+

Enabling the Profiler

+

To enable the profiler place the following line anywhere within your +Controller methods:

+
$this->output->enable_profiler(TRUE);
+
+
+

When enabled a report will be generated and inserted at the bottom of +your pages.

+

To disable the profiler you will use:

+
$this->output->enable_profiler(FALSE);
+
+
+
+
+

Setting Benchmark Points

+

In order for the Profiler to compile and display your benchmark data you +must name your mark points using specific syntax.

+

Please read the information on setting Benchmark points in the +Benchmark Library page.

+
+
+

Enabling and Disabling Profiler Sections

+

Each section of Profiler data can be enabled or disabled by setting a +corresponding config variable to TRUE or FALSE. This can be done one of +two ways. First, you can set application wide defaults with the +application/config/profiler.php config file.

+

Example:

+
$config['config']          = FALSE;
+$config['queries']         = FALSE;
+
+
+

In your controllers, you can override the defaults and config file +values by calling the set_profiler_sections() method of the +Output Library:

+
$sections = array(
+        'config'  => TRUE,
+        'queries' => TRUE
+);
+
+$this->output->set_profiler_sections($sections);
+
+
+

Available sections and the array key used to access them are described +in the table below.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyDescriptionDefault
benchmarksElapsed time of Benchmark points and total execution timeTRUE
configCodeIgniter Config variablesTRUE
controller_infoThe Controller class and method requestedTRUE
getAny GET data passed in the requestTRUE
http_headersThe HTTP headers for the current requestTRUE
memory_usageAmount of memory consumed by the current request, in bytesTRUE
postAny POST data passed in the requestTRUE
queriesListing of all database queries executed, including execution timeTRUE
uri_stringThe URI of the current requestTRUE
session_dataData stored in the current sessionTRUE
query_toggle_countThe number of queries after which the query block will default to +hidden.25
+
+

Note

+

Disabling the save_queries setting in +your database configuration will also effectively disable profiling for +database queries and render the ‘queries’ setting above useless. You can +optionally override this setting with $this->db->save_queries = TRUE;. +Without this setting you won’t be able to view the queries or the +last_query <database/helpers>.

+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/requirements.html b/user_guide/general/requirements.html new file mode 100644 index 000000000..fa4fd8242 --- /dev/null +++ b/user_guide/general/requirements.html @@ -0,0 +1,512 @@ + + + + + + + + + + Server Requirements — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+
    +
  • Docs »
  • + +
  • Server Requirements
  • +
  • + +
  • +
    + classic layout +
    +
+
+
+
+ +
+

Server Requirements

+

PHP version 5.6 or newer is recommended.

+

It should work on 5.3.7 as well, but we strongly advise you NOT to run +such old versions of PHP, because of potential security and performance +issues, as well as missing features.

+

A database is required for most web application programming. +Currently supported databases are:

+
+
    +
  • MySQL (5.1+) via the mysql (deprecated), mysqli and pdo drivers
  • +
  • Oracle via the oci8 and pdo drivers
  • +
  • PostgreSQL via the postgre and pdo drivers
  • +
  • MS SQL via the mssql, sqlsrv (version 2005 and above only) and pdo drivers
  • +
  • SQLite via the sqlite (version 2), sqlite3 (version 3) and pdo drivers
  • +
  • CUBRID via the cubrid and pdo drivers
  • +
  • Interbase/Firebird via the ibase and pdo drivers
  • +
  • ODBC via the odbc and pdo drivers (you should know that ODBC is actually an abstraction layer)
  • +
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/reserved_names.html b/user_guide/general/reserved_names.html new file mode 100644 index 000000000..016600da0 --- /dev/null +++ b/user_guide/general/reserved_names.html @@ -0,0 +1,584 @@ + + + + + + + + + + Reserved Names — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Reserved Names

+

In order to help out, CodeIgniter uses a series of function, method, +class and variable names in its operation. Because of this, some names +cannot be used by a developer. Following is a list of reserved names +that cannot be used.

+
+

Controller names

+

Since your controller classes will extend the main application +controller you must be careful not to name your methods identically to +the ones used by that class, otherwise your local methods will +override them. The following is a list of reserved names. Do not name +your controller any of these:

+
    +
  • CI_Controller
  • +
  • Default
  • +
  • index
  • +
+
+
+

Functions

+ +
+
+

Variables

+
    +
  • $config
  • +
  • $db
  • +
  • $lang
  • +
+
+
+

Constants

+
    +
  • ENVIRONMENT
  • +
  • FCPATH
  • +
  • SELF
  • +
  • BASEPATH
  • +
  • APPPATH
  • +
  • VIEWPATH
  • +
  • CI_VERSION
  • +
  • MB_ENABLED
  • +
  • ICONV_ENABLED
  • +
  • UTF8_ENABLED
  • +
  • FILE_READ_MODE
  • +
  • FILE_WRITE_MODE
  • +
  • DIR_READ_MODE
  • +
  • DIR_WRITE_MODE
  • +
  • FOPEN_READ
  • +
  • FOPEN_READ_WRITE
  • +
  • FOPEN_WRITE_CREATE_DESTRUCTIVE
  • +
  • FOPEN_READ_WRITE_CREATE_DESTRUCTIVE
  • +
  • FOPEN_WRITE_CREATE
  • +
  • FOPEN_READ_WRITE_CREATE
  • +
  • FOPEN_WRITE_CREATE_STRICT
  • +
  • FOPEN_READ_WRITE_CREATE_STRICT
  • +
  • SHOW_DEBUG_BACKTRACE
  • +
  • EXIT_SUCCESS
  • +
  • EXIT_ERROR
  • +
  • EXIT_CONFIG
  • +
  • EXIT_UNKNOWN_FILE
  • +
  • EXIT_UNKNOWN_CLASS
  • +
  • EXIT_UNKNOWN_METHOD
  • +
  • EXIT_USER_INPUT
  • +
  • EXIT_DATABASE
  • +
  • EXIT__AUTO_MIN
  • +
  • EXIT__AUTO_MAX
  • +
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/routing.html b/user_guide/general/routing.html new file mode 100644 index 000000000..a1b9cac1b --- /dev/null +++ b/user_guide/general/routing.html @@ -0,0 +1,690 @@ + + + + + + + + + + URI Routing — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

URI Routing

+

Typically there is a one-to-one relationship between a URL string and +its corresponding controller class/method. The segments in a URI +normally follow this pattern:

+
example.com/class/function/id/
+
+
+

In some instances, however, you may want to remap this relationship so +that a different class/method can be called instead of the one +corresponding to the URL.

+

For example, let’s say you want your URLs to have this prototype:

+
example.com/product/1/
+example.com/product/2/
+example.com/product/3/
+example.com/product/4/
+
+
+

Normally the second segment of the URL is reserved for the method +name, but in the example above it instead has a product ID. To +overcome this, CodeIgniter allows you to remap the URI handler.

+
+

Setting your own routing rules

+

Routing rules are defined in your application/config/routes.php file. +In it you’ll see an array called $route that permits you to specify +your own routing criteria. Routes can either be specified using wildcards +or Regular Expressions.

+
+
+

Wildcards

+

A typical wildcard route might look something like this:

+
$route['product/:num'] = 'catalog/product_lookup';
+
+
+

In a route, the array key contains the URI to be matched, while the +array value contains the destination it should be re-routed to. In the +above example, if the literal word “product” is found in the first +segment of the URL, and a number is found in the second segment, the +“catalog” class and the “product_lookup” method are instead used.

+

You can match literal values or you can use two wildcard types:

+

(:num) will match a segment containing only numbers. +(:any) will match a segment containing any character (except for ‘/’, which is the segment delimiter).

+
+

Note

+

Wildcards are actually aliases for regular expressions, with +:any being translated to [^/]+ and :num to [0-9]+, +respectively.

+
+
+

Note

+

Routes will run in the order they are defined. Higher routes +will always take precedence over lower ones.

+
+
+

Note

+

Route rules are not filters! Setting a rule of e.g. +‘foo/bar/(:num)’ will not prevent controller Foo and method +bar to be called with a non-numeric value if that is a valid +route.

+
+
+
+

Examples

+

Here are a few routing examples:

+
$route['journals'] = 'blogs';
+
+
+

A URL containing the word “journals” in the first segment will be +remapped to the “blogs” class.

+
$route['blog/joe'] = 'blogs/users/34';
+
+
+

A URL containing the segments blog/joe will be remapped to the “blogs” +class and the “users” method. The ID will be set to “34”.

+
$route['product/(:any)'] = 'catalog/product_lookup';
+
+
+

A URL with “product” as the first segment, and anything in the second +will be remapped to the “catalog” class and the “product_lookup” +method.

+
$route['product/(:num)'] = 'catalog/product_lookup_by_id/$1';
+
+
+

A URL with “product” as the first segment, and a number in the second +will be remapped to the “catalog” class and the +“product_lookup_by_id” method passing in the match as a variable to +the method.

+
+

Important

+

Do not use leading/trailing slashes.

+
+
+
+

Regular Expressions

+

If you prefer you can use regular expressions to define your routing +rules. Any valid regular expression is allowed, as are back-references.

+
+

Note

+

If you use back-references you must use the dollar syntax +rather than the double backslash syntax.

+
+

A typical RegEx route might look something like this:

+
$route['products/([a-z]+)/(\d+)'] = '$1/id_$2';
+
+
+

In the above example, a URI similar to products/shirts/123 would instead +call the “shirts” controller class and the “id_123” method.

+

With regular expressions, you can also catch multiple segments at once. +For example, if a user accesses a password protected area of your web +application and you wish to be able to redirect them back to the same +page after they log in, you may find this example useful:

+
$route['login/(.+)'] = 'auth/login/$1';
+
+
+
+

Note

+

In the above example, if the $1 placeholder contains a +slash, it will still be split into multiple parameters when +passed to Auth::login().

+
+

For those of you who don’t know regular expressions and want to learn +more about them, regular-expressions.info +might be a good starting point.

+
+

Note

+

You can also mix and match wildcards with regular expressions.

+
+
+
+

Callbacks

+

You can also use callbacks in place of the normal routing rules to process +the back-references. Example:

+
$route['products/([a-zA-Z]+)/edit/(\d+)'] = function ($product_type, $id)
+{
+        return 'catalog/product_edit/' . strtolower($product_type) . '/' . $id;
+};
+
+
+
+
+

Using HTTP verbs in routes

+

It is possible to use HTTP verbs (request method) to define your routing rules. +This is particularly useful when building RESTful applications. You can use standard HTTP +verbs (GET, PUT, POST, DELETE, PATCH) or a custom one such (e.g. PURGE). HTTP verb rules +are case-insensitive. All you need to do is to add the verb as an array key to your route. +Example:

+
$route['products']['put'] = 'product/insert';
+
+
+

In the above example, a PUT request to URI “products” would call the Product::insert() +controller method.

+
$route['products/(:num)']['DELETE'] = 'product/delete/$1';
+
+
+

A DELETE request to URL with “products” as first the segment and a number in the second will be +mapped to the Product::delete() method, passing the numeric value as the first parameter.

+

Using HTTP verbs is of course, optional.

+
+
+

Reserved Routes

+

There are three reserved routes:

+
$route['default_controller'] = 'welcome';
+
+
+

This route points to the action that should be executed if the URI contains +no data, which will be the case when people load your root URL. +The setting accepts a controller/method value and index() would be +the default method if you don’t specify one. In the above example, it is +Welcome::index() that would be called.

+
+

Note

+

You can NOT use a directory as a part of this setting!

+
+

You are encouraged to always have a default route as otherwise a 404 page +will appear by default.

+
$route['404_override'] = '';
+
+
+

This route indicates which controller class should be loaded if the +requested controller is not found. It will override the default 404 +error page. Same per-directory rules as with ‘default_controller’ +apply here as well.

+

It won’t affect to the show_404() function, which will +continue loading the default error_404.php file at +application/views/errors/error_404.php.

+
$route['translate_uri_dashes'] = FALSE;
+
+
+

As evident by the boolean value, this is not exactly a route. This +option enables you to automatically replace dashes (‘-‘) with +underscores in the controller and method URI segments, thus saving you +additional route entries if you need to do that. +This is required, because the dash isn’t a valid class or method name +character and would cause a fatal error if you try to use it.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/security.html b/user_guide/general/security.html new file mode 100644 index 000000000..dbd05a3b1 --- /dev/null +++ b/user_guide/general/security.html @@ -0,0 +1,664 @@ + + + + + + + + + + Security — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Security

+

This page describes some “best practices” regarding web security, and +details CodeIgniter’s internal security features.

+
+

Note

+

If you came here looking for a security contact, please refer to +our Contribution Guide <../contributing/index>.

+
+
+

URI Security

+

CodeIgniter is fairly restrictive regarding which characters it allows +in your URI strings in order to help minimize the possibility that +malicious data can be passed to your application. URIs may only contain +the following:

+
    +
  • Alpha-numeric text (latin characters only)
  • +
  • Tilde: ~
  • +
  • Percent sign: %
  • +
  • Period: .
  • +
  • Colon: :
  • +
  • Underscore: _
  • +
  • Dash: -
  • +
  • Space
  • +
+
+
+

Register_globals

+

During system initialization all global variables that are found to exist +in the $_GET, $_POST, $_REQUEST and $_COOKIE are unset.

+

The unsetting routine is effectively the same as register_globals = off.

+
+
+

display_errors

+

In production environments, it is typically desirable to “disable” PHP’s +error reporting by setting the internal display_errors flag to a value +of 0. This disables native PHP errors from being rendered as output, +which may potentially contain sensitive information.

+

Setting CodeIgniter’s ENVIRONMENT constant in index.php to a value of +‘production’ will turn off these errors. In development mode, it is +recommended that a value of ‘development’ is used. More information +about differentiating between environments can be found on the +Handling Environments page.

+
+
+

magic_quotes_runtime

+

The magic_quotes_runtime directive is turned off during system +initialization so that you don’t have to remove slashes when retrieving +data from your database.

+
+

Best Practices

+

Before accepting any data into your application, whether it be POST data +from a form submission, COOKIE data, URI data, XML-RPC data, or even +data from the SERVER array, you are encouraged to practice this three +step approach:

+
    +
  1. Validate the data to ensure it conforms to the correct type, length, +size, etc.
  2. +
  3. Filter the data as if it were tainted.
  4. +
  5. Escape the data before submitting it into your database or outputting +it to a browser.
  6. +
+

CodeIgniter provides the following functions and tips to assist you +in this process:

+
+
+
+

XSS Filtering

+

CodeIgniter comes with a Cross Site Scripting filter. This filter +looks for commonly used techniques to embed malicious JavaScript into +your data, or other types of code that attempt to hijack cookies or +do other malicious things. The XSS Filter is described +here.

+
+

Note

+

XSS filtering should only be performed on output. Filtering +input data may modify the data in undesirable ways, including +stripping special characters from passwords, which reduces +security instead of improving it.

+
+
+
+

CSRF protection

+

CSRF stands for Cross-Site Request Forgery, which is the process of an +attacker tricking their victim into unknowingly submitting a request.

+

CodeIgniter provides CSRF protection out of the box, which will get +automatically triggered for every non-GET HTTP request, but also needs +you to create your submit forms in a certain way. This is explained in +the Security Library documentation.

+
+
+

Password handling

+

It is critical that you handle passwords in your application properly.

+

Unfortunately, many developers don’t know how to do that, and the web is +full of outdated or otherwise wrongful advices, which doesn’t help.

+

We would like to give you a list of combined do’s and don’ts to help you +with that. Please read below.

+
    +
  • DO NOT store passwords in plain-text format.

    +

    Always hash your passwords.

    +
  • +
  • DO NOT use Base64 or similar encoding for storing passwords.

    +

    This is as good as storing them in plain-text. Really. Do hashing, +not encoding.

    +

    Encoding, and encryption too, are two-way processes. Passwords are +secrets that must only be known to their owner, and thus must work +only in one direction. Hashing does that - there’s no un-hashing or +de-hashing, but there is decoding and decryption.

    +
  • +
  • DO NOT use weak or broken hashing algorithms like MD5 or SHA1.

    +

    These algorithms are old, proven to be flawed, and not designed for +password hashing in the first place.

    +

    Also, DON’T invent your own algorithms.

    +

    Only use strong password hashing algorithms like BCrypt, which is used +in PHP’s own Password Hashing functions.

    +

    Please use them, even if you’re not running PHP 5.5+, CodeIgniter +provides them for you.

    +
  • +
  • DO NOT ever display or send a password in plain-text format!

    +

    Even to the password’s owner, if you need a “Forgotten password” +feature, just randomly generate a new, one-time (this is also important) +password and send that instead.

    +
  • +
  • DO NOT put unnecessary limits on your users’ passwords.

    +

    If you’re using a hashing algorithm other than BCrypt (which has a limit +of 72 characters), you should set a relatively high limit on password +lengths in order to mitigate DoS attacks - say, 1024 characters.

    +

    Other than that however, there’s no point in forcing a rule that a +password can only be up to a number of characters, or that it can’t +contain a certain set of special characters.

    +

    Not only does this reduce security instead of improving it, but +there’s literally no reason to do it. No technical limitations and +no (practical) storage constraints apply once you’ve hashed them, none!

    +
  • +
+
+
+

Validate input data

+

CodeIgniter has a Form Validation Library that assists you in +validating, filtering, and prepping your data.

+

Even if that doesn’t work for your use case however, be sure to always +validate and sanitize all input data. For example, if you expect a numeric +string for an input variable, you can check for that with is_numeric() +or ctype_digit(). Always try to narrow down your checks to a certain +pattern.

+

Have it in mind that this includes not only $_POST and $_GET +variables, but also cookies, the user-agent string and basically +all data that is not created directly by your own code.

+
+
+

Escape all data before database insertion

+

Never insert information into your database without escaping it. +Please see the section that discusses database queries for more information.

+
+
+

Hide your files

+

Another good security practice is to only leave your index.php +and “assets” (e.g. .js, css and image files) under your server’s +webroot directory (most commonly named “htdocs/”). These are +the only files that you would need to be accessible from the web.

+

Allowing your visitors to see anything else would potentially +allow them to access sensitive data, execute scripts, etc.

+

If you’re not allowed to do that, you can try using a .htaccess +file to restrict access to those resources.

+

CodeIgniter will have an index.html file in all of its +directories in an attempt to hide some of this data, but have +it in mind that this is not enough to prevent a serious +attacker.

+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/styleguide.html b/user_guide/general/styleguide.html new file mode 100644 index 000000000..3d8458469 --- /dev/null +++ b/user_guide/general/styleguide.html @@ -0,0 +1,1129 @@ + + + + + + + + + + PHP Style Guide — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

PHP Style Guide

+

The following page describes the coding styles adhered to when +contributing to the development of CodeIgniter. There is no requirement +to use these styles in your own CodeIgniter application, though they +are recommended.

+ +
+

File Format

+

Files should be saved with Unicode (UTF-8) encoding. The BOM should +not be used. Unlike UTF-16 and UTF-32, there’s no byte order to +indicate in a UTF-8 encoded file, and the BOM can have a negative side +effect in PHP of sending output, preventing the application from being +able to set its own headers. Unix line endings should be used (LF).

+

Here is how to apply these settings in some of the more common text +editors. Instructions for your text editor may vary; check your text +editor’s documentation.

+
+

TextMate

+
    +
  1. Open the Application Preferences
  2. +
  3. Click Advanced, and then the “Saving” tab
  4. +
  5. In “File Encoding”, select “UTF-8 (recommended)”
  6. +
  7. In “Line Endings”, select “LF (recommended)”
  8. +
  9. Optional: Check “Use for existing files as well” if you wish to +modify the line endings of files you open to your new preference.
  10. +
+
+
+

BBEdit

+
    +
  1. Open the Application Preferences
  2. +
  3. Select “Text Encodings” on the left.
  4. +
  5. In “Default text encoding for new documents”, select “Unicode (UTF-8, +no BOM)”
  6. +
  7. Optional: In “If file’s encoding can’t be guessed, use”, select +“Unicode (UTF-8, no BOM)”
  8. +
  9. Select “Text Files” on the left.
  10. +
  11. In “Default line breaks”, select “Mac OS X and Unix (LF)”
  12. +
+
+
+
+

PHP Closing Tag

+

The PHP closing tag on a PHP document ?> is optional to the PHP +parser. However, if used, any whitespace following the closing tag, +whether introduced by the developer, user, or an FTP application, can +cause unwanted output, PHP errors, or if the latter are suppressed, +blank pages. For this reason, all PHP files MUST OMIT the PHP closing +tag and end with a single empty line instead.

+
+
+

File Naming

+

Class files must be named in a Ucfirst-like manner, while any other file name +(configurations, views, generic scripts, etc.) should be in all lowercase.

+

INCORRECT:

+
somelibrary.php
+someLibrary.php
+SOMELIBRARY.php
+Some_Library.php
+
+Application_config.php
+Application_Config.php
+applicationConfig.php
+
+
+

CORRECT:

+
Somelibrary.php
+Some_library.php
+
+applicationconfig.php
+application_config.php
+
+
+

Furthermore, class file names should match the name of the class itself. +For example, if you have a class named Myclass, then its filename must +be Myclass.php.

+
+
+

Class and Method Naming

+

Class names should always start with an uppercase letter. Multiple words +should be separated with an underscore, and not CamelCased.

+

INCORRECT:

+
class superclass
+class SuperClass
+
+
+

CORRECT:

+
class Super_class
+
+
+
class Super_class {
+
+        public function __construct()
+        {
+
+        }
+}
+
+
+

Class methods should be entirely lowercased and named to clearly +indicate their function, preferably including a verb. Try to avoid +overly long and verbose names. Multiple words should be separated +with an underscore.

+

INCORRECT:

+
function fileproperties()               // not descriptive and needs underscore separator
+function fileProperties()               // not descriptive and uses CamelCase
+function getfileproperties()            // Better!  But still missing underscore separator
+function getFileProperties()            // uses CamelCase
+function get_the_file_properties_from_the_file()        // wordy
+
+
+

CORRECT:

+
function get_file_properties()  // descriptive, underscore separator, and all lowercase letters
+
+
+
+
+

Variable Names

+

The guidelines for variable naming are very similar to those used for +class methods. Variables should contain only lowercase letters, +use underscore separators, and be reasonably named to indicate their +purpose and contents. Very short, non-word variables should only be used +as iterators in for() loops.

+

INCORRECT:

+
$j = 'foo';             // single letter variables should only be used in for() loops
+$Str                    // contains uppercase letters
+$bufferedText           // uses CamelCasing, and could be shortened without losing semantic meaning
+$groupid                // multiple words, needs underscore separator
+$name_of_last_city_used // too long
+
+
+

CORRECT:

+
for ($j = 0; $j < 10; $j++)
+$str
+$buffer
+$group_id
+$last_city
+
+
+
+
+

Commenting

+

In general, code should be commented prolifically. It not only helps +describe the flow and intent of the code for less experienced +programmers, but can prove invaluable when returning to your own code +months down the line. There is not a required format for comments, but +the following are recommended.

+

DocBlock +style comments preceding class, method, and property declarations so they can be +picked up by IDEs:

+
/**
+ * Super Class
+ *
+ * @package     Package Name
+ * @subpackage  Subpackage
+ * @category    Category
+ * @author      Author Name
+ * @link        http://example.com
+ */
+class Super_class {
+
+
+
/**
+ * Encodes string for use in XML
+ *
+ * @param       string  $str    Input string
+ * @return      string
+ */
+function xml_encode($str)
+
+
+
/**
+ * Data for class manipulation
+ *
+ * @var array
+ */
+public $data = array();
+
+
+

Use single line comments within code, leaving a blank line between large +comment blocks and code.

+
// break up the string by newlines
+$parts = explode("\n", $str);
+
+// A longer comment that needs to give greater detail on what is
+// occurring and why can use multiple single-line comments.  Try to
+// keep the width reasonable, around 70 characters is the easiest to
+// read.  Don't hesitate to link to permanent external resources
+// that may provide greater detail:
+//
+// http://example.com/information_about_something/in_particular/
+
+$parts = $this->foo($parts);
+
+
+
+
+

Constants

+

Constants follow the same guidelines as do variables, except constants +should always be fully uppercase. Always use CodeIgniter constants when +appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.

+

INCORRECT:

+
myConstant      // missing underscore separator and not fully uppercase
+N               // no single-letter constants
+S_C_VER         // not descriptive
+$str = str_replace('{foo}', 'bar', $str);       // should use LD and RD constants
+
+
+

CORRECT:

+
MY_CONSTANT
+NEWLINE
+SUPER_CLASS_VERSION
+$str = str_replace(LD.'foo'.RD, 'bar', $str);
+
+
+
+
+

TRUE, FALSE, and NULL

+

TRUE, FALSE, and NULL keywords should always be fully +uppercase.

+

INCORRECT:

+
if ($foo == true)
+$bar = false;
+function foo($bar = null)
+
+
+

CORRECT:

+
if ($foo == TRUE)
+$bar = FALSE;
+function foo($bar = NULL)
+
+
+
+
+

Logical Operators

+

Use of the || “or” comparison operator is discouraged, as its clarity +on some output devices is low (looking like the number 11, for instance). +&& is preferred over AND but either are acceptable, and a space should +always precede and follow !.

+

INCORRECT:

+
if ($foo || $bar)
+if ($foo AND $bar)  // okay but not recommended for common syntax highlighting applications
+if (!$foo)
+if (! is_array($foo))
+
+
+

CORRECT:

+
if ($foo OR $bar)
+if ($foo && $bar) // recommended
+if ( ! $foo)
+if ( ! is_array($foo))
+
+
+
+
+

Comparing Return Values and Typecasting

+

Some PHP functions return FALSE on failure, but may also have a valid +return value of “” or 0, which would evaluate to FALSE in loose +comparisons. Be explicit by comparing the variable type when using these +return values in conditionals to ensure the return value is indeed what +you expect, and not a value that has an equivalent loose-type +evaluation.

+

Use the same stringency in returning and checking your own variables. +Use === and !== as necessary.

+

INCORRECT:

+
// If 'foo' is at the beginning of the string, strpos will return a 0,
+// resulting in this conditional evaluating as TRUE
+if (strpos($str, 'foo') == FALSE)
+
+
+

CORRECT:

+
if (strpos($str, 'foo') === FALSE)
+
+
+

INCORRECT:

+
function build_string($str = "")
+{
+        if ($str == "") // uh-oh!  What if FALSE or the integer 0 is passed as an argument?
+        {
+
+        }
+}
+
+
+

CORRECT:

+
function build_string($str = "")
+{
+        if ($str === "")
+        {
+
+        }
+}
+
+
+

See also information regarding typecasting, +which can be quite useful. Typecasting has a slightly different effect +which may be desirable. When casting a variable as a string, for +instance, NULL and boolean FALSE variables become empty strings, 0 (and +other numbers) become strings of digits, and boolean TRUE becomes “1”:

+
$str = (string) $str; // cast $str as a string
+
+
+
+
+

Debugging Code

+

Do not leave debugging code in your submissions, even when commented out. +Things such as var_dump(), print_r(), die()/exit() should not be included +in your code unless it serves a specific purpose other than debugging.

+
+
+

Whitespace in Files

+

No whitespace can precede the opening PHP tag or follow the closing PHP +tag. Output is buffered, so whitespace in your files can cause output to +begin before CodeIgniter outputs its content, leading to errors and an +inability for CodeIgniter to send proper headers.

+
+
+

Compatibility

+

CodeIgniter recommends PHP 5.6 or newer to be used, but it should be +compatible with PHP 5.3.7. Your code must either be compatible with this +requirement, provide a suitable fallback, or be an optional feature that +dies quietly without affecting a user’s application.

+

Additionally, do not use PHP functions that require non-default libraries +to be installed unless your code contains an alternative method when the +function is not available.

+
+
+

One File per Class

+

Use separate files for each class, unless the classes are closely related. +An example of a CodeIgniter file that contains multiple classes is the +Xmlrpc library file.

+
+
+

Whitespace

+

Use tabs for whitespace in your code, not spaces. This may seem like a +small thing, but using tabs instead of whitespace allows the developer +looking at your code to have indentation at levels that they prefer and +customize in whatever application they use. And as a side benefit, it +results in (slightly) more compact files, storing one tab character +versus, say, four space characters.

+
+
+

Line Breaks

+

Files must be saved with Unix line breaks. This is more of an issue for +developers who work in Windows, but in any case ensure that your text +editor is setup to save files with Unix line breaks.

+
+
+

Code Indenting

+

Use Allman style indenting. With the exception of Class declarations, +braces are always placed on a line by themselves, and indented at the +same level as the control statement that “owns” them.

+

INCORRECT:

+
function foo($bar) {
+        // ...
+}
+
+foreach ($arr as $key => $val) {
+        // ...
+}
+
+if ($foo == $bar) {
+        // ...
+} else {
+        // ...
+}
+
+for ($i = 0; $i < 10; $i++)
+        {
+        for ($j = 0; $j < 10; $j++)
+                {
+                // ...
+                }
+        }
+
+try {
+        // ...
+}
+catch() {
+        // ...
+}
+
+
+

CORRECT:

+
function foo($bar)
+{
+        // ...
+}
+
+foreach ($arr as $key => $val)
+{
+        // ...
+}
+
+if ($foo == $bar)
+{
+        // ...
+}
+else
+{
+        // ...
+}
+
+for ($i = 0; $i < 10; $i++)
+{
+        for ($j = 0; $j < 10; $j++)
+        {
+                // ...
+        }
+}
+
+try
+{
+        // ...
+}
+catch()
+{
+        // ...
+}
+
+
+
+
+

Bracket and Parenthetic Spacing

+

In general, parenthesis and brackets should not use any additional +spaces. The exception is that a space should always follow PHP control +structures that accept arguments with parenthesis (declare, do-while, +elseif, for, foreach, if, switch, while), to help distinguish them from +functions and increase readability.

+

INCORRECT:

+
$arr[ $foo ] = 'foo';
+
+
+

CORRECT:

+
$arr[$foo] = 'foo'; // no spaces around array keys
+
+
+

INCORRECT:

+
function foo ( $bar )
+{
+
+}
+
+
+

CORRECT:

+
function foo($bar) // no spaces around parenthesis in function declarations
+{
+
+}
+
+
+

INCORRECT:

+
foreach( $query->result() as $row )
+
+
+

CORRECT:

+
foreach ($query->result() as $row) // single space following PHP control structures, but not in interior parenthesis
+
+
+
+
+

Localized Text

+

CodeIgniter libraries should take advantage of corresponding language files +whenever possible.

+

INCORRECT:

+
return "Invalid Selection";
+
+
+

CORRECT:

+
return $this->lang->line('invalid_selection');
+
+
+
+
+

Private Methods and Variables

+

Methods and variables that are only accessed internally, +such as utility and helper functions that your public methods use for +code abstraction, should be prefixed with an underscore.

+
public function convert_text()
+private function _convert_text()
+
+
+
+
+

PHP Errors

+

Code must run error free and not rely on warnings and notices to be +hidden to meet this requirement. For instance, never access a variable +that you did not set yourself (such as $_POST array keys) without first +checking to see that it isset().

+

Make sure that your dev environment has error reporting enabled +for ALL users, and that display_errors is enabled in the PHP +environment. You can check this setting with:

+
if (ini_get('display_errors') == 1)
+{
+        exit "Enabled";
+}
+
+
+

On some servers where display_errors is disabled, and you do not have +the ability to change this in the php.ini, you can often enable it with:

+
ini_set('display_errors', 1);
+
+
+
+

Note

+

Setting the display_errors +setting with ini_set() at runtime is not identical to having +it enabled in the PHP environment. Namely, it will not have any +effect if the script has fatal errors.

+
+
+
+

Short Open Tags

+

Always use full PHP opening tags, in case a server does not have +short_open_tag enabled.

+

INCORRECT:

+
<? echo $foo; ?>
+
+<?=$foo?>
+
+
+

CORRECT:

+
<?php echo $foo; ?>
+
+
+
+

Note

+

PHP 5.4 will always have the <?= tag available.

+
+
+
+

One Statement Per Line

+

Never combine statements on one line.

+

INCORRECT:

+
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
+
+
+

CORRECT:

+
$foo = 'this';
+$bar = 'that';
+$bat = str_replace($foo, $bar, $bag);
+
+
+
+
+

Strings

+

Always use single quoted strings unless you need variables parsed, and +in cases where you do need variables parsed, use braces to prevent +greedy token parsing. You may also use double-quoted strings if the +string contains single quotes, so you do not have to use escape +characters.

+

INCORRECT:

+
"My String"                                     // no variable parsing, so no use for double quotes
+"My string $foo"                                // needs braces
+'SELECT foo FROM bar WHERE baz = \'bag\''       // ugly
+
+
+

CORRECT:

+
'My String'
+"My string {$foo}"
+"SELECT foo FROM bar WHERE baz = 'bag'"
+
+
+
+
+

SQL Queries

+

SQL keywords are always capitalized: SELECT, INSERT, UPDATE, WHERE, +AS, JOIN, ON, IN, etc.

+

Break up long queries into multiple lines for legibility, preferably +breaking for each clause.

+

INCORRECT:

+
// keywords are lowercase and query is too long for
+// a single line (... indicates continuation of line)
+$query = $this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses
+...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
+
+
+

CORRECT:

+
$query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
+                                FROM exp_pre_email_addresses
+                                WHERE foo != 'oof'
+                                AND baz != 'zab'
+                                ORDER BY foobaz
+                                LIMIT 5, 100");
+
+
+
+
+

Default Function Arguments

+

Whenever appropriate, provide function argument defaults, which helps +prevent PHP errors with mistaken calls and provides common fallback +values which can save a few lines of code. Example:

+
function foo($bar = '', $baz = FALSE)
+
+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/urls.html b/user_guide/general/urls.html new file mode 100644 index 000000000..2be6adced --- /dev/null +++ b/user_guide/general/urls.html @@ -0,0 +1,598 @@ + + + + + + + + + + CodeIgniter URLs — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

CodeIgniter URLs

+

By default, URLs in CodeIgniter are designed to be search-engine and +human friendly. Rather than using the standard “query string” approach +to URLs that is synonymous with dynamic systems, CodeIgniter uses a +segment-based approach:

+
example.com/news/article/my_article
+
+
+
+

Note

+

Query string URLs can be optionally enabled, as described +below.

+
+
+

URI Segments

+

The segments in the URL, in following with the Model-View-Controller +approach, usually represent:

+
example.com/class/function/ID
+
+
+
    +
  1. The first segment represents the controller class that should be +invoked.
  2. +
  3. The second segment represents the class function, or method, that +should be called.
  4. +
  5. The third, and any additional segments, represent the ID and any +variables that will be passed to the controller.
  6. +
+

The URI Library and the URL Helper contain functions that make it easy to work +with your URI data. In addition, your URLs can be remapped using the +URI Routing feature for more flexibility.

+
+
+

Removing the index.php file

+

By default, the index.php file will be included in your URLs:

+
example.com/index.php/news/article/my_article
+
+
+

If your Apache server has mod_rewrite enabled, you can easily remove this +file by using a .htaccess file with some simple rules. Here is an example +of such a file, using the “negative” method in which everything is redirected +except the specified items:

+
RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule ^(.*)$ index.php/$1 [L]
+
+
+

In the above example, any HTTP request other than those for existing +directories and existing files is treated as a request for your index.php file.

+
+

Note

+

These specific rules might not work for all server configurations.

+
+
+

Note

+

Make sure to also exclude from the above rule any assets that you +might need to be accessible from the outside world.

+
+
+
+

Adding a URL Suffix

+

In your config/config.php file you can specify a suffix that will be +added to all URLs generated by CodeIgniter. For example, if a URL is +this:

+
example.com/index.php/products/view/shoes
+
+
+

You can optionally add a suffix, like .html, making the page appear to +be of a certain type:

+
example.com/index.php/products/view/shoes.html
+
+
+
+
+

Enabling Query Strings

+

In some cases you might prefer to use query strings URLs:

+
index.php?c=products&m=view&id=345
+
+
+

CodeIgniter optionally supports this capability, which can be enabled in +your application/config.php file. If you open your config file you’ll +see these items:

+
$config['enable_query_strings'] = FALSE;
+$config['controller_trigger'] = 'c';
+$config['function_trigger'] = 'm';
+
+
+

If you change “enable_query_strings” to TRUE this feature will become +active. Your controllers and functions will then be accessible using the +“trigger” words you’ve set to invoke your controllers and methods:

+
index.php?c=controller&m=method
+
+
+
+

Note

+

If you are using query strings you will have to build your own +URLs, rather than utilizing the URL helpers (and other helpers +that generate URLs, like some of the form helpers) as these are +designed to work with segment based URLs.

+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/views.html b/user_guide/general/views.html new file mode 100644 index 000000000..974a72186 --- /dev/null +++ b/user_guide/general/views.html @@ -0,0 +1,705 @@ + + + + + + + + + + Views — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+ +
+
+
+ +
+

Views

+

A view is simply a web page, or a page fragment, like a header, footer, +sidebar, etc. In fact, views can flexibly be embedded within other views +(within other views, etc., etc.) if you need this type of hierarchy.

+

Views are never called directly, they must be loaded by a +controller. Remember that in an MVC framework, the +Controller acts as the traffic cop, so it is responsible for fetching a +particular view. If you have not read the +Controllers page you should do so before +continuing.

+

Using the example controller you created in the +controller page, let’s add a view to it.

+
+

Creating a View

+

Using your text editor, create a file called blogview.php, and put this +in it:

+
<html>
+<head>
+        <title>My Blog</title>
+</head>
+<body>
+        <h1>Welcome to my Blog!</h1>
+</body>
+</html>
+
+
+

Then save the file in your application/views/ directory.

+
+
+

Loading a View

+

To load a particular view file you will use the following method:

+
$this->load->view('name');
+
+
+

Where name is the name of your view file.

+
+

Note

+

The .php file extension does not need to be specified +unless you use something other than .php.

+
+

Now, open the controller file you made earlier called Blog.php, and +replace the echo statement with the view loading method:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                $this->load->view('blogview');
+        }
+}
+
+
+

If you visit your site using the URL you did earlier you should see your +new view. The URL was similar to this:

+
example.com/index.php/blog/
+
+
+
+
+

Loading multiple views

+

CodeIgniter will intelligently handle multiple calls to +$this->load->view() from within a controller. If more than one call +happens they will be appended together. For example, you may wish to +have a header view, a menu view, a content view, and a footer view. That +might look something like this:

+
<?php
+
+class Page extends CI_Controller {
+
+        public function index()
+        {
+                $data['page_title'] = 'Your title';
+                $this->load->view('header');
+                $this->load->view('menu');
+                $this->load->view('content', $data);
+                $this->load->view('footer');
+        }
+
+}
+
+
+

In the example above, we are using “dynamically added data”, which you +will see below.

+
+
+

Storing Views within Sub-directories

+

Your view files can also be stored within sub-directories if you prefer +that type of organization. When doing so you will need to include the +directory name loading the view. Example:

+
$this->load->view('directory_name/file_name');
+
+
+
+
+

Adding Dynamic Data to the View

+

Data is passed from the controller to the view by way of an array or +an object in the second parameter of the view loading method. Here +is an example using an array:

+
$data = array(
+        'title' => 'My Title',
+        'heading' => 'My Heading',
+        'message' => 'My Message'
+);
+
+$this->load->view('blogview', $data);
+
+
+

And here’s an example using an object:

+
$data = new Someclass();
+$this->load->view('blogview', $data);
+
+
+
+

Note

+

If you use an object, the class variables will be turned +into array elements.

+
+

Let’s try it with your controller file. Open it add this code:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                $data['title'] = "My Real Title";
+                $data['heading'] = "My Real Heading";
+
+                $this->load->view('blogview', $data);
+        }
+}
+
+
+

Now open your view file and change the text to variables that correspond +to the array keys in your data:

+
<html>
+<head>
+        <title><?php echo $title;?></title>
+</head>
+<body>
+        <h1><?php echo $heading;?></h1>
+</body>
+</html>
+
+
+

Then load the page at the URL you’ve been using and you should see the +variables replaced.

+
+
+

Creating Loops

+

The data array you pass to your view files is not limited to simple +variables. You can pass multi dimensional arrays, which can be looped to +generate multiple rows. For example, if you pull data from your database +it will typically be in the form of a multi-dimensional array.

+

Here’s a simple example. Add this to your controller:

+
<?php
+class Blog extends CI_Controller {
+
+        public function index()
+        {
+                $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
+
+                $data['title'] = "My Real Title";
+                $data['heading'] = "My Real Heading";
+
+                $this->load->view('blogview', $data);
+        }
+}
+
+
+

Now open your view file and create a loop:

+
<html>
+<head>
+        <title><?php echo $title;?></title>
+</head>
+<body>
+        <h1><?php echo $heading;?></h1>
+
+        <h3>My Todo List</h3>
+
+        <ul>
+        <?php foreach ($todo_list as $item):?>
+
+                <li><?php echo $item;?></li>
+
+        <?php endforeach;?>
+        </ul>
+
+</body>
+</html>
+
+
+
+

Note

+

You’ll notice that in the example above we are using PHP’s +alternative syntax. If you are not familiar with it you can read about +it here.

+
+
+
+

Returning views as data

+

There is a third optional parameter lets you change the behavior of +the method so that it returns data as a string rather than sending it +to your browser. This can be useful if you want to process the data in +some way. If you set the parameter to TRUE (boolean) it will return +data. The default behavior is false, which sends it to your browser. +Remember to assign it to a variable if you want the data returned:

+
$string = $this->load->view('myfile', '', TRUE);
+
+
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user_guide/general/welcome.html b/user_guide/general/welcome.html new file mode 100644 index 000000000..7c062ebc6 --- /dev/null +++ b/user_guide/general/welcome.html @@ -0,0 +1,521 @@ + + + + + + + + + + Welcome to CodeIgniter — CodeIgniter 3.1.5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+
+
    +
  • Docs »
  • + +
  • Welcome to CodeIgniter
  • +
  • + +
  • +
    + classic layout +
    +
+
+
+
+ +
+

Welcome to CodeIgniter

+

CodeIgniter is an Application Development Framework - a toolkit - for +people who build web sites using PHP. Its goal is to enable you to +develop projects much faster than you could if you were writing code +from scratch, by providing a rich set of libraries for commonly needed +tasks, as well as a simple interface and logical structure to access +these libraries. CodeIgniter lets you creatively focus on your project +by minimizing the amount of code needed for a given task.

+
+

Who is CodeIgniter For?

+

CodeIgniter is right for you if:

+
    +
  • You want a framework with a small footprint.
  • +
  • You need exceptional performance.
  • +
  • You need broad compatibility with standard hosting accounts that run +a variety of PHP versions and configurations.
  • +
  • You want a framework that requires nearly zero configuration.
  • +
  • You want a framework that does not require you to use the command +line.
  • +
  • You want a framework that does not require you to adhere to +restrictive coding rules.
  • +
  • You are not interested in large-scale monolithic libraries like PEAR.
  • +
  • You do not want to be forced to learn a templating language (although +a template parser is optionally available if you desire one).
  • +
  • You eschew complexity, favoring simple solutions.
  • +
  • You need clear, thorough documentation.
  • +
+
+
+ + +
+
+ + + + +
+ +
+

+ © Copyright 2014 - 2017, British Columbia Institute of Technology. + Last updated on Jun 19, 2017. +

+
+ + Built with Sphinx using a theme provided by Read the Docs. + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3-24-g4f1b