使用phalcon php从控制器显示视图

时间:2017-01-01 13:34:09

标签: php ajax phalcon

新年快乐!

我试图从头开始连接一个小的phalcon项目,但是我在显示视图时遇到了问题。我能够使用来自我的js文件的ajax请求来调用控制器动作

$('#create_user').click(function () {
    $.ajax({
        url: "/user/create",
        dataType: "json",
        success: function (resp) {
            console.log('successfully getting create page: ' + resp);
        },
        error: function (x, status, error) {
            console.log(x.responseText);
            console.log(error);
        },
        complete: function () {
        }
    });
});

我通过在操作中设置断点来确认。

<?php

use Phalcon\Mvc\Controller;

class UserController extends Controller
{
    public function indexAction()
    {

    }

    public function createAction()
    {
        $this->assets
            ->addJs('js/jquery.js')
            ->addJs('js/user.js');

        $this->view->pick('/users/create');
    }
}

然而,视图似乎没有被选中,并且当前视图的html文本被返回到ajax请求的错误函数。 我不知道我做错了什么,请帮忙

1 个答案:

答案 0 :(得分:0)

正确的做法应该是使用phalcon mvc结构。

您的项目目录应如下所示(基本示例):

Java

如果你尊重这种结构,你实际上不需要像这样选择你的观点 -app -controllers -models -views -public

您只需将views目录的路径设置为视图服务

$this->view->pick('/users/create');

如果你想收到一个json响应,你必须先发送一个,所以 你的控制器应该是这样的

$di->setShared('view', function () use ($config, $di) {

    $view = new View();
    $view->setViewsDir("path/to/your/views");
    $view->setLayoutsDir("path/to/your/layuts");

    $view->registerEngines(array(
        '.volt' => function ($view, $di) use ($config) {

            $volt = new VoltEngine($view, $di);

            $volt->setOptions(array(
                'stat' => true,
                'compileAlways' => true
            ));

            return $volt;
        },
        '.phtml' => 'Phalcon\Mvc\View\Engine\Php'
    ));

    return $view;
});

你的js函数现在应该收到一个带有数据对象的json响应