CodeIgniter Forums
View will not display but will execute if no index() in controller - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: Archived Discussions (https://forum.codeigniter.com/forumdisplay.php?fid=20)
+--- Forum: Archived General Discussion (https://forum.codeigniter.com/forumdisplay.php?fid=21)
+--- Thread: View will not display but will execute if no index() in controller (/showthread.php?tid=26280)



View will not display but will execute if no index() in controller - El Forum - 01-10-2010

[eluser]Sixer[/eluser]
Hi,

I've just found this out:

If there is no index() function in a controller, even though it will never be called or there is no need to ever call it, whatever view is loaded will execute PHP but will not display anything.

Reproduce:

- Make a controller
- Make it accessible by routes if necessary
- Do not give it an index()
- Do give it some other method that you call from the controller's constructor
- In that method, do a $this->load->view('yourviewfile');
- In yourviewfile.php , put some PHP like header("Content-type: text/xml");
- Put any kind of content you like after that.

What happens?

- The controller will fire
- The constructor will call the method
- The view in the method will be loaded
- The PHP in the view will be executed (browser sees XML header)
but...
- The content in the view will never show up in the browser, even in Firebug or whatever debugger you use

Now, I can understand that it might have been illogical on my part not to have an index() in a controller. I was choosing what function in the controller to call based on a $_POST routine. I guess I should've put that in the index() instead of the controller's constructor.

But I do think its very illogical for the code in the controller to able to call a function, which in turn does a load->view, of which the PHP does execute but the markup or text does not show.

Agreed? Is this a bug?


Cheers,


Sixer


View will not display but will execute if no index() in controller - El Forum - 01-10-2010

[eluser]Sean Gates[/eluser]
So, what you're saying is that the controller's someOther() method, although never called, and if index() is missing, still generates output?

-- Sean


View will not display but will execute if no index() in controller - El Forum - 01-11-2010

[eluser]Sixer[/eluser]
No, I am calling the method that loads the view, from the constructor.

The view's output doesn't show but my header("Content-type: text/xml"); in that view file does work, as the browser (Safari and Firefox) tries to interpret XML.


View will not display but will execute if no index() in controller - El Forum - 01-11-2010

[eluser]Sean Gates[/eluser]
Well, yeah. If you're calling that view it will run and should display.

You actually do want the output to show, correct?

(With no code examples it's hard to visualize).