We might imagine that there is a controller named “news”. The method
being called on news would be “latest”. The news method’s job could be to
grab 10 news items, and render them on the page. Very often in MVC,
you’ll see URL patterns that match:

You have created a class named Pages, with a view method that accepts
one argument named $page. The Pages class is extending the
CI_Controller class. This means that the new pages class can access the
methods and variables defined in the CI_Controller class
(system/core/Controller.php).

The controller is what will become the center of every request to
your web application. In very technical CodeIgniter discussions, it may
be referred to as the super object. Like any php class, you refer to
it within your controllers as $this. Referring to $this is how
you will load libraries, views, and generally command the framework.

Now you’ve created your first method, it’s time to make some basic page
templates. We will be creating two “views” (page templates) that act as
our page footer and header.

Create the header at application/views/templates/header.php and add
the following code:

The header contains the basic HTML code that you’ll want to display
before loading the main view, together with a heading. It will also
output the $title variable, which we’ll define later in the controller.
Now, create a footer at application/views/templates/footer.php that
includes the following code:

Earlier you set up a controller with a view() method. The method
accepts one parameter, which is the name of the page to be loaded. The
static page templates will be located in the application/views/pages/
directory.

In that directory, create two files named home.php and about.php.
Within those files, type some text − anything you’d like − and save them.
If you like to be particularly un-original, try “Hello World!”.

In order to load those pages, you’ll have to check whether the requested
page actually exists:

publicfunctionview($page='home'){if(!file_exists(APPPATH.'views/pages/'.$page.'.php')){// Whoops, we don't have a page for that!show_404();}$data['title']=ucfirst($page);// Capitalize the first letter$this->load->view('templates/header',$data);$this->load->view('pages/'.$page,$data);$this->load->view('templates/footer',$data);}

Now, when the page does exist, it is loaded, including the header and
footer, and displayed to the user. If the page doesn’t exist, a “404
Page not found” error is shown.

The first line in this method checks whether the page actually exists.
PHP’s native file_exists() function is used to check whether the file
is where it’s expected to be. show_404() is a built-in CodeIgniter
function that renders the default error page.

In the header template, the $title variable was used to customize the
page title. The value of title is defined in this method, but instead of
assigning the value to a variable, it is assigned to the title element
in the $data array.

The last thing that has to be done is loading the views in the order
they should be displayed. The second parameter in the view() method is
used to pass values to the view. Each value in the $data array is
assigned to a variable with the name of its key. So the value of
$data['title'] in the controller is equivalent to $title in the
view.

The controller is now functioning! Point your browser to
[your-site-url]index.php/pages/view to see your page. When you visit
index.php/pages/view/about you’ll see the about page, again including
the header and footer.

Using custom routing rules, you have the power to map any URI to any
controller and method, and break free from the normal convention:
http://example.com/[controller-class]/[controller-method]/[arguments]

Let’s do that. Open the routing file located at
application/config/routes.php and add the following two lines.
Remove all other code that sets any element in the $route array.

CodeIgniter reads its routing rules from top to bottom and routes the
request to the first matching rule. Each rule is a regular expression
(left-side) mapped to a controller and method name separated by slashes
(right-side). When a request comes in, CodeIgniter looks for the first
match, and calls the appropriate controller and method, possibly with
arguments.

More information about routing can be found in the URI Routing
documentation.

Here, the second rule in the $routes array matches any request
using the wildcard string (:any). and passes the parameter to the
view() method of the Pages class.

Now visit index.php/about. Did it get routed correctly to the view()
method in the pages controller? Awesome!