Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ajax调用phalcon php MVC控制器_Php_Ajax_Angularjs_Model View Controller_Phalcon - Fatal编程技术网

通过ajax调用phalcon php MVC控制器

通过ajax调用phalcon php MVC控制器,php,ajax,angularjs,model-view-controller,phalcon,Php,Ajax,Angularjs,Model View Controller,Phalcon,我正在使用phalcon PHP和AngularJs的简单应用程序。我试图通过AJAX POST请求从angularJS控制器调用我的phalcon PHP控制器 $http.post('/ControllerName/', {params}); 我得到 404在此服务器上找不到请求的URL/ControllerName/ 我认为我的请求被路由到我的公共文件夹,而我的php控制器位于非公共文件夹中 这些是我的.htaccess规则 <IfModule mod_rewrite.c>

我正在使用phalcon PHP和AngularJs的简单应用程序。我试图通过AJAX POST请求从angularJS控制器调用我的phalcon PHP控制器

 $http.post('/ControllerName/', {params});
我得到

404在此服务器上找不到请求的URL/ControllerName/

我认为我的请求被路由到我的公共文件夹,而我的php控制器位于非公共文件夹中

这些是我的.htaccess规则

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule  ^$ public/    [L]
RewriteRule  (.*) public/$1 [L]</IfModule>

重新启动发动机
重写规则^$public/[L]
重写规则(.*)public/$1[L]
在公用文件夹中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$index.php?\u url=/$1[QSA,L]

我做错了什么?

假设您使用的是phalcon的默认工作部署,我建议您检查尾部斜线,有一种手动声音:anchor#处理额外的尾部斜线

您还可以使用自定义脚本测试路由:之前相同的url,锚定#测试路由

。。。或通过监听dispatcher fordispatch:beforeDispatchLoop,您可以深入路由系统,试图找到故障所在。这里有一段代码,您可以在事件函数中看到框架如何猜测控制器和操作名称:

//Possible controller class name
$controllerName = Text::camelize($dispatcher->getControllerName()) . 'Controller';

//Possible method name
$actionName = $dispatcher->getActionName() . 'Action';

。。。然后,它们应该存在,以便成功路由,顺便说一句,参考示例代码

好的,我的问题是我认为的重写机制。 首先,在httpd.conf文件中,我必须:

  • 将相关目录中的“AllowOverride None”更改为“AllowOverride All”
  • 我的“mod_rewrite”被禁用,因此我不得不取消对该行的注释:# LoadModule rewrite_module modules/mod_rewrite.so“