我想创建一个按钮,只需单击一下即可用于填充数据库中的表。
我只是不确定我需要做些什么来实现这一目标。我可以指定一个按钮执行的方法吗?或者只是在我的控制器中拾取值?下面是我想要执行的内容,但是通过一个按钮。
public function addInterest($interest)
{
$interest->UserId=Yii::app()->user->id;
$interest->ItemId=$this->ItemId;
return $interest->save();
}
* *回应Jaison Justus的其他详细信息
通过这个实现,我使用模型A(ItemId)中的控制器和视图来显示按钮。然后是模型B(UserId)。从模型A(ItemId)和模型B(UserId)获取信息我希望在单击按钮时使用该ItemId和UserId填充模型C($ interest)。看起来CJuiButton可能会提供一种方法来构建它,然后我可以在选择一次后禁用/隐藏按钮。我只是不熟悉使用收集用户输入的表单以外的按钮,链接或提供弹出消息。
上面的代码目前位于Model A模型中。使用模型A控制器中的下面的代码,如果我使用表单并收集输入,一切都可以填充模型C.由于我不需要任何其他输入,然后从用户那里选择按钮,表单中没有任何内容,因此我知道我不能使用if(isset($_POST['Interest']))
,如下所示。
public function actionView($id) {
$items=$this->loadModel($id);
$interest=$this->newInterest($items);
$this->render('view', array(
'model' => $items,
'interest' => $interest,
));
}
protected function newInterest($items)
{
$interest=new Interest;
if(isset($_POST['Interest']))
{
$interest->attributes=$_POST['interest'];
if($items->addInterest($interest))
$this->refresh();
}
return $interest;
}
回应VarioN
这是尝试使用ajax。但是这不起作用,并在运行时给出错误500。我的控制器动作是否适合我在这里尝试做的事情?
控制器
public function actionAddInterest() {
$connection = yii::app()->db;
$sql1 = "INSERT INTO interest (UserId, ItemId)
VALUES(".Yii::app()->user->id.",".$this->ItemId.")";
$connection->createCommand($sql1)->execute();
}
查看
<?php
echo CHtml::ajaxLink(
'Add Interest',
array('/item/addInterest'),
array('update'=>'#req_res')
);
?>
答案 0 :(得分:3)
看看你的问题,我发现你并不了解Yii中的MVC如何运作。
观看这个15分钟的截屏视频(Yii Tour - 3rd Stop - CRUD County),然后您就可以以任何方式创建这样的按钮(尝试使用Gii而不是按照自己的方式自定义 - 它是最简单的方式)。
<强>更新强>
似乎您需要AJAX请求。您可以在视图中添加CHtml::ajaxButton()。
它将以这种方式工作:
用户按下按钮,按钮请求(使用JavaScript)给您 网站没有重新加载页面而且对用户不可见。
您的控制器操作将为此请求提供服务:它可以制作一些内容(例如,将数据保存到数据库)并输出您的JavaScript可能会向用户显示的数据。
比您的JavaScript获得答案,可以在页面上进行一些更改 (例如,隐藏按钮或显示来自请求的文本)。
您可以使用ajax here
查看简单示例如果您不需要使用按钮提交表单信息,则可以使用ajaxLink。它的示例是here
在互联网和yii论坛上有很多关于ajax和yii的例子。试着找到它们可能会非常有帮助。
如果您有任何问题,请提出问题。
第二次更新:
首先,尝试简化您的SQL查询: &#34; INSERT INTO interest(UserId,ItemId)VALUES(1,2)&#34;
启用将mysql查询记录到log:at config / main.php add&#34; trace&#34;到&#34;等级&#34;
'components'=>array(
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning, trace',
),
现在您可以尝试按下AJAX链接并查看protected / runtime / log.txt并确定问题。
AJAX请求的其他信息
所有输出ajax脚本的内容都可以通过浏览器的功能查看: 在Chrome:按F12,转到网络,按ajax-link并查看请求响应。 在Firefox上使用插件&#34; Firebug&#34;。
通过这种方式,您可以确定请求是否已完成。