不能在 Phalcon php 中调用除 indexAction 以外的 indexController 的动作

Posted

技术标签:

【中文标题】不能在 Phalcon php 中调用除 indexAction 以外的 indexController 的动作【英文标题】:Can't call indexController's actions other than indexAction in Phalcon php 【发布时间】:2014-05-26 05:08:17 【问题描述】:

我的 xampp/htdocs 目录中有一个名为 phalcon 的简单项目,我将 apache 配置为指向该文件夹,以便我可以在浏览器中访问 phalcon/。

当我尝试打开非索引(默认)的索引控制器视图时,会出现问题。 例如,我在索引控制器中有一些动作,在视图/索引中有一些.phtml。 如果我去 phalcon/index/some 我没有从 some.phtml 输出到页面的文本。 这可能是因为它认为好像我不想打开 IndexController->indexAction 并将一些作为参数传递。

对于为解决此问题提供的任何帮助,我们将不胜感激。 附言项目骨架复制自https://github.com/phalcon/skeleton-single。

索引控制器:

<?php

class IndexController extends ControllerBase


  public function indexAction($action = null)
  

  
  public function someAction () 
      exit('test');
  


views/index/index.phtml:

<?php echo $this->getContent(); ?>

views/index/some.phtml:

Some Action

views/index.phtml

<!DOCTYPE html>
<html>
<head>
  <title>Phalcon PHP Framework</title>
</head>
<body>
  <?php echo $this->getContent(); ?>
</body>
</html>

【问题讨论】:

您的安装是否启用了 mod_rewrite? 视图处理发生在控制器动作执行之后。您是否尝试删除该exit 电话? 控制器的动作根本没有被执行。无论我在控制器中使用 exit() 函数做什么,都不会被调用。因此视图也不会被调用。这就是问题所在。 看看这是否不相关***.com/questions/24049941/… 我已经克隆了 git 存储库,复制了您的代码,排除了 exit() 和访问过的 http://localhost/skeleton-single/index/some,我发现它工作得很好。不知道..这可能是服务器配置的某个地方:\ 【参考方案1】:

我不确定我是否完全理解您的问题,但我认为您的操作必须与视图中同名的文件夹/文件匹配才能发挥作用。

另外,我看到你在那里扩展了“ControllerBase”,然后你在控制器文件中有一个名为“ControllerBase”的文件:

class ControllerBase extends \Phalcon\Mvc\Controller 

您可以检查的另一件事是您的公共文件夹中的 index.php。大多数情况下,这些事情的发生是因为 DI 丢失或输入错误。

【讨论】:

【参考方案2】:

我认为,您应该检查您的 .htaccess 文件以了解以下规则:

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

这将启用所有其他控制器操作,而不仅仅是索引。 要检查问题是否在此规则中,您可以通过 url /index.php?_url=/index/some 访问您的控制器方法 - 如果它将被加载,请更改您的 .htaccess,如示例下面

【讨论】:

【参考方案3】:

不确定这是否是预期行为,但在某些情况下,IndexController 的操作应在 Index/some/ 等大写情况下请求,而 index/some/ 将返回未找到的响应。

【讨论】:

【参考方案4】:

尝试使用自定义路由。

如果您使用的是骨架项目,则可以按如下方式完成,但概念对于任何其他应用程序都是相同的。

创建文件 app/config/routes.php

/**@var $router \Phalcon\Mvc\Router*/
$router = $di->get('router');

$router->add(
    "/index/some",
    [
       "controller" => "index",
       "action"     => "some",
    ]
 );

加载services.php后在index.php中

require __DIR__ . '/../app/config/routes.php';

【讨论】:

【参考方案5】:
please change your .htaccess settings to following one

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

【讨论】:

虽然这可能会解决 OP 的问题,但对于这个问题的当前和未来读者来说,几句话的解释会让这个答案变得更好。 是的,以后会注意的【参考方案6】:
class SomeController...

就是你要找的。​​p>

【讨论】:

以上是关于不能在 Phalcon php 中调用除 indexAction 以外的 indexController 的动作的主要内容,如果未能解决你的问题,请参考以下文章

配置nginx使之支持pathinfo

通过 ajax 调用 phalcon php MVC 控制器

phalcon:非空字段不能在beforeCreate赋值

phalcon—— PHP基础知识

phalcon: crypt-encrypt/decrypt用法

phpstudy下安装phalcon