Implementing Namespaces In Yii Leads To Out Of Memory.

I’m new to YII and I’ve been working on a ecommerce store.

I followed the guide here: http://www.yiiframework.com/doc/guide/1.1/en/basics.namespace when setting up namespaces in Yii. My application is now successfully executing the controller of a sub module. So I have…


protected

   /modules

       /store

           /modules

               /mySubModule

                    /controllers

                         /TemplateController.php

The right URL will successfully execute TemplateController, so I know things are setup correctly. However the "$this->render()" throws a "Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 65488 bytes) in C:\Users\[user]\htdocs\myapp\yii-1.1.12\base\CModule.php on line 530" error.


<?php


namespace mySubModuleControllers;

use Yii;


class ContainerController extends \mySubModuleComponents\mySubModuleController {

	public function actionIndex() {

        $this->actionChooseContainer();

	}


    public function actionChoose () {

        $this->includeCss('chooseContainer');


        $this->render('choose', array(

            'containers' => \mySubModuleModels\Container::model()->findAll() //returns 5 rows

        ));

    }

}

Here’s my view…


<?php

/* @var $this ContainerController */

?>

<h3>Choose your container</h3>

<ul id='containerList' class='clearfix'>

<?php

foreach ($containers as $container) {

    echo "

<li>

    <a href='".$this->createUrl('/store/instaLabel/template/upload/container/'.$container->id.'/')."'>

        <img src='".Yii::app()->request->baseUrl."/images/containers/".$container->id.".png' alt='".$container->name."'/>

        <label>".$container->name."</label>

        <table class='stats'>

            <tr>

                <td class='stat'>Label size:</td>

                <td class='value'>21\" x 53\"</td>

            </tr>

        </table>

    </a>

</li>";

}

?>

</ul>

<?php Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/themes/'.Yii::app()->theme->name.'/chooseContainer.css'); ?>

Here’s what I’ve done…

  • Commented out the call to $this->view(), this made the error go away

  • Commented out the contents of the view, didn’t fix it

  • Commented out the “states” parameter (which only pulls 51 rows) being passed to the view, didn’t fix it

  • Increased memory allowance for this script to 1GB, didn’t fix it, still maxed out

I’m at a total loss as to what I should do to help me figure out what the cause could be. I’m hoping someone more experienced with YII can provide some assistance.

This type errors are usually related to big variables, so you should try commenting some variables the are being to the view…

Also it would be useful to have the "chowckout" view code, in order to check it out if maybe something is not being correctly implemented.

Best regards.

I’m going to play with it more when I get to work today. I did verify yesterday that this isn’t just happening on this checkout page, but also on another page that is VERY simple.

Update: I’ve updated my original post with a view that is simpler than the checkout view. There’s nothing extravagant here.

One of our devs here must’ve changed something in the LAMP stack we run on Windows. I know he added xDebug, but not sure if he did anything else.

I’m now receiving the error:


Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\Users\bkuhl\htdocs\instaLabel\yii-1.1.12\base\CModule.php on line 272

Call Stack

#	Time	Memory	Function	Location

1	0.0007	140800	{main}( )	..\index.php:0

2	0.0312	1144184	CApplication->run( )	..\index.php:15

3	0.0313	1144280	CWebApplication->processRequest( )	..\CApplication.php:162

4	0.0380	1269208	CWebApplication->runController( )	..\CWebApplication.php:142

5	0.0547	1754056	CController->run( )	..\CWebApplication.php:283

6	0.0557	1782272	CController->runActionWithFilters( )	..\CController.php:266

7	0.0557	1782328	CController->runAction( )	..\CController.php:287

8	0.0557	1782400	CInlineAction->runWithParams( )	..\CController.php:309

9	0.0559	1782776	InstaLabelControllers\ContainerController->actionChoose( )	..\CInlineAction.php:50

10	0.0559	1782992	CController->render( )	..\ContainerController.php:19

11	0.0605	1830048	CBaseController->renderFile( )	..\CController.php:785

12	0.0606	1830112	CBaseController->renderInternal( )	..\CBaseController.php:96

13	0.0608	1849672	require( 'C:\Users\bkuhl\htdocs\myapp\application\themes\mytheme\views\layouts\column1.php' )	..\CBaseController.php:127

