createController + action = смерть апачу

Здравствуйте!

С Yii познакомился недавно, поэтому сильно не бейте :)

Сейчас делаю Ajax-корзину, вид которой может меняться: если в ней 1 товар, то выводится этот товар, если 2 - то выводится уже количество товаров и их цена (ну и т.д.). В этом случае нужно полностью обновлять корзину.

Как лучше реализовать такое?

Интуиция подсказала сделать BasketController и выводить корзину в layout через него. Сделал простейший вариант:

controllers/BasketController.php:




    // ...

    public function actionShow()

    {

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

            'orderUri'=>'http://',

            'clearUri'=>'http://',

            'count'=>0,

            'cost'=>0,

        ));

    }

    // ...



views/basket/show.php:




    <%= Yii::t('basket', 'Count') %>: <em><%= $count %></em>

    <%= Yii::t('basket', 'Cost') %>: <em><%= $cost %></em>

    <%= CHtml::link(Yii::t('basket', 'Clear'), $clearUri) %>

    <%= CHtml::link(Yii::t('basket', 'Order'), $orderUri) %>



views/layout/main.php:




<!-- ... -->

<div id="basket">

    <% 

        $basket = Yii::app()->createController('basket/show');

        $basket[0]->actionShow();

    %>

</div>

<!-- ... -->



Открываю любую страницу и apache отправляется восвояси после


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

(controllers/BasketController.php)

Подскажите пожалуйста, что я делаю неправильно? А может быть, такую функциональность можно реализовать как-то лучше?

Заранее спасибо :)

Копай в сторону виджетов.

http://www.yiiframework.com/doc/guide/basics.view#widget

http://www.yiiframework.com/doc/guide/extension.create#widget

Собственно, на виджетах сначало все было сделано.

Однако потребовалось сделать “подгрузку” корзины через AJAH. Можно добавить экшн в SiteController для таких моментов, согласен (и возьму на заметку :) )

Но не хочется излишне нагружать SiteController, там у меня, увы, и так бардак. Интересно, почему апач падает, вроде бы ничего криминального

rosko

Спасибо, решил, что так и сделаю. Однако хочется все равно узнать, почему падает апач :)

Проблема была в


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

Надо


$this->renderPartial('show', array(

Причина в том, что render выводит контент вместе с макетом (layout), а renderPartial просто контент. Т.е. в моем случае получалось банальное зацикливание.

Надеюсь, кому-нибудь поможет :)

так сказать side note - профессиональный пхп-код не пишется в асп-тегах :)

+1

http://www.yiiframework.com/doc/api/CPradoViewRenderer

Довольно удобно ;)

Добавлю, что каждый раз писать <?php или <?php echo - довольно нудное занятие

давно отменили <? и <?= ?




<?xml version="1.0"?>

<peace>

   <friendship>

      <bubblegum>

      </bubblegum>

   </friendship>

</peace>



PS: Пора прекращать оффтоп

А в чем удобство собственно? в том что скрипт не будет крос-серверный и при переносе на другой сервер (хост) где поддержка асп=тегов в пхп отрублена - будите весь код править? мне кажется глупо.

И что? А если аллов_асп_тегс на хосте вырублен?

или yii типа в роле шаблонизатора меняет сам "<%" на "<?" ?

На домашнем компьютере:

Все замечательно