[TYPO3-mvc] Tx_Extbase_MVC_Exception_InfiniteLoop

Mark Kuiphuis spam at markyourweb.com
Thu Dec 29 05:23:08 CET 2011


Hi all,

Some people have already written about this in the newsgroup before, but whatever I 
do, I cannot get rid of the InfiniteLoop problem.

I am building a small extension where people can select one travel brochure 
($program) at a time and then order that brochure. But whatever I do, I cannot get 
the order form to submit.

It happens with TYPO3 4.5.10 (Extbase: 1.3.1-devel) and also with 4.6.2 (Extbase 1.4.1)

<f:flashMessages /> also occasionally outputs over a 100 error messages like:

An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->createAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()
An error occurred while trying to call 
Tx_TravelPrograms_Controller_OrderController->newAction()

This happens after just clearing the cache and going through the process of ordering 
a travel brochure.

My controller looks like this:

<?php
	class Tx_TravelPrograms_Controller_OrderController extends 
Tx_Extbase_MVC_Controller_ActionController {

		/*
		 * The referral Repository
		 */
		public $referralRepository;
		
		/*
		 * The orderRepository
		 */
		public $orderRepository;

		/*
		 * Initialises the repositories
		 */
		public function initializeAction() {
			$this->referralRepository = 
t3lib_div::makeInstance('Tx_TravelPrograms_Domain_Repository_ReferralRepository');
			$this->orderRepository = 
t3lib_div::makeInstance('Tx_TravelPrograms_Domain_Repository_OrderRepository');
		}
		
		/*
		 * Displays a form for creating a new order
		 *
		 * @param Tx_TravelPrograms_Domain_Model_Program $program The selected program
		 * @param Tx_TravelPrograms_Domain_Model_Order $newOrder The new order object
		 * @dontvalidate $newOrder
		 * @return string An HTML form for creating a new order
		 */
		public function newAction(Tx_TravelPrograms_Domain_Model_Program $program, 
Tx_TravelPrograms_Domain_Model_Order $newOrder = NULL) {

			$referrals = $this->referralRepository->findAllReferrals();

			$this->view->assign('program', $program);
			$this->view->assign('newOrder', $newOrder);
			$this->view->assign('referrals', $referrals);
		}

		/*
		 * @param Tx_TravelPrograms_Domain_Model_Program $program The selected program
		 * @param Tx_TravelPrograms_Domain_Model_Order $newOrder A fresh newOrder object 
which has not been added to the repository yet
		 * @return void
		 */
		public function createAction(Tx_TravelPrograms_Domain_Model_Program $program, 
Tx_TravelPrograms_Domain_Model_Order $newOrder) {
			$this->orderRepository->add($newOrder);
			$this->redirect('show');
		}

		/*
		 * Just a comment...
		 */
		public function showAction() {
			echo "ShowAction ---<br/>";
		}
	}
?>

The @dontvalidate $newOrder is there, but I keep on getting this 101 infinite loop error

The fluid form looks like this:

<f:flashMessages />

	<f:form action="create" name="newOrder" object="{newOrder}" noCacheHash="true">
		<div>
			<f:form.hidden property="program" value="{program.uid}" />
			<f:form.hidden property="price" value="{program.price}" />
		</div>
		<div class="flabel">
			<label for="name"><f:translate key="name" /></label>
		</div>
		<div class="field"><f:form.textbox property="name" size="50" /></div>
		
		<div class="clear"></div>

		<div class="flabel">
			<label for="address"><f:translate key="address" /></label>
		</div>
		<div class="field"><f:form.textbox property="address" size="50" /></div>

		<div class="clear"></div>
		
		<div class="flabel">
			<label for="postcode"><f:translate key="postcode" /></label>
		</div>
		<div class="field"><f:form.textbox property="postcode" size="10" /></div>

		<div class="clear"></div>
		
		<div class="flabel">
			<label for="city"><f:translate key="city" /></label>
		</div>
		<div class="field"><f:form.textbox property="city" size="50" /></div>

		<div class="clear"></div>
		
		<div class="flabel">
			<label for="email"><f:translate key="email" /></label>
		</div>
		<div class="field"><f:form.textbox property="email" size="50" /></div>

		<div class="clear"></div>
		
		<!-- div class="flabel">
			<label for="newsletter"><f:translate key="newsletter" /></label>
		</div>
		<div class="field"><f:form.checkbox property="newsletter" value="0" /> <f:translate 
key="newsletter_info" /></div -->

		<div class="clear"></div>
		
		<div class="flabel">
			<label for="referral"><f:translate key="referral" /></label>
		</div>
		<div class="field"><f:form.select property="referral" options="{referrals}" 