14	0.0655	1986680	CBaseController->widget( )	..\column1.php:11

15	0.0655	1986768	CBaseController->createWidget( )	..\CBaseController.php:173

16	0.0656	1986768	CWidgetFactory->createWidget( )	..\CBaseController.php:147

17	0.0656	1986800	YiiBase::import( )	..\CWidgetFactory.php:147

18	0.0658	1986920	YiiBase::getPathOfAlias( )	..\YiiBase.php:309

19	0.0661	1987072	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

20	0.0664	1987160	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

21	0.0666	1987248	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

22	0.0669	1987336	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

23	0.0671	1987424	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

24	0.0674	1987512	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

25	0.0677	1987600	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

26	0.0679	1987688	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

27	0.0682	1987776	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

28	0.0685	1987864	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

29	0.0687	1987952	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

30	0.0690	1988040	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

31	0.0695	1988128	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

32	0.0697	1988216	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

33	0.0700	1988304	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

34	0.0703	1988392	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

35	0.0705	1988480	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

36	0.0708	1988568	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

37	0.0711	1988656	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

38	0.0713	1988744	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

39	0.0716	1988832	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

40	0.0719	1988920	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

41	0.0721	1989008	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

42	0.0724	1989096	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

43	0.0726	1989184	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

44	0.0729	1989272	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

45	0.0732	1989360	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

46	0.0734	1989448	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

47	0.0737	1989536	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

48	0.0740	1989624	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

49	0.0742	1989712	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

50	0.0745	1989800	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

51	0.0748	1989888	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

52	0.0750	1989976	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

53	0.0753	1990064	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

54	0.0756	1990152	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

55	0.0758	1990240	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

56	0.0761	1990328	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

57	0.0766	1990416	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

58	0.0768	1990504	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

59	0.0771	1990592	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

60	0.0774	1990680	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

61	0.0776	1990768	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

62	0.0779	1990856	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

63	0.0781	1990944	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

64	0.0784	1991032	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

65	0.0787	1991120	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

66	0.0789	1991208	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

67	0.0792	1991296	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

68	0.0795	1991384	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

69	0.0797	1991472	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

70	0.0800	1991560	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

71	0.0802	1991648	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

72	0.0805	1991736	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

73	0.0808	1991824	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

74	0.0811	1991912	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

75	0.0814	1992000	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

76	0.0820	1992088	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

77	0.0824	1992176	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

78	0.0827	1992264	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

79	0.0830	1992352	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

80	0.0833	1992440	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

81	0.0836	1992528	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

82	0.0838	1992616	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

83	0.0841	1992704	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

84	0.0843	1992792	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

85	0.0846	1992880	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

86	0.0849	1992968	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

87	0.0851	1993056	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

88	0.0854	1993144	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

89	0.0856	1993232	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

90	0.0859	1993320	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

91	0.0862	1993408	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

92	0.0864	1993496	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

93	0.0867	2059080	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

94	0.0870	2059168	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

95	0.0872	2059256	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

96	0.0884	2059344	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

97	0.0888	2059432	YiiBase::getPathOfAlias( )	..\YiiBase.php:366

98	0.0888	2059552	CWebApplication->findModule( )	..\YiiBase.php:365

99	0.0889	2059552	CModule->getModule( )	..\CWebApplication.php:530

Performing further research, it seems as though the error is triggered by


    $this->widget('myModule.extensions.widgets.wizardSteps', array(

        'id' => 'checkoutSteps',

        'steps' => $this->checkoutSteps,

        'selectedStep' => $this->selectedStep

    ));

Solution: As it turns out, when in a module’s configuration you specify your own alias’ it doesn’t create an alias for the module automatically.

For example:


        'modules'=>array(

            'store', //Yii automatically creates a "store" path alias, so "store.extensions" will exist and load something.


        'modules'=>array(

            'store' => array(

                'class' => '\Store\StoreModule',

                'aliases' => array(

                    'store' => 'protected/modules/store', //without this, I couldn't use the "store.extensions" path alias

                    'StoreComponents' => 'protected/modules/store/components',

                    'StoreControllers' => 'protected/modules/store/controllers',

                    'StoreActiveRecordModels' => 'protected/modules/store/models/activeRecord',

                    'StoreFormModels' => 'protected/modules/store/models/forms'

                ),