module_load_include() vs require_once
Asked Answered
A

2

7

I was wondering when you need to use module_load_include() or require_once to include files which are located within your module.

Assibilate answered 1/9, 2011 at 13:6 Comment(3)
Drupal is opensource, you can do a check on how is this function writtenTubular
@ajreal: it's still a legitimate question. Even the Drupal manual page doesn't give a definitive case for using it over require_once. In fact, a similar question was asked in the comments on that page, and the answer was "it's more Drupal-ish to use it", which isn't really a very helpful answer when you're trying to work out what is best practice in any given situation.Solferino
@ajreal: I now what is does, i'm just wondering if you need to use module_load_include if you want to include files from within the same module.Assibilate
S
14

The key thing that the Drupal module_load_include() function does over and above the standard PHP require_once is that it references the module's path when locating the file, using drupal_get_path().

If you were to use require_once, you would have to do this bit yourself.

The other thing it does is check that the file exists prior to trying to include it, which is handy for avoiding fatal crashes, but rather pointless if you're going to get one anyway when you try to call the functions you tried to include. This is handy though for allowing you to produce more meaningful errors.

At the end of the day, module_load_include() is really just a little utility function provided by Drupal to make things slightly easier for themselves. If you know where the file is located, and you know it exists there, there's very little need to use the Drupal function; you may just as well use require_once.

Solferino answered 1/9, 2011 at 13:16 Comment(3)
To make the explanation more explicit, your module could be installed in sites/all/modules/, sites/all/modules/contrib/, sites/site.com/modules etc. module_load_include() will know where your module is installed and use the correct path.Tiffanietiffanle
@Berdir: absolutely correct. On the other hand, if you're including it from within another file inside the same module, you only need to know the relative path, so require_once would suffice. module_load_include() would typically be better used when including a module file from outside of that module (ie as needs to be done by the code in the Drupal core) You're quite right though; both have their place.Solferino
@Solferino the relative path is always starting from the initially requested file, which is index.php. To actually include a file from your own module, you'd have to use a trick like dirname(_FILE_) to get the location of your .module file.Tiffanietiffanle
E
2

module_load_include requires Drupal to be loaded fully (Fully Bootstrapped).

syntax: module_load_include($type, $module, $name = NULL);

Eg: module_load_include('inc','module_name','file_name');

if u want to use this function in a global context then use require_once

require_once doesn't need it.

Eg: require_once DRUPAL_ROOT . '/path/file' .

Encephalography answered 2/1, 2014 at 11:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.