伊伊+新手:卡在使用 Yii 框架提交 ajax 生成的表单上

发布于 2024-11-05 09:09:02 字数 1134 浏览 0 评论 0原文

我使用 Yii 的第一天过得很愉快,但是在获取我以前“从手指”写的东西时遇到了一些麻烦。

这是我的问题的背景:

我创建了一个“项目”模型、控制器和视图(工作正常),在“views/project/_form.php”中我放置了一个显示部分视图的ajax链接:属于一个表单到另一个模型,名为“图片”。

因此,“views/project/_form.php”内部包含以下内容:

<?php

     echo CHtml::ajaxLink('Add picture', array('projekt/addPicture'), 
                                         array('update'=>'#req_res')
          );

?>

<div id="req_res">...</div> <!-- here the ajax form shows -->

/project/addPicture 操作成功使用此类代码显示了表单:

public function actionAddPicture()
    {

            $model=new Picture;
            $this->renderPartial('/projekt/_addPicture', array('model'=>$model));
            Yii::app()->end();
    }

并且 /projekt/view 文件夹中的“_addPicture.php”文件具有“cactiveform”在里面,正确加载“$model”(我可以看到我的数据存储在数据库等中)

问题:

当我在新生成的表单上点击“保存”时,Yii 将我发送到一个新的白色页面,其中再次包含此表单,而不是保存它。这是 Yii 发送给我的 URL:

      http://localhost/projekt/addPicture?_=1304644637668

我隐约意识到这可能与我没有告诉 Yii 使用哪个控制器有关(?),但我不知道如何指定控制器(如果是这种情况)

可以你给我指出一些方向吗?谢谢

I'm having nice first days using Yii but have some troubles with getting things that i used to write 'from the finger' .

Here is the background for my question:

I created a 'project' model,controller and view (works fine) and in the 'views/project/_form.php' i put an ajax link that displays a partial view : a form that belongs to another model, named 'picture'.

So, the 'views/project/_form.php' has this inside:

<?php

     echo CHtml::ajaxLink('Add picture', array('projekt/addPicture'), 
                                         array('update'=>'#req_res')
          );

?>

<div id="req_res">...</div> <!-- here the ajax form shows -->

The /project/addPicture action successfully shows the form using such code:

public function actionAddPicture()
    {

            $model=new Picture;
            $this->renderPartial('/projekt/_addPicture', array('model'=>$model));
            Yii::app()->end();
    }

and the '_addPicture.php' file in the /projekt/view folder has a "cactiveform" inside, loading the '$model' correctly (i can see my data stroed in the DB etc.)

Problem:

When i hit 'save' on the newly generated form, Yii sends me to a new white page containing again this form instead of saving it. Here's the URL Yii sends me to:

      http://localhost/projekt/addPicture?_=1304644637668

I am vaguely aware that it may have something to do with me not telling Yii which controller to use (?) but i don't know how to specify the controller (if this is the case)

Can you point me to some direction here? Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失而复得 2024-11-12 09:09:02

通过使用 cactiveform,您可以将操作定义为 cactiveform 的选项:

$form=$this->beginWidget('CActiveForm', array(
                         'action'=>Yii::app()->createUrl(...), ....

通常该操作“连接”到您在表单中看到的保存按钮。

当我在新生成的表单上点击“保存”时,

顺便说一句:我认为如果您单击“保存”,您的 Ajax-Link 将不会被使用

我没有告诉 Yii 使用哪个控制器(?)

..看看 cactiveform 中的“action”选项

Yii 将我发送到一个新的白色页面,其中再次包含此表单,而不是保存它

这是正确的。因为 Yii 使用默认的“保存”按钮执行该操作。如果操作是actionAddPicture,实际上您不处理帖子数据。

这意味着,您需要类似的东西(只是一个简单的示例,您必须根据需要进行自定义):

if(isset($_POST[<model>]) )  
    {   $model=new model();
        $model->attributes=$_POST[<model>];
        $model->save;
[...]

By uesing cactiveform you define an action as an option of cactiveform:

$form=$this->beginWidget('CActiveForm', array(
                         'action'=>Yii::app()->createUrl(...), ....

Usually the action is "connected" to the save button you see at the form.

When i hit 'save' on the newly generated form,

btw: I think your Ajax-Link will not be used, if you click "save"

me not telling Yii which controller to use (?)

..look at the "action" option from cactiveform

Yii sends me to a new white page containing again this form instead of saving it

That's right. Because by using the default "save" button Yii executes the action. If the action is actionAddPicture, actually you don't process the postes data.

That means, you need something like that (just an simple example, which you have to customize for your needs):

if(isset($_POST[<model>]) )  
    {   $model=new model();
        $model->attributes=$_POST[<model>];
        $model->save;
[...]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文