0

次のコードを含むファイル (ProfileController.php) があります。

public function editAction() {

        if (Zend_Auth::getInstance()->hasIdentity()) {
        try {
            $form = new Application_Form_NewStory();
            $request = $this->getRequest();
            $story = new Application_Model_DbTable_Story();
            $result = $story->find($request->getParam('id'));

           // $values = array(
           //     'names' => $result->names,
           //     'password' => $result->password,
           // );

            if ($this->getRequest()->isPost()) {
                if ($form->isValid($request->getPost())) {
                    $data = array(
                        'names' => $form->getValue("names"),
                        'password' => $form->getValue("password"),
                    );
                    $form->populate($data->toArray());
                    $where = array(
                        'id' => $request->getParam('id'),
                    );
                    $story->update($data, $where);
                }
            }
            $this->view->form = $form;
            $this->view->titleS= $result->title;
            $this->view->storyS= $result->story;
        } catch (Exception $e) {
            echo $e;
        }
    } else {
        $this->_helper->redirector->goToRoute(array(
            'controller' => 'auth',
            'action' => 'index'
        ));
    }

    }

および次のコードを含む別のファイル (edit.phtml):

    <?php
        try
            {
                 $tmp = $this->form->setAction($this->url());

         //$tmp->titleS=$this->title;
         //$tmp->storyS=$this->story;

          //echo $tmp->title = "aaaaa";
            }
          catch(Exception $e)
            {
                 echo $e;
            }

    ?>

ユーザーが自分のユーザー名とパスワードを編集できるようにしたいと思います。どうすればいいですか?

4

1 に答える 1

0

まず、Zend_Authをinit()またはpreDispatch()に移動します。これにより、コントローラー内の一部またはすべてのアクションに対してAuthが実行されます。

複数の送信ボタンを機能させる秘訣は、getParam('')が機能するように、ボタンに異なる名前を付けることです。

通常、私は削除を行うときにのみこの種のことを行います。編集または更新の場合は、配列全体をデータベースに送信するだけです。私は通常、またはのZend_Db_Table_Row save()代わりにメソッドを使用するため、メカニズムは少し異なります。Zend_Db_Table's insert()update()

単純なフォームを使用して更新を実行します。これがコントローラーコードです(ビューはフォームをエコーするだけです)。

//update album information
public function updatealbumAction()
    {   //get page number from session
        $session = new Zend_Session_Namespace('page');
        //get album id
        $id = $this->getRequest()->getParam('id');

        $model = new Music_Model_Mapper_Album();
        //fetch the album database record
        $album = $model->findById($id);

        $form = new Admin_Form_Album();
        //this form is used elsewhere so set the form action to this action
        $form->setAction('/admin/music/updatealbum/');

        if ($this->getRequest()->isPost()) {
            if ($form->isValid($this->getRequest()->getPost())) {
                $data = $form->getValues();//get valid and filtered form values

                $newAlbum = new Music_Model_Album($data);//create new entity object

                $update = $model->saveAlbum($newAlbum);//save/update album info

                $this->message->addMessage("Update of Album '$update->name' complete!");//generate flash message
                $this->getHelper('Redirector')->gotoSimple('update', null, null, array('page' => $session->page));//redirect back to the page the request came from
            }
        } else {
            $form->populate($album->toArray());
            $this->view->form = $form;
        }
    }

これはかなり一般的な更新アクションです。

次に、さまざまなリクエストパラメータを使用してレコードに対してアクションを実行する方法を示します。これを使用してデータベースレコードを削除しますが、何でも可能です。

public function deleteAction()
    {
        $session = new Zend_Session_Namespace('page');
        $request = $this->getRequest()->getParams();
        try {
            switch ($request) {
                //if 
                case isset($request['trackId']):
                    $id = $request['trackId'];
                    $model = new Music_Model_Mapper_Track();
                    $model->deleteTrack($id);
                    $this->message->addMessage("Track Deleted!");

                    break;
                case isset($request['albumId']):
                    $id = $request['albumId'];
                    $model = new Music_Model_Mapper_Album();
                    $model->deletealbum($id);
                    $this->message->addMessage("Album Deleted!");

                    break;
                case isset($request['artistId']):
                    $id = $request['artistId'];
                    $model = new Music_Model_Mapper_Artist();
                    $model->deleteArtist($id);
                    $this->message->addMessage("Artist Deleted!");

                    break;

                default:
                    break;
            }
            $this->getHelper('Redirector')->gotoSimple('update', null, null, array('page' => $session->page));
        } catch (Exception $e) {
            $this->message->addMessage($e->getMessage());
            $this->getHelper('Redirector')->gotoSimple('update', null, null, array('page' => $session->page));
        }
    }

リクエストパラメータは、送信ボタンのラベルとして、URLとして、または自分に合ったものとして渡すことができます。

幸運を!

于 2012-11-29T11:08:21.067 に答える