Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Как устанавливать и как запускать? #4

Open
denisso opened this issue Aug 6, 2016 · 5 comments
Open

Как устанавливать и как запускать? #4

denisso opened this issue Aug 6, 2016 · 5 comments

Comments

@denisso
Copy link

denisso commented Aug 6, 2016

Привет, Виктор.

Я скачал зип архив, создал новый хост (apache 2.4 и php 5.5.) например trace, распаковывал в корень. запустил composer install в корне, успешно скачались зависимости без ошибок. Если захожу в http://trace/trace/public/ получаю ошибку Controller 'trace' not found.

Если http://trace/trace/templates/index/ то получаем ошибку
Fatal error: Class 'Vtk13\LibXdebugTrace\FileUtil\TraceOutputDir' not found in F:\openserver_\OpenServer\domains\trace\trace\templates\index\index.php on line 6

Класс TraceOutputDir вообще не нашел.

Помоги пожалуйста настроить.

@vtk13
Copy link
Owner

vtk13 commented Aug 7, 2016

Здравствуйте, давно не обновлял уже этот проект. Вы вроде все правильно делаете, кроме того, что скорее всего вы скачали ветку master, а она сломана. Вам нужно скачать tags/1.0. Обновил README.md.

@denisso
Copy link
Author

denisso commented Aug 7, 2016

Снова привет, Виктор.

Я скачал проект по тегу 1.0. точнее клонировал репозиторий. Подключил композитором зависимости.

Сразу из коробки http://traceone/xdebug-trace-viewer/public/ получаем ошибку Not Found.

Посмотрел код. Далее trace своими руками =)

$response = $router->handle(Request::createFromGlobals()); //index.php:10

где $router это class ControllerRouter implements IHandler

//xdebug-trace-viewer\vendor\vtk13\mvc\src\Handlers\ControllerRouter.php

Посмотрел метод ControllerRouter::handle(IRequest $request) появились вопросы. Тут явно что-то зависит от названия директорий, в которую мы копируем проект.

    public function handle(IRequest $request)
    {
        if (strpos($request->getPath(), $this->path) !== 0) {
            return null;
        }
        $params = $this->parsePath($request->getPath());
        $controller = $this->controllerFactory($this->namespace, $params[0]); //ControllerRouter.php line 58
        return $controller->handle($request, $params, $this->path);
    }

Метод ControllerRouter::controllerFactory($namespace, $controller) пытается найти класс Xdebug_trace_viewerController не находит и создает класс по умолчанию TraceController

    protected function controllerFactory($namespace, $controller)
    {
        $className = ($namespace ? $namespace . '\\' : '') . ucfirst($controller) . 'Controller';
        if (class_exists($className)) {
            return new $className();
        } else {
            $className = ($namespace ? $namespace . '\\' : '') . ucfirst($this->defaultController) . 'Controller';
            return new $className();
        }
    }

Функция ontrollerRouter::controllerFactory отрабатывает создает класс TraceController и возвращаемся в метод ControllerRouter::handle, в котором выполняется TraceController::handle ControllerRouter.php line 59

class TraceController extends AbstractController
{
    public function __construct()
    {
        parent::__construct('trace');
    }

class AbstractController implements IHandler{
...
    public function __construct($name)
    {
        $this->name = $name;
    }

xdebug-trace-viewer\vendor\vtk13\mvc\src\Handlers\AbstractController.php

    public function handle(IRequest $request, array $params = array(), $prefix = '')
    {
        $this->request = $request;

        $name = isset($params[0]) ? array_shift($params) : $this->name; // AbstractController.php:line 34 params[0] = Xdebug_trace_viewer
        try {
            if ($name != $this->name) { //тут мы получаем not found, но зачем вообще эта проверка?
                $res = $this->handleError(404, new RouteNotFoundException("Controller {$name} not found"));
                $action = '404';

И в итоге мы сравниваем название папки второй идущей после корневой папке домена со словом trace.

Я попробовал переименовать папку в которую я скопировал проект в trace.

проверка if ($name != $this->name) пройдена управление потоком перешло в else.

AbstractController.php:42

else {
$action = isset($params[0]) ? array_shift($params) : $this->defaultAction; //AbstractController.php:42

тут action стало public потому что http://traceone/trace/public/

                $res = $this->beforeHandle($action, $params); //AbstractController.php:45 
                if ($res === null) {
                    $call = array($this, $action . $request->getMethod());
                    if (is_callable($call)) {
                        $res = call_user_func_array($call, $params);
                    } else {
                        $ex = new RouteNotFoundException("Action {$name}::{$action} not found");
                        $res = $this->handleError(404, $ex);
                    }
                }

В итоге мы пытаемся запустить метод TraceController::publicGet, но такого метода нет, и мы получаем 404.

Я примерно понял, что какой то TraceController:: Get метод должен запуститься, но какой пока не понял. И имя метода зависит от имени от второй папки после домена. Кажется чего-то не хватает.

@denisso
Copy link
Author

denisso commented Aug 7, 2016

Что то заработало если запускать http://traceone/trace/templates/trace/ и в файл \trace\templates\trace\index.php добавить require_once '../../vendor/autoload.php';

и в \trace\templates\trace\index.php:10 поменять:

include 'template/widgets/xdebug-options.php';

на

include '../widgets/xdebug-options.php';

На странице появилась надпись Choose trace file to analyse:
и настройки xdebug

и файлы можно выбрать, но когда на них жмешь получаешь Object not found!.

@denisso
Copy link
Author

denisso commented Aug 7, 2016

Надо кое что доделать, а именно вместо абсолютных путей к файлам использовать относительные.

@denisso
Copy link
Author

denisso commented Aug 7, 2016

Получилось вот что.

trace

Мне кажет тут чего то не хватает. Или это все?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants