2017-01-01 26 views
0

新年快樂的傢伙!使用phalcon顯示控制器的視圖php

我想從頭開始連接一個小型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請求的誤差函數。 我不知道我做錯了什麼,請幫忙

+0

哪裏了'/用戶/ create' (單個)路徑導致以及爲什麼後來使用'/ users/create'(複數)? – Peon

+0

道歉,這是一個錯字,他們都應該'/用戶/創建',並導致我的'views'文件夾,其中包含'create.phtml'文件的用戶文件夾 – user3010617

+0

你如何期待AJAX​​調用從「phtml」文件獲取數據? – Peon

回答

0

這樣做的正確方法應該是使用phalcon mvc結構。

項目目錄應該是這樣的(基本的例子):

-app 
    -controllers 
    -models 
    -views 
-public 

如果你尊重這個結構,你其實並不需要選擇你的意見是這樣 $this->view->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響應

相關問題