2017-01-01 7 views
0

새해 복 많이 받으세요!phalcon php를 사용하여 컨트롤러에서 뷰 표시

저는 처음부터 작은 팔콘 프로젝트를 연결하려고하는데 뷰를 표시하는 데 문제가 있습니다. 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 텍스트는 아약스 요청의 오차 함수에 반환됩니다. 내가 잘못하고있는 것을 나에게 말하지 말아라.

+0

어디'/ 사용자/create'을한다 (단일) 경로가 이어지고'/ users/create' (복수형)를 사용하는 이유는 무엇입니까? – Peon

+0

죄송합니다. 오타 였기 때문에 모두'/ users/create'이어야하고''create.phtml' 파일이 들어있는'views' 폴더의 users 폴더로 연결됩니다. – 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 응답을 받으려면 당신은 지금의 데이터 객체와 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 기능과 같아야합니다, 첫 번째를 보낼 필요