【问题标题】:CakePHP - Best way to customise form action?CakePHP - 自定义表单动作的最佳方式?
【发布时间】:2012-07-17 14:19:26
【问题描述】:

我有一个使用搜索控制器/模型的搜索表单。

echo $this->Form->create('Search', array('action' => 'query', 'type' => 'get'));
 ...
echo $this->Form->end();

但默认情况下,表单提交给'/searches/query'。如何将搜索页面的 URL 改为 /search/query

如果可能的话,我真的不想使用 .htaccess 重写,因为这看起来有点乱。希望有一个整洁的蛋糕方式来做到这一点。

我认为这可以通过 bootstrap.php 中的自定义 Inflector 规则来完成,但我不确定如何。

【问题讨论】:

  • 你有没有说明你使用的是什么蛋糕版本?
  • 2.2,虽然我不认为有什么新的东西可以帮助这里。

标签: forms cakephp cakephp-2.2


【解决方案1】:

只需使用路由器。在您的路线文件中,添加:

Router::connect('/search/:action/*', array('controller' => 'searches'));
Router::connect('/search/*', array('controller' => 'searches', 'action' => 'index'));

阅读更多关于路由器in the book的信息。

【讨论】:

  • 这将进行两次重定向,并且会以某种方式增加执行时间。不是吗?
  • 不,这不是重定向。这是generic routing 不会发生重定向。这将在您请求以下 URL 时指示 CakePHP 核心调用 SearchesControllerwww.myapp.com/search/query
  • 对不起,这不是答案,尽管每个人都在支持你。我知道如何使用路线,并且我已经设置了这条路线。如果用户在地址栏中输入/search/index并自己去那里就可以了,但这并不能解决我的表单仍然提交给/searches/query的问题
  • 表格应提交至/search/query。如果不是,那么还有其他问题。这是正确的做法。显示您的整个路由文件和控制器的 sn-p 操作。
【解决方案2】:

有没有办法说:

echo $this->Form->create('Search', array('action' => 'search/query', 'type' => 'get'));

然后为此设置路由器?

$this->Router->('search/query', array('controller' => 'searches', 'action' => 'query'));

【讨论】:

  • 是的,这是我尝试的第一件事,但动作只会是第二部分。您似乎无法指定要使用的控制器或完整的 URL。所以它以action="/searches/search/query"的形式出现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2015-11-28
  • 1970-01-01
  • 2013-06-09
  • 2013-07-22
  • 2014-03-14
相关资源
最近更新 更多