<?php
/**
 * File containing the ezcMvcFatalErrorLoopException class.
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 * @package MvcTools
 * @version //autogentag//
 * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
 */

/**
 * This exception is thrown when a fatal error request generates another fatal
 * error request.
 *
 * @package MvcTools
 * @version //autogentag//
 */
class ezcMvcFatalErrorLoopException extends ezcMvcToolsException
{
    /**
     * Constructs an ezcMvcFatalErrorLoopException
     *
     * @param ezcMvcRequest $request
     */
    public function __construct( ezcMvcRequest $request )
    {
        $id = "\"{$request->host}\", \"{$request->uri}\" ({$request->requestId})";
        parent::__construct( "The request {$id} results in an infinite fatal error loop." );
    }
}
?>
