From f4fb1db458fab52d0493ead52c9ea7e01206eaa7 Mon Sep 17 00:00:00 2001 From: Joël Cox Date: Sun, 9 Oct 2011 18:39:39 +0200 Subject: Moved tutorial to new user guide directory. --- user_guide/general/controllers.html | 388 ------------------------------------ 1 file changed, 388 deletions(-) delete mode 100644 user_guide/general/controllers.html (limited to 'user_guide/general/controllers.html') diff --git a/user_guide/general/controllers.html b/user_guide/general/controllers.html deleted file mode 100644 index 2d525141c..000000000 --- a/user_guide/general/controllers.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - -Controllers : CodeIgniter User Guide - - - - - - - - - - - - - - - - - - - - - -
- - - - - -

CodeIgniter User Guide Version 2.0.3

-
- - - - - - - - - -
- - -
- - - -
- -

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:

- - - - - - -

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

- -

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!.

- -

Note: Class names must start with an uppercase letter. In other words, 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 functions.

- - - - -

Functions

- -

In the above example the function name is index(). The "index" function 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 function in the controller gets called.

- -

Let's try it. Add a new function to your controller:

- - - - -

Now load the following URL to see the comment function:

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

You should see your new message.

- - -

Passing URI Segments to your Functions

- -

If your URI contains more then two segments they will be passed to your function as parameters.

- -

For example, lets say you have a URI like this:

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

Your function 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 function 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.

- - - - -

Remapping Function Calls

- -

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

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

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

- -

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

- -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.

- -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 function named _output() to your controller that will receive the finalized output data.

- -

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

- -

Here is an example:

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

Please note that your _output() function 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() function.
-
-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 acccount 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 Class.

- - -

Private Functions

- - -

In some cases you may want certain functions hidden from public access. To make a function private, simply add an -underscore as the name prefix and it will not be served via a URL request. For example, if you were to have a function 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/ - - - - -

Organizing Your Controllers into Sub-folders

- -

If you are building a large application you might find it convenient to organize your controllers into sub-folders. CodeIgniter permits you to do this.

- -

Simply create folders within your application/controllers directory and place your controller classes within them.

- -

Note:  When using this feature the first segment of your URI must specify the folder. For example, lets 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-folders may contain a default controller which will be -called if the URL contains only the sub-folder. Simply name 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.

- - -<?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 Function Names

- -

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

- -

That's it!

- -

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

- - - -
- - - - - - - \ No newline at end of file -- cgit v1.2.3-24-g4f1b