Alto Router не работает для контроллеров

Я пытаюсь передать имя и метод контроллера методу карты Alto Router, но он не работает

в index.php у меня есть следующий код

    <?php

require_once 'vendor/autoload.php';

use Route\AltoRouter;
use App\Controllers\HomeController;

$router = new AltoRouter();

$router->setBasePath('demo/');
$router->map('GET','/', 'HomeController#index');
$router->map('GET', '/php', function(){

echo 'It is working';
});
$match = $router->match();

// call closure or throw 404 status
if( $match && is_callable( $match['target'] ) ) {
call_user_func_array( $match['target'], $match['params'] );
} else {

echo "<pre>";
print_r($match);
}

контроллер

class HomeController extends Controller{

public function __construct()
{
echo "hello, i am a page.";
}

public function index(){echo "hello, i am a page.";
}

если я получу доступ HTTP: // локальный / демо / PHP тогда он работает, но не URL контроллера, а его ошибка броска

Array
(
[target] => HomeController#index
[params] => Array
(
)

[name] =>
)

Кто-нибудь может мне помочь, как это исправить?
а также есть ли способ require_once 'vendor/autoload.php'; только один раз вместо добавления на всех страницах

1

Решение

Как вы загружаете HomeController?

Возьми этот пример

$router = new AltoRouter();
$router->setBasePath('/AltoRouter');

$router->map('GET','/', 'home_controller#index', 'home');
$router->map('GET','/content/[:parent]/?[:child]?', 'content_controller#display_item', 'content');

$match = $router->match();

// not sure if code after this comment  is the best way to handle matched routes
list( $controller, $action ) = explode( '#', $match['target'] );

if ( is_callable(array($controller, $action)) ) {

$obj = new $controller();
call_user_func_array(array($obj,$action), array($match['params']));

} else if ($match['target']==''){
echo 'Error: no route was matched';

} else {
echo 'Error: can not call '.$controller.'#'.$action;

}

// Can be placed in a different directory but needs to be loaded
class home_controller {
public function index() {
echo 'hi from home';
}
}

Это работает, остальные вы должны изменить его в соответствии со структурой вашего сайта

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector