Controllers - adampatterson/Tentacle GitHub Wiki

What Are They?

Controllers in Dingo display pages, make database queries, and pass data to Views. Controllers provide the core functionality to Dingo applications.

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 index.php/about Dingo will load the about.php controller and run the controller-\>index() function. If the controller or the function is missing then Dingo will display a 404 page not found error.

Now in our new controller create the controller class and the index() function.

<?php

class about_controller
{
  public function index()
  {
echo "This is about me!";
  }
}

Now if you visit index.php/about in your web browser you should see “This is about me!”.

Add Onto It

Let’s say you have a good friend Bob. He sees how amazingly awesome your website is and wants a page about himself on it. Because of the way Dingo’s controllers work this should be easy as pie. All you have to do is add the function bob() onto your controller class.

<?php

class about_controller
{
  public function index()
  {
    echo "This is about me!";
  }

  public function bob()
  {
	echo "This is Bob's page";
  }
}

Now when you visit index.php/about/bob Dingo will run the bob() function in the about controller, which would display “This is Bob’s page”.

But wait! How come when you visit index.php/about it runs the index() function? This happens because by default if you just visit the controller Dingo automatically runs the index() function. So, if you visit index.php/amazing it will run the index() function in the amazing.php controller.

Arguments

URLs in Dingo 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. Edit bob() so it looks like this:

public function bob($message)
{
  echo "You said: $message";
}

Now if you visit index.php/about/bob/cool it will display “You said: cool”.

Now there is one problem with this. If you where to visit index.php/about/bob then you would get a 404 error! This is because you can’t just run bob(), it has a required argument! If you want people to still be able to visit just plain old bob() then you need to make your argument optional:

public function bob($message = 'nothing at all')
{
  echo "You said: $message";
}

Now visiting index.php/about/bob will produce “You said: nothing at all”, but visiting index.php/about/bob/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 Dingo, it is possible to make controller classes extend from other controller classes. For example you may have a controller that looks like this:

<?php

class base_controller
{
  public function message()
  {
    echo "Hi!";
  }
}

Then, you could have another controller that extends from your parent controller so it can access the message() method.

<?php

load::parent_controller('base');

class another_controller extends base_controller
{
  public function index()
  {
    $this->message();
  }
}

Parent controllers may have their own parent controllers as well.