Dumping output from template_init() I have a Drupal site with roughly the following in my template.php hook_init block:

function mytemplate_init() {
    if (request_path() == "widgets_json") {
        drupal_json_output(_get_widgets());
        exit;
    }
    if (request_path() == "people_json") {
        drupal_json_output(_get_people());
        exit;
    }
}


Are there any problems with this approach?

On the face of it, the two main problems are that it's going to break if URL's ever change, and it's impossible to theme the output of those functions using an appropriate page--widget_json.tpl.php or page--people_json.tpl.php template. On the other hand, adding a content type just for a few JSON output pages that are never going to change paths seems like overkill.

What do you think of this approach?
From what I see, you could use two different methods: Ternaries and switches:



From a switch point of view, you could use the following to proceed:

function mytemplate_init() {
    switch(request_path()) {
       case "widgets_json":
           drupal_json_output(_get_widgets());
       break;
       case "people_json":
           drupal_json_output(_get_people());
       break;
    }
}




Or, one can replace that with a ternary to shorten it:


if (request_path() == "widgets_json") {
    drupal_json_output(_get_widgets());
    exit;
}
if (request_path() == "people_json") {
    drupal_json_output(_get_people());
    exit;
}



into:

request_path() == "widgets_json" ? drupal_json_output(_get_widgets()) : (request_path() == "people_json" ? drupal_json_output(_get_people()) : "" )
exit;


The shortside to ternaries is that you sacrifice readability for effectiveness.

However, if you can move past that, ternaries are an effective part of a Programmer's Toolbelt(TM)



Or, as I've since come to understand, we can use objects!

$functions = [
       "widgets_json" =&gt; _get_widgets,
       "people_json"  =&gt; _get_people
     ];
$functions[request_path()]();




Unfortunately, with such a small amount of code supplied, very little can be reviewed.