Lynda. Up and Running with PHP CodeIgniter / Section 2 - 4. Creating a static page controller

  • 10 years ago
Creating a static page controller

In CodeIgniter, and other MVC frameworks for that matter, a controller can be practically thought of as a class that delegates work. Each controller is named so it can be accessed via URL. To determine what controller to use, CodeIgniter uses the following pattern for routing a user's request to the right controller. Index.php, followed by the controller class, then the controller method, and then any optional arguments. Let's take a look at how this default message is being rendered. From Netbeans, navigate to the application route, and open the controllers directory. There are two files in here: index.html, which, when I open, I can see is just a simple place holder denying access.

Close it, then open welcome.php. The first line is a safety mechanism that prevents direct access to the controller. Then, a subclass declaration that extends the codeIgniter controller class. The name of the class is Welcome, with a capital W. This is different than the file name, which is all in lower case. There's only one method within the class, index. Index is a bit of a fail safe in that if the controller method is missing from the URL, then index is the fall back. The method has only one line of executable code loading the view named welcome message.

I'll discuss views in greater detail in a moment. First, let's see how CodeIgniter parses URLs. Switch back to your browser. You should be seeing the default page. Now navigate to /index.php/welcome/index, the page should reload and look the same. Let's trigger the default behavior as well without specifying the index method. Again, the page looks the same. If I try to do something that doesn't exist, however, like the puppies method, I get a default for our fore message.

That's enough playing around with the defaults. Let's actually start writing code. I'm going to create a new controller for the magazine database. Copy the first three lines of the welcome class. Close the file and then create a new file in the controller called Magazine.php. I'll paste the contents, close that out properly. I'm going to change class welcome to class magazine with a capital M. I'm going to create a public... Method called index which takes no arguements.

For now let's just echo a headline my magazines. So echo h2 my magazines and then close the h2 . Add a quick comment stating what this method does which in this case is just the index page for magazine controller. That's all that's needed for the controller for now. Save and go back to the browser. Recall the URL structure with the class name. Navigate to Index.PHP/magazine. My magazines is now displayed directly for the controller. However, this is kind of an awkward URL.

Wouldn't it be easier if we didn't have to explicitly state magazine? Let's change the default URL route to go to the magazine instead of Welcome. To do that, I'm going to explicitly edit the route's configuration. Return to Netbeans, open up Config, then open routes.php. There's a lot of comments in here, in short, this file allows remapping of URI requests to a specific controllers when you don't want the default behavior. Scrolling to the bottom, there's actually only two routes and both are reserved by codeIgnitor.

The default, underscore controller, is actually what we want to specify. Currently it's set to welcome which explains why the default welcome message was shown when just navigating to the base URL. Let's change it to magazine and save. Then close the router. Switch back to the browser. Now, when I navigate to the server root, I see my magazines instead of the default message. If you recall how NBC Architecture separates logic from display, you're probably thinking echoing isn't really a good idea, and you're right. Echoing is terrible and I should feel bad for doing it.

Instead, I should feel bad for doing it. Instead, I should have a view. All right. How can I do that?

Recommended