Php 如何区分phalcon框架控制器中的多个按钮动作?例子;提交、更新和清除按钮

Php 如何区分phalcon框架控制器中的多个按钮动作?例子;提交、更新和清除按钮,php,button,phalcon,Php,Button,Phalcon,名称 类型 有很多解决方案,我将对您的代码进行重构: 不要在同一表单上使用多个Submit按钮。在呈现表单时使用简单表单和IF logic 完整的API和UI分离(表单按钮有JS处理程序,Phalcon只是API后端) 您的示例,但将/分派到不同的操作(如果发布['submit']&&&u发布['somethingelse']),更通用 您需要给出提交按钮的名称 <input type="submit" name="submit" value="submit"> <input


名称
类型

有很多解决方案,我将对您的代码进行重构:

  • 不要在同一表单上使用多个
    Submit
    按钮。在呈现表单时使用简单表单和
    IF logic
  • 完整的API和UI分离(表单按钮有JS处理程序,Phalcon只是API后端)
  • 您的示例,但将/分派到不同的操作(
    如果发布['submit']&&&u发布['somethingelse']
    ),更通用

  • 您需要给出提交按钮的名称

    <input type="submit" name="submit" value="submit">
    <input type="submit" name="update" value="update">
    
    假设您不使用,这实际上可以通过以下方式缩短:

    如果需要submit按钮显示一个值并提交另一个值,可以使用button元素,如下所示:

    <input type="submit" name="act" value="submit">
    <input type="submit" name="act" value="update">
    
    <button type="submit" name="act" value="submit">New Entry</button>
    <button type="submit" name="act" value="update">Edit Entry</button>
    
    新条目
    编辑条目
    
    您还可以使用隐藏元素来实现这一点,并使用多种形式

    由于您是Phalcon的新手,我建议您使用一些简单的示例,如和,它们出现在下一页的“教程”部分:
    Phalcon提供了一个可从控制器访问的对象。
    强烈建议使用它

    下面是一个简单的POST请求示例:

    <?php
    
    use Phalcon\Mvc\Controller;
    
    class MyController extends Controller
    {
        public function processFormAction()
        {
            // Retrieve value of <input name="foo" />
            $form_field = $this->request->getPost('foo');
    
            if ($form_field === "bar") {
                echo "Foo = bar";
            } else {
                echo "Foo != bar";
            }
    
            // ...
        }
    }
    
    在控制器中,有两种方法

    public function saveAction() {
        // Do save
    }
    
    public function updateAction() {
        // Do update
    }
    
    第二种解决方案

    给每个人一个名字,点击的一个将作为任何其他输入发送

    <input type="submit" name="saveBtn" value="Click me">
    <input type="submit" name="updateBtn" value="Click me">
    
    第三种解决方案

    将名称定义为数组

    <input type="submit" name="submit[save]" value="Click me">
    <input type="submit" name="submit[update]" value="Click me">
    

    1) 请你进一步说明原因好吗?以及进一步的IF逻辑。什么意思?在我看来,为每个特定的按钮分配一个过程是简单而直接的。但我可能错了。请引导我。2) 我不明白,对不起。3) 我不认为我的解决方案会在phalcon框架下起作用,因此我提出了这个问题。我也很难理解整个路线/调度的事情。感谢您的回复:)关于第一点-Phalcon默认行为是MVC,这意味着-视图有表单和按钮,按钮有动作,动作有模型更新的逻辑。通过添加额外的按钮,更新逻辑变得复杂,并且还依赖于发布的数据。将一个视图/表单上的不同行为混合到一个动作和多个IFs中是不可能的。这就是为什么开发人员使用RESTAPI(参见2.option)的原因。我仍然在MVC中爬行。学习时我会记下你说的话。谢谢你的指导:)我的天啊,它起作用了!谢谢。我用有限的知识探索了一大堆东西,但很长一段时间都没有进步。谢谢你,先生。在这里,我想我永远不能像平时一样使用phalcon框架或任何框架(phalcon是我学习的第一个框架,哈哈哈)。我已经投票决定了这个答案。谢谢。我想我理解这部分。只是我不知道如何在一个表单中区分多个按钮的过程。
    $(function() {
        $('input[name="saveBtn"]').on('click', function(event) {
            event.preventDefault();
    
            form.attr('action', 'url-to-save');
            form.submit();
        });
    
        $('input[name="updateBtn"]').on('click', function(event) {
            event.preventDefault();
    
            form.attr('action', 'url-to-update');
            form.submit();
        });
    });
    
    public function saveAction() {
        // Do save
    }
    
    public function updateAction() {
        // Do update
    }
    
    <input type="submit" name="saveBtn" value="Click me">
    <input type="submit" name="updateBtn" value="Click me">
    
    $submitSave = $this->request->getPost('saveBtn', 'string', false);
    $submitUpdate = $this->request->getPost('updateBtn', 'string', false);
    
    if ($submitSave) {
        echo "This is a save";
    } elseif ($submitUpdate) {
        echo "This is an update";
    }
    
    <input type="submit" name="submit[save]" value="Click me">
    <input type="submit" name="submit[update]" value="Click me">
    
    $submit = $this->request->getPost('submit');
    
    if (!empty($submit)) {
        if (!empty($submit['save'])) {
            echo "This is a save";
        } elseif (!empty($submit['update'])) {
            echo "This is an update";
        }
    }