cakephp创建重定向到视图的简单按钮

时间:2012-11-21 10:39:08

标签: php forms cakephp

我开始使用cakephp,我在构建以下内容时遇到了一些问题: 我希望我的应用程序的主页有4个简单的按钮,重定向到不同的创建视图。我怎么能这样做?

我试过了:

   <?php
echo $this->Form->create('Post');
echo $this->Form->button('Redirect1', array('type'=>'button'));
echo $this->Form->button('Redirect1', array('type'=>'button'));
echo $this->Form->button('Redirect1', array('type'=>'button'));
echo $this->Form->end();
?>

但我想是不需要提交表格对吗?但是我在搜索中没有找到其他方式。是不是只能更改按钮点击页面?

谢谢

9 个答案:

答案 0 :(得分:8)

表单按钮不应该用作简单的链接,无论如何,你创建按钮,然后添加一些javascript或jQuery,使它像Justin所说的那样工作。 (虽然我通常更喜欢使用带代码的外部.js文件)

另一种选择是为链接添加一种样式,使其具有按钮的外观,例如:

echo $this->Html->link("Demo", array('controller' => 'yourcontroller','action'=> 'youraction', $possibleParameter), array( 'class' => 'button'))

其中按钮可以定义为:

a.button {
    color: #6e6e6e;
    font: bold 12px Helvetica, Arial, sans-serif;
    text-decoration: none;
    padding: 7px 12px;
    position: relative;
    display: inline-block;
    text-shadow: 0 1px 0 #fff;
    -webkit-transition: border-color .218s;
    -moz-transition: border .218s;
    -o-transition: border-color .218s;
    transition: border-color .218s;
    background: #f3f3f3;
    background: -webkit-gradient(linear,0% 40%,0% 70%,from(#F5F5F5),to(#F1F1F1));
    background: -moz-linear-gradient(linear,0% 40%,0% 70%,from(#F5F5F5),to(#F1F1F1));
    border: solid 1px #dcdcdc;
    border-radius: 2px;
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    margin-right: 20px;
    cursor:pointer;
}
a.button:hover{
    color: #333;
    border-color: #999;
    -moz-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.2); 
-webkit-box-shadow:0 2px 5px rgba(0, 0, 0, 0.2);
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}
a.button:active {
    color: #000;
    border-color: #444;
}

答案 1 :(得分:5)

我在搜索类似问题时发现了这个问题。在我看来,最简单的方法是:

$this->Html->link($this->Form->button('Button'), array('action' => 'viewSomethin',$id), array('escape'=>false,'title' => "Click to view somethin"));

也许这对某人有用。

答案 2 :(得分:2)

我认为您只需要稍后使用css设置样式的链接(假设您使用的是Html帮助程序):

<?php 
echo $this->Html->link('Click Here', '/redirect/url', array('class' => 'button')); 
?>

在此处阅读更多内容:http://book.cakephp.org/1.3/en/view/1442/link

答案 3 :(得分:1)

你可以使用

<?php echo $this->Html->link('ADD New One', '/controllername/functionname')?>

答案 4 :(得分:1)

您可以为链接添加Html规则属性。此规则将链接设置为按钮。

echo $this->Html->link('Blogs', 
    array('action' => 'add'), 
    array(
        'bootstrap-type' => 'primary',
        'class' => 'btn btn-lg btn-primary btn-block',
        // transform link to a button
        'rule' => 'button'
    )
);

答案 5 :(得分:0)

下面的内容对您有用

$this->Form->button('Home', 
      array('onclick' => "location.href='".$this->Html->url($url)."'")); 

答案 6 :(得分:0)

我认为最好的解决方案是使用postButton,例如:

echo $this->Form->postButton('Text Button', array('controller'=>'controllername','action'=>'action_to_do'));

您必须根据需要更改“controllername”和“action_to_do”

答案 7 :(得分:0)

我也只是在考虑这个&#34;问题&#34;。但是我对表单的按钮感到不满意,我只想获得动作类中的按钮:enter image description here

所以我找到了两个解决方案:

解决方案1:使用css类&#34;动作&#34;

在一个范围内包裹按钮
<span class="action">
    <?php
    echo $this->Html->link("Send Again", "url");
    ?>
</span>

css类action已经在cake.generic样式表中。所以这将是一个很好的按钮。

解决方案2:复制.actions a

的CSS样式

这个解决方案更像是Alvaro's one的补充。我还不能评论,所以我必须为此做一个额外的答案。

所以,我没有使用Alvaro的css,因为它们用于表单按钮,与原始按钮略有不同。所以我只是在原始.action a中搜索了cake.generic.css的样式,并将它们复制到我自己的css文件中,并将选择器更改为a.button

然后现在你可以用它来生成没有任何包装器的按钮:

<?php echo $this->Html->link("Send Again, "url", ["class" => "button"]) ?>

CakePHP 版本 2.6.2 的css:

a.button {
  font-weight: normal;
  padding: 4px 8px;
  background: #dcdcdc;
  background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#dcdcdc));
  background-image: -webkit-linear-gradient(top, #fefefe, #dcdcdc);
  background-image: -moz-linear-gradient(top, #fefefe, #dcdcdc);
  background-image: -ms-linear-gradient(top, #fefefe, #dcdcdc);
  background-image: -o-linear-gradient(top, #fefefe, #dcdcdc);
  background-image: linear-gradient(top, #fefefe, #dcdcdc);
  color: #333;
  border: 1px solid #bbb;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  text-decoration: none;
  text-shadow: #fff 0px 1px 0px;
  min-width: 0;
  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
  -webkit-user-select: none;
  user-select: none;
}

a.button:hover {
  background: #ededed;
  border-color: #acacac;
  text-decoration: none;
}

a.button:active {
  background: #eee;
  background-image: -webkit-gradient(linear, left top, left bottom, from(#dfdfdf), to(#eee));
  background-image: -webkit-linear-gradient(top, #dfdfdf, #eee);
  background-image: -moz-linear-gradient(top, #dfdfdf, #eee);
  background-image: -ms-linear-gradient(top, #dfdfdf, #eee);
  background-image: -o-linear-gradient(top, #dfdfdf, #eee);
  background-image: linear-gradient(top, #dfdfdf, #eee);
  text-shadow: #eee 0px 1px 0px;
  -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
  -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
  box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
  border-color: #aaa;
  text-decoration: none;
}

希望在提出问题三年后帮助他们。 :d

答案 8 :(得分:0)

对于CakePHP 2.X

 <button id="create_task_groups" onclick="window.location.href='<?php echo $this->Html>url(array('plugin'=>'task_calendar', 'controller'=>'task_groups', 'action'=>'add'))?>'"> Create Task Group</button>