2013-05-11 2 views
0

Каркасы как CodeIgniter действительно есть это:Аргументы через метод в контроллере

public function index($arg1, $arg2) { 
    echo $arg1; 
} 

где $ arg1, $ arg2 что-то подобное. index.php/контроллер/индекс/арг1/арг2.

Мне интересно, как это работает за стеной? Код в этих рамках похож на джунгли. Я потерялся.

+1

в codeigniter, вы можете найти его в 'system/core/router.php' – egig

+0

, хотите ли вы реализовать это самостоятельно? – coma

ответ

0

Ну, вам нужно настроить ваш веб-сервер (Apache или так) для выполнения для всех запросов (uri) того же PHP (также известного как front controller).

Затем в вашем переднем контроллере вам необходимо проанализировать uri (http://php.net/manual/es/reserved.variables.server.php) и сделать его совпадающим с одним из правил маршрутизации (например, с помощью регулярного выражения).

Взгляните на https://github.com/symfony/Routing (или прочитайте комментарий Чарли).

В случае index.php/контроллер/индекс/arg1/arg2 вы не нужно настроить веб-сервер (просто получить PATH_INFO):

<?php 

class Controller { 

    public function indexAction($a, $b) { 

     return "$a & $b"; 

    } 
} 

$path = trim($_SERVER['PATH_INFO'], '/'); 
$parts = explode('/', $path); 
$controllerName = ucfirst($parts[0]); 
$actionName = $parts[1] . 'Action'; 

$controller = new $controllerName(); 

echo $controller->$actionName($parts[2], $parts[3]); 

Очевидно этот пример является toooooooo basic. Существует больше вещей, таких как определение маршрута, отражение метода, чтобы получить имена аргументов метода и многое другое, поэтому, пожалуйста, заходите в исходный код с некоторой хорошей структурой (например, Symfony2 !!!!).

Смежные вопросы