- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Yii 和 PHP 都比较陌生,在编写用户友好的 URL 时遇到一些问题。
我想根据用户在表单中输入的参数创建一个 URL,该表单是 CFormModel 的扩展。我最初选择了 GET 方法 而不是 POST,因为用户应该能够为 URL 添加书签,以便稍后返回到相同的搜索结果。用户必须为该方法指定(至少)一个参数搜索,但由于表单中有许多可能的参数,我想通过 仅包含非空参数及其值来缩短 URL,例如
http://localhost/search/results?name=John&country=Ireland
而不是
http://localhost/search/results?name=John&family=&country=Ireland&yt0=Search
(如果有人知道如何排除按钮 ID 和标签“yt0=Search”,那也很好。)据我了解,将所有 GET 参数传递到 URL 是 HTML 表单的标准行为,仅使用 PHP 无法更改。现在我想到添加一个 JavaScript 函数,在提交表单后检查所有表单参数的值是否为空。如果参数值为空,则参数名称将设置为空字符串(如建议的 here ),这会有效地从 URL 中删除空参数:
function myFunction()
{
var myForm = document.getElementById('form-id');
var allInputs = myForm.getElementsByTagName('input');
var input, i;
for(i = 0; input = allInputs[i]; i++) {
if(input.getAttribute('name') && !input.value) {
input.setAttribute('name', '');
}
}
}
但是,我不确定在哪里调用此函数(与标准 HTML 表单的“onsubmit”相反)以及如何引用表单参数,因为我还不熟悉 CFormModel/CActiveForm。任何帮助将不胜感激!
这是(简化的)表单模型:
class SearchForm extends CFormModel {
private $_parameters = array (
'firstName' => array (
'type' => 'text',
'config'=>array('name'=>'name'),
),
'familyName' => array (
'type' => 'text',
'config'=>array('name'=>'family'),
),
'country' => array (
'type' => 'text',
'config'=>array('name'=>'country')
),
);
public $firstName;
public $familyName;
public $country;
public function getParameters() {
return $this->_parameters;
}
}
这是 View 的相关部分:
$elements = $model->getParameters ();
$form = $this->beginWidget ( 'CActiveForm', array (
'method'=>'get',
'enableAjaxValidation' => false
)
);
这是 Controller 的操作部分:
public function actionResults() {
$model = new SearchForm ();
$filters = array ();
if (isset ($_REQUEST['name'])){
$filters['firstName'] = $_REQUEST['name'];
}
if (isset ($_REQUEST['family'])){
$filters['familyName'] = $_REQUEST['family'];
}
if (isset ($_REQUEST['country'])){
$filters['country'] = $_REQUEST['country'];
}
if ($filters) {
$model->attributes = $filters;
if ($model->validate ()) {
// search action
}
}
}
(两周前我问过一个类似但不太具体的问题 here 。)
最佳答案
您可以通过在 Controller 中创建两个操作来实现此目的。
class SearchController extends Controller {
function actionFormhandler() {
$formValues = $_POST;
$argName = $_POST['name'];
$argCountry = $_POST['name'];
// and other statements
// Now redirect
$this->redirect(array('/search/results',
array('id' => $argName,
'country' => $argCountry
));
}
function actionResults() {
// do your thang here.
}
}
关于javascript - 使用 CActiveForm 从 URL 中排除空表单参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28809449/
如前所述 here , Yii 提供虚拟属性。我在我的模型中添加了以下内容: public function getTest() { ... } public function setTest($va
我是 yii 的新手,我正在尝试将数据保存在 CactiveForm 上的不同表中..这是我查看的代码: beginWidget('CActiveForm', array( 'id
我的应用程序中有一个事件表单。但是客户端验证不起作用。表单代码如下所示: beginWidget('CActiveForm', array( 'id'=>'application-data-s
我有一个基本的 Yii CActiveForm,我用它来收集用户的输入,然后通过默认的 Yii ActiveRecord 模型[/编辑]将其插入数据库[编辑]。与任何人一样,我想确保聪明的用户不会通过
我需要将 data-ajax = "false"属性传递给表单。 jQuery Mobile 需要此属性才能停止使用 Ajax 加载页面。 这是我的代码: beginWidget('CActiveF
这就是你的三个概念,我真的不明白我们应该用什么,在什么场景下? 任何人都可以善意地澄清那些 Yii 元素,我们应该在什么情况下使用它们? 最佳答案 在 CForm 的文档中,可以阅读以下内容: ...
我使用以下代码创建表单: beginWidget('CActiveForm', array( 'id'=>'contacts-form', 'enableAjaxValidation'
您好,我是 yii 框架的新手,目前正在尝试通过数据库身份验证建立登录。但是我反复收到这个错误 CException CActiveForm and its behaviors do not have
我对 Yii 和 PHP 都比较陌生,在编写用户友好的 URL 时遇到一些问题。 我想根据用户在表单中输入的参数创建一个 URL,该表单是 CFormModel 的扩展。我最初选择了 GET 方法 而
情况 我使用了 Yii 网站上的维基文章,Collecting Tabular Input , 举个例子。 我认为我不需要针对多个模型验证传统意义上的表格输入。我只有一个模型,但我正在动态创建表单中的
我是一名优秀的程序员,十分优秀!