====== Controllers ======
**What Are They?**
Controllers take care of event handle, make queries to Models and finally pass data to Views.
**Basic Usage**
Let's say you want to make a page about yourself. We are going to create a new controller just for that. Create a new PHP file at application/controllers/about.php. This file will be our new controller.
When the web browser requests the page /about (remember inside route array set an element 'about' => 'about.index'), Salem will load the about.php controller and run the index() function. If the controller or the function is missing then It will display a 404 error page (not found error).
Now in our new controller create the controller class and the index() function.
Now if you visit /about in your web browser you should see "This is a page about myself !".
**Arguments**
URLs can be infinitely long. What that means is that after the controller and function portions on the URL all other portions are just arguments for the controller function. Create a function youSaid() inside about class and remember inside route array set an element 'about/you/:words' => 'about.youSaid') so it looks like this:
Now if you visit /about/you/cool it will display "You said: cool".
Now there is one problem with this. If you where to visit /about/you then you would get a 404 error! This is because you can't just run youSaid(), it has a required argument! If you want people to still be able to visit the page, then you need to make your argument optional:
public function youSaid($message = 'nothing at all')
{
echo "You said: ".$message;
}
Now visiting /about/you will produce "You said: nothing at all", althoughthis if you visiting /about/you/cool will still display"You said: cool".
At this point you should try experimenting around with adding additional controllers, functions, and arguments and see what happens.
**Parent Controllers**
In Salem is possible to make controller classes extend from other controller classes. For example if you want to extend your about.php controller:
youSaid("I'm cool!");
}
}
?>
----
[[documentation|Go back to Documentation]]