通过 ajax 调用 phalcon php MVC 控制器

calling a phalcon php MVC controller via ajax

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

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

我得到

404 The requested URL /ControllerName/ was not found on this server

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

这些是我拥有的 .htaccess 规则

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

在 public 文件夹中:

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

我做错了什么?

假设您使用的是 phalcon 的默认和工作部署,我建议您检查尾部斜杠,有一个手动语音:http://docs.phalconphp.com/en/latest/reference/routing.html anchor #dealing-with -额外的尾部斜线

您还可以使用自定义脚本测试您的路线:与之前相同 url,锚点 #testing-your-routes

... 或者.. 你可以把你的鼻子放在路由系统中,通过监听 dispatch:beforeDispatchLoop 的调度程序来尝试找到失败的地方,有一个这里有一段代码 http://docs.phalconphp.com/en/latest/reference/dispatching.html#inject-model-instances,您可以在事件函数中看到框架如何猜测控制器和操作名称:

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

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

...它们应该存在才能成功路由,顺便说一下,请参考示例代码

好的,正如我所想,我的问题出在重写机制上。 首先,在 httpd.conf 文件中我必须:

  1. 在相关目录中将"AllowOverride None"更改为"AllowOverride All"。
  2. 我的 "mod_rewrite" 被禁用了,所以我不得不取消对以下行的注释:“# LoadModule rewrite_module modules/mod_rewrite.so"