CodeIgniter – Get controller or method name

Hey everyone!

Ever since I wrote a few posts on CodeIgniter and published Facebook PHP SDK for CodeIgniter library, and I have been asked this very same question many times. How to get name of current controller (Class) and method (Function)?

Its pretty simple one line code and can be easily found through Google. But there’s a lot of confusion and multiple codes depending on different versions. So I decided to share the code which I have been using on every website that I develop based on CI and works perfectly on the current version of CI v2.1.4.

That’s it! Just simple one line code. But there’s another thing I would like to share, Which is the best way to declare such variables so its available on all controllers and methods?

Obviously you are not going to execute same line on every controller or method (Seriously that’s a bad idea). This is really important as you will not be using just these 2 variables, you may also want site settings and menus to be available everywhere. So my idea to implement this is declare those variables in Controller.php file in CI_Installation/System/Core folder.

Instead of declaring $data variable to load view in every controller or every method. I prefer declaring it as array in Core CI_Controller class which is parent class of all controllers. So the $this->data variable is available and editable everywhere. Not just for variables, If you can also do some pre-processing such as loading data from cache and request validations by declaring functions and invoking them in constructor of CI_Controller class.

Here’s the sample code, this will give you an idea how I do it for my projects and if you have any better way, please feel free to share with me in comments!

Signing off! Puneet

Facebook PHP SDK for CodeIgniter

Integrating Facebook PHP SDK is not that hard, it only takes few minutes to do that. But its completely different story when you are integrating it with CodeIgniter.

Thats because Facebook PHP SDK takes input from $_REQUEST variable while CodeIgniter purges the $_REQUEST variable for security reasons. Other important reason is theres no dedicated library available for it (while there are few available for Twitter) and there is vast range of solutions if you search for it but no proper solution (atleast I didn’t find one).

So I decided to create one and worked on it last week.

Facebook PHP SDK for CodeIgniter on Github

There are four folders config, controllers, libraries and views. All you need to do is, copy these folders to application folder of your CI installation.

Then replace your facebook application id and secret in facebook.php file under config folder:

And thats it. Try accessing domain.com/welcome/login (localhost if testing locally).

 

Few things to double check:

  1. Your FB application is not on Sandbox mode.
  2. Your website domain (or localhost if testing locally) is listed in app domains.
  3. Website with Facebook Login is enabled and pointed to your domain.
  4. App type is set to Web under advance settings.
  5. Client OAuth Login is enabled under advance settings.

 

Making External Calls – CodeIgniter

In web development, sometimes you have to use multiple scripts but preferably with same design. I personally prefer CodeIgniter PHP framework for website development. So I end up in situation where I had to integrate third party scripts with CodeIgniter but keeping the same layout and design site wide. Not just design but also the business logic (processing) behind specific sections of design such as header, footer and sidebar.

Foremost, I did search on making calls to controller or view externally and end up having headache as there were no fitting solutions available. Then I started exploring CodeIgniter’s system folder to understand the internal processing on better level.

The solution I found is divided into two parts:

  1. Making calls from outside of CI
  2. Recognising those calls

 

Lets first talk about the second part. To write it simply, I had to pass variable or something which is on global level and I can look up for in CI system to recognise it as external call. So I created constant using define() function. Lets call it: EXT_CALL

Now, to recognise it in CI system, I edited CI_INSTALLATION/system/core/CodeIgniter.php file around line number 357-360 in ‘Call the requested method’ part. Look for:

And enclose it under IF statement validating EXT_CALL constant. Something like:

Now, lets talk about first part, making external calls. It would be better to look at code first than explanation.

As I said earlier, first thing done in this part is, defining the constant to recognise external call. CI looks for the route given in $_GET variable as key to make call. So I added a pair in $_GET variable defining the route. Next part is to load CI (including index.php file of CI) and to avoid messing the file system hierarchy of CI, I changed the current directory to CI Installation directory as well as saving the path of third party script in $current variable. Then I created instance of CI root by calling get_instance() function.
Next step is again divided into 2 parts, whether you want to call just view file or you want to execute business logic as well (calling controller).
To call view file:

First param should be the name of view file, second is for data variables and third to whether echo or return the output.
And to call the controller:
If you are not sure about the route (Dynamic route)

Replace both method occurrences with method name and controller with name of controller.
Or If the route is known and can be hard coded then you can simply call

Again replace both method occurrences and controller as well.
And at last, change current directory back to third party one saved in $current variable.
That’s it, you should be able to call view or controller from outside of CI.