Вход Регистрация
Файл: onlinepoisk.wm-scripts.ru/vendor/silex/silex/silex/src/Silex/ControllerCollection.php
Строк: 157
<?php

/*
 * This file is part of the Silex framework.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Silex;

use 
SymfonyComponentRoutingRouteCollection;
use 
SilexController;

/**
 * Builds Silex controllers.
 *
 * It acts as a staging area for routes. You are able to set the route name
 * until flush() is called, at which point all controllers are frozen and
 * converted to a RouteCollection.
 *
 * @author Igor Wiedler <igor@wiedler.ch>
 * @author Fabien Potencier <fabien@symfony.com>
 */
class ControllerCollection
{
    protected 
$controllers = array();
    protected 
$defaultRoute;

    
/**
     * Constructor.
     */
    
public function __construct(Route $defaultRoute)
    {
        
$this->defaultRoute $defaultRoute;
    }

    
/**
     * Maps a pattern to a callable.
     *
     * You can optionally specify HTTP methods that should be matched.
     *
     * @param string $pattern Matched route pattern
     * @param mixed  $to      Callback that returns the response when matched
     *
     * @return Controller
     */
    
public function match($pattern$to)
    {
        
$route = clone $this->defaultRoute;
        
$route->setPattern($pattern);
        
$route->setDefault('_controller'$to);

        
$this->controllers[] = $controller = new Controller($route);

        return 
$controller;
    }

    
/**
     * Maps a GET request to a callable.
     *
     * @param string $pattern Matched route pattern
     * @param mixed  $to      Callback that returns the response when matched
     *
     * @return Controller
     */
    
public function get($pattern$to)
    {
        return 
$this->match($pattern$to)->method('GET');
    }

    
/**
     * Maps a POST request to a callable.
     *
     * @param string $pattern Matched route pattern
     * @param mixed  $to      Callback that returns the response when matched
     *
     * @return Controller
     */
    
public function post($pattern$to)
    {
        return 
$this->match($pattern$to)->method('POST');
    }

    
/**
     * Maps a PUT request to a callable.
     *
     * @param string $pattern Matched route pattern
     * @param mixed  $to      Callback that returns the response when matched
     *
     * @return Controller
     */
    
public function put($pattern$to)
    {
        return 
$this->match($pattern$to)->method('PUT');
    }

    
/**
     * Maps a DELETE request to a callable.
     *
     * @param string $pattern Matched route pattern
     * @param mixed  $to      Callback that returns the response when matched
     *
     * @return Controller
     */
    
public function delete($pattern$to)
    {
        return 
$this->match($pattern$to)->method('DELETE');
    }

    public function 
__call($method$arguments)
    {
        if (!
method_exists($this->defaultRoute$method)) {
            throw new 
BadMethodCallException(sprintf('Method "%s::%s" does not exist.'get_class($this->defaultRoute), $method));
        }

        
call_user_func_array(array($this->defaultRoute$method), $arguments);

        foreach (
$this->controllers as $controller) {
            
call_user_func_array(array($controller$method), $arguments);
        }

        return 
$this;
    }

    
/**
     * Persists and freezes staged controllers.
     *
     * @param string $prefix
     *
     * @return RouteCollection A RouteCollection instance
     */
    
public function flush($prefix '')
    {
        
$routes = new RouteCollection();

        foreach (
$this->controllers as $controller) {
            if (!
$name $controller->getRouteName()) {
                
$name $controller->generateRouteName($prefix);
                while (
$routes->get($name)) {
                    
$name .= '_';
                }
                
$controller->bind($name);
            }
            
$routes->add($name$controller->getRoute());
            
$controller->freeze();
        }

        
$routes->addPrefix($prefix);

        
$this->controllers = array();

        return 
$routes;
    }
}
Онлайн: 0
Реклама