optionValueField="uid" optionLabelField="title" /></div>

		<div class="clear"></div>

		<fieldset class="payment-methods">
			<legend><f:translate key="paymentTypes" /></legend>
			<div class="field">
				<f:form.radio class="radio" property="paymentType" value="1" 
checked="{payment.paymentType} == 1" /> <f:translate key="paymentType_Ideal" /><br/>
				<f:form.radio class="radio" property="paymentType" value="2" 
checked="{payment.paymentType} == 2" /> <f:translate key="paymentType_BankTransfer" 
/><br/>
			</div>
		</fieldset>
		
		<div class="clear"></div>
		
		<!-- div class="flabel"></div>
		<div class="field">
			<div style="float: left; margin-right: 5px;"><f:form.checkbox property="terms" 
value="1" /></div> <label for="terms-conditions"><f:translate key="terms-conditions" 
/></label>
		</div>
		<div class="field"><f:translate key="terms_info" /></div -->
		
		<div class="clear"></div>

		<f:form.submit class="submit" value="{f:translate(key: 'submit_order')}" />
	</f:form>

And the model:

<?php
	class Tx_TravelPrograms_Domain_Model_Order extends 
Tx_Extbase_DomainObject_AbstractEntity {
		/**
		 * @var int
		 */
		protected $program = 0;

		/**
		 * @var double2
		 */
		protected $price = 0.00;
		
		/**
		 * @var string
		 * @validate StringLength(maximum=5)
		 */
		protected $name = '';
		
		/**
		 * @var string
		 */
		protected $address = '';
		
		/**
		 * @var string
		 */
		protected $postcode = '';
		
		/**
		 * @var string
		 */
		protected $city = '';
		
		/**
		 * @var string
		 */
		protected $email = '';
		
		/**
		 * @var int
		 */
		//protected $newsletter = 0;
		
		/**
		 * @var int
		 */
		protected $paymentType = '';
		
		/**
		 * @var int
		 */
		protected $referral = 0;
		
		/**
		 * @var string
		 */
		protected $transactionId = '';
		
		public function __construct($program = 0, $price = 0.00, $name = '', $address = '', 
$postcode = '', $city = '', $email = '', $paymentType = '', $referral = '', 
$transactionId = '') {

			$this->program		= $this->setProgram($program);
			$this->price			= $this->setPrice($price);
			$this->name			= $this->setName($name);
			$this->address			= $this->setAddress($address);
			$this->postcode		= $this->setPostcode($postcode);
			$this->city			= $this->setCity($city);
			$this->email			= $this->setEmail($email);
			//$this->newsletter		= $this->setNewsletter($newsletter);
			$this->paymentType	= $this->setPaymentType($paymentType);
			$this->referral			= $this->setReferral($referral);
			$this->transactionId		= $this->setTransactionId($transactionId);
		}
		
		public function setProgram($program) {
			$this->program = (int)$program;
		}
		
		public function getProgram() {
			return $this->program;
		}
		
		public function setPrice($price) {
			$this->price = (double)$price;
		}
		
		public function getPrice() {
			return $this->price;
		}
		
		public function setName($name) {
			$this->name = (string)$name;
		}
		
		public function getName() {
			return $this->name;
		}
		
		public function setAddress($address) {
			$this->address = (string)$address;
		}
		
		public function getAddress() {
			return $this->address;
		}
		
		public function setPostcode($postcode) {
			$this->postcode = (string)$postcode;
		}
		
		public function getPostcode() {
			return $this->postcode;
		}
		
		public function setCity($city) {
			$this->city = (string)$city;
		}
		
		public function getCity() {
			return $this->city;
		}
		
		public function setEmail($email) {
			$this->email = (string)$email;
		}
		
		public function getEmail() {
			return $this->email;
		}
		
//		public function setNewsletter($newsletter) {
//			$this->newsletter = (int)$newsletter;
//		}
//		
//		public function getNewsletter() {
//			return $this->newsletter;
//		}
		
		public function setPaymentType($paymentType) {
			$this->name = (int)$paymentType;
		}
		
		public function getPaymentType() {
			return $this->paymentType;
		}
		
		public function setReferral($referral) {
			$this->referral = (int)$referral;
		}
		
		public function getReferral() {
			return $this->referral;
		}
		
		public function setTransactionId($transactionId) {
			$this->transactionId = (int)$transactionId;
		}
		
		public function getTransactionId() {
			return $this->transactionId;
		}
	}
?>

I temporarily disabled the newsletter property as this is generating another error 
that no value could be found for key formObject...(don't know the exact error message)...

Any help is kindly appreciated :-)

Regards, Mark


More information about the TYPO3-project-typo3v4mvc mailing list