如何区分 phalcon 框架控制器中的多个按钮操作?例子;提交并更新和清除按钮
how to differentiate multiple button action in the controller for phalcon framework? example; submit and update and clear button
<?php echo $this->tag->form("index/index"); ?>
<label for="nameInput">name</label>
<?php echo $this->tag->textField("nameInput"); ?>
<label for="typeInput">type</label>
<?php echo $this->tag->textField("typeInput"); ?>
<input type="submit" value="submit">
<input type="submit" value="update">
</form>
在控制器中..类似这样的东西..
if (isset($_POST['update'])) {
//example
echo 'update';
}
elseif (isset($_POST['submit'])) {
//example
echo 'submit';
}
我仍在尝试逐步学习 Phalcon。对我来说,关于这个特定问题的文档并不多。我认为这与我没有完全理解 Phalcon 有关。如果有人可以帮助指导我,将不胜感激。
解决方案很多,我对你的代码重构会是:
- 不要在同一个表单上使用多个
Submit
按钮。在渲染表单时使用简单表单和 IF-logic
- 完成 API 和 UI 分离(表单按钮有 JS 处理程序,Phalcon 只是 API 后端)
- 您的示例,但 route/dispatch 不同的操作 (
if _POST['submit'] && _POST['somethingelse']
),更通用
您需要为提交按钮命名。
<input type="submit" name="submit" value="submit">
<input type="submit" name="update" value="update">
当使用提交按钮提交表单时,其 name:value 对随表单一起发送。您需要为其命名,以便在 $_POST 数组中找到它。另外,请避免将名称 "submit" 用于提交按钮,因为它可能会给 JavaScript 的 submit() 方法带来问题。不要同时检查 $_POST['update'] 和 $_POST['submit'],您应该为两个提交按钮使用相同的名称,并在后端用它们的值区分它们,如下所示:
<input type="submit" name="act" value="submit">
<input type="submit" name="act" value="update">
然后你会检查
if (isset($_POST['act']) && $_POST['act'] === 'update') {
echo 'update';
}
elseif (isset($_POST['act']) && $_POST['act'] === 'submit') {
echo 'submit';
}
假设您没有像这样使用 scream, this can actually be shortened with the silence operator:
if (@$_POST['act'] === 'update') {
echo 'update';
}
elseif (@$_POST['act'] === 'submit') {
echo 'submit';
}
如果您需要提交按钮显示一个值并提交另一个值,您可以像这样使用按钮元素:
<button type="submit" name="act" value="submit">New Entry</button>
<button type="submit" name="act" value="update">Edit Entry</button>
您也可以使用隐藏元素来做到这一点,并使用多种形式。
由于您是 Phalcon 的新手,我建议您尝试一些更简单的示例,例如出现在下页 "tutorials" 部分的 invoice and vökuró:
https://docs.phalconphp.com/3.4/en
Phalcon 提供了一个可从控制器访问的 Phalcon\Http\Request 对象。
强烈推荐使用。
这是一个带有 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";
}
// ...
}
}
在您的情况下,如果您希望表单中的两个提交按钮具有不同的功能,那么您有多种解决方案:
第一个解决方案
使用 JavaScript 提交表单并定义两条路线,一条用于保存,另一条用于更新。
<input type="submit" name="saveBtn" value="Click me">
<input type="submit" name="updateBtn" value="Click me">
绑定点击每个按钮,根据需要的动作设置路由url。
$(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";
}
}
<?php echo $this->tag->form("index/index"); ?>
<label for="nameInput">name</label>
<?php echo $this->tag->textField("nameInput"); ?>
<label for="typeInput">type</label>
<?php echo $this->tag->textField("typeInput"); ?>
<input type="submit" value="submit">
<input type="submit" value="update">
</form>
在控制器中..类似这样的东西..
if (isset($_POST['update'])) {
//example
echo 'update';
}
elseif (isset($_POST['submit'])) {
//example
echo 'submit';
}
我仍在尝试逐步学习 Phalcon。对我来说,关于这个特定问题的文档并不多。我认为这与我没有完全理解 Phalcon 有关。如果有人可以帮助指导我,将不胜感激。
解决方案很多,我对你的代码重构会是:
- 不要在同一个表单上使用多个
Submit
按钮。在渲染表单时使用简单表单和IF-logic
- 完成 API 和 UI 分离(表单按钮有 JS 处理程序,Phalcon 只是 API 后端)
- 您的示例,但 route/dispatch 不同的操作 (
if _POST['submit'] && _POST['somethingelse']
),更通用
您需要为提交按钮命名。
<input type="submit" name="submit" value="submit">
<input type="submit" name="update" value="update">
当使用提交按钮提交表单时,其 name:value 对随表单一起发送。您需要为其命名,以便在 $_POST 数组中找到它。另外,请避免将名称 "submit" 用于提交按钮,因为它可能会给 JavaScript 的 submit() 方法带来问题。不要同时检查 $_POST['update'] 和 $_POST['submit'],您应该为两个提交按钮使用相同的名称,并在后端用它们的值区分它们,如下所示:
<input type="submit" name="act" value="submit">
<input type="submit" name="act" value="update">
然后你会检查
if (isset($_POST['act']) && $_POST['act'] === 'update') {
echo 'update';
}
elseif (isset($_POST['act']) && $_POST['act'] === 'submit') {
echo 'submit';
}
假设您没有像这样使用 scream, this can actually be shortened with the silence operator:
if (@$_POST['act'] === 'update') {
echo 'update';
}
elseif (@$_POST['act'] === 'submit') {
echo 'submit';
}
如果您需要提交按钮显示一个值并提交另一个值,您可以像这样使用按钮元素:
<button type="submit" name="act" value="submit">New Entry</button>
<button type="submit" name="act" value="update">Edit Entry</button>
您也可以使用隐藏元素来做到这一点,并使用多种形式。
由于您是 Phalcon 的新手,我建议您尝试一些更简单的示例,例如出现在下页 "tutorials" 部分的 invoice and vökuró:
https://docs.phalconphp.com/3.4/en
Phalcon 提供了一个可从控制器访问的 Phalcon\Http\Request 对象。
强烈推荐使用。
这是一个带有 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";
}
// ...
}
}
在您的情况下,如果您希望表单中的两个提交按钮具有不同的功能,那么您有多种解决方案:
第一个解决方案
使用 JavaScript 提交表单并定义两条路线,一条用于保存,另一条用于更新。
<input type="submit" name="saveBtn" value="Click me">
<input type="submit" name="updateBtn" value="Click me">
绑定点击每个按钮,根据需要的动作设置路由url。
$(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";
}
}