Как перенаправить на индекс с помощью приложения Phalcon php Micro и пользовательской маршрутизации

Я создаю Ajax-управляемое веб-приложение с использованием Php и платформы Phalcon.

Когда пользователь заходит на сайт, его запрос будет обработан в моем методе pageNotFound, который будет отображать index.php представление, и это представление вызовет мой сервер, добавив Page префикс к текущему URL для загрузки HTML в div.

Так www.mywebsite.com/home позвоню на мой сервер www.mywebsite.com/Page/Home который будет отображать HTML в DIV.

Я хочу перенаправить пользователя на домашнюю страницу, если он пытается получить доступ к Page URL-адрес непосредственно с его URL-адреса в браузере.

Но когда я пытаюсь перенаправить его, URL становится: ww.mywebsite.com/public/index/index

Кто-то знает, почему Фалькон его так делает? И что может быть возможным решением моей проблемы?

Единственный способ, которым я смог сделать то, что хотел, с помощью следующего кода:

header("location:/");

Вот мой оригинальный код.

<?php

try {

    //Register an autoloader
    $loader = new \Phalcon\Loader();
    $loader->registerDirs(
        array(
            '../app/controllers/',
            '../app/models/'
            )
        )->register();    

    //Create a DI
    $di = new Phalcon\DI\FactoryDefault();
    $app = new \Phalcon\Mvc\Micro();

    $di->set('view', function() {

        $view = new Phalcon\Mvc\View\Simple();

        $view->setViewsDir('../app/views/');

        return $view;

    }, true);

    $app->setDI($di);

    $app->map('/', function () use ($app) { 
        echo $app['view']->render("index/index");
    });

    $app->map('/Page/Home', function () use ($app) {  
        if ($app->request->isAjax()) {
            echo $app['view']->render("page/Home");
        }      
        else{
            //It means that the user is trying to access the page manually in the url input
            //I would like to redirect him to my index page / page not found.
            //But when I try to do it redirect me to the following url
            // http://localhost/public/index/index

            $app->response->redirect("index/index")->sendHeaders();
        }
    });

    $app->notFound(function () use ($app) {          
        //Ajax "Page" request that is not found
        if ($app->request->isAjax() && $app->request->isGet()) {
            echo $app['view']->render("page/pageNotFound");
        }
        //Ajax "API" request that is not found
        elseif ($app->request->isAjax() && $app->request->isPost()) {
            $app->response->setStatusCode(400, "Bad Request");
            $app->response->send();
        }
        //We render the index page, which will run the ajax call that will surely check 
        // if it's a real Page not found error.
        else{
            echo $app['view']->render("index/index");
        }
    });

    $app->handle();

} catch(\Phalcon\Exception $e) {
   echo "PhalconException: ", $e->getMessage();
}

1 ответ

Решение
//Setup a base URI so that all generated URI
$di->set('url', function () use ($di, $config) {
    $url = new \Phalcon\Mvc\Url();
    $dispatcher = $di->getShared('dispatcher');
    $url->setBaseUri($config->url->baseUrl);
    return $url;
});

после этого вы можете использовать URL-сервис для создания URL

Другие вопросы по тегам