【问题标题】:Displaying a view from a controller using phalcon php使用 phalcon php 从控制器显示视图
【发布时间】:2017-01-01 13:34:08
【问题描述】:

大家新年快乐!

我正在尝试从头开始连接一个小型 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 请求的错误函数。 我不知道我做错了什么,请帮忙

【问题讨论】:

  • /user/create(单条)路线通向哪里,你为什么后来使用/users/create(复数)?
  • 抱歉,这是一个错字,它们都应该是/users/create,这会导致我的views文件夹中的用户文件夹,其中包含create.phtml文件
  • 您希望 AJAX 调用如何从 phtml 文件中获取数据?
  • 对不起,Dainis,我的回答完全不正确。 /user/create 指向UserController 中的createAction,而/users/create 指向我的views 目录中的users 文件夹,其中包含create.phtml 文件。很抱歉造成混乱。
  • 在那种情况下,你想达到什么目的? Ajax 调用应该执行后端 php 操作并返回纯数据。比如,createAction 应该收集请求数据、存储、验证它等等,然后返回 truefalse[id: 1] 或类似的数据供 JS 显示。您不会在 ajax 中生成视图。 Ajax 就像:“嘿,m8,这样做!”它应该回答:“完成”而不是“去看看”

标签: php ajax phalcon


【解决方案1】:

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

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

-app
    -controllers
    -models
    -views
-public

如果你尊重这种结构,你实际上不需要像这样选择你的观点 $this-&gt;view-&gt;pick('/users/create');

您只需将视图目录的路径设置到视图服务中

$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;
});

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

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->response->setJsonContent(["data" => ["Your data"]]);
        $this->response->send();
    }
}

你的 js 函数现在应该会收到一个包含数据对象的 json 响应

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2015-10-13
    相关资源
    最近更新 更多