Daniel Daniel - 5 months ago 54
PHP Question

CodeIgniter: Load controller within controller

I have a

home
controller with an
index
action that displays a set of featured products. However, the products are managed through a
product
controller including a proprietary model and views.

How do I access
product
information from within the
index
action in the
home
controller? Instancing
product
won't work as the class isn't loaded at runtime and CodeIgniter doesn't provide a way to dynamically load controllers. Putting the
product
class into a library file doesn't really work, either.

To be precise, I need the product views (filled with data processed by the
product
controller) inserted in the index view. I'm running CodeIgniter 2.0.2.

Answer

If you're interested, there's a well-established package out there that you can add to your Codeigniter project that will handle this:

https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/

Modular Extensions makes the CodeIgniter PHP framework modular. Modules are groups of independent components, typically model, controller and view, arranged in an application modules sub-directory, that can be dropped into other CodeIgniter applications.

OK, so the big change is that now you'd be using a modular structure - but to me this is desirable. I have used CI for about 3 years now, and can't imagine life without Modular Extensions.

Now, here's the part that deals with directly calling controllers for rendering view partials:

// Using a Module as a view partial from within a view is as easy as writing:
<?php echo modules::run('module/controller/method', $param1, $params2); ?>

That's all there is to it. I typically use this for loading little "widgets" like:

  • Event calendars
  • List of latest news articles
  • Newsletter signup forms
  • Polls

Typically I build a "widget" controller for each module and use it only for this purpose.

Your question was also one of my first questions when I started with Codeigniter. I hope this helps you out, even though it may be a bit more than you were looking for. I've been using MX ever since and haven't looked back.

Make sure to read the docs and check out the multitude of information regarding this package on the Codeigniter forums. Enjoy!