0

全てにおいて良い日。私は現在、cakePHPを使用してチャットアプリケーションを開発しています。質問への回答に焦点を当てたチャットアプリケーションになります。つまり、ユーザーは自分の質問に基づいて自動応答を受け取ります。私は現在、ユーザーがログインする必要のないチャットインターフェイスに取り組んでいます。チャットアプリケーションは、ユーザーが質問を送信した後にのみデータベーステーブルと対話します。今私の問題は、質問をコントローラーのメソッドに送信して、そこで解析する方法です。ビューファイルで次のことを実行しようとしました。

<!--View/People/index.ctp-->
<h1>This is the chat interface</h1>
<?php $this->Html->charset(); ?>

<p>
<!--This is the text area where the response will be shown-->
<?php
echo $this->Form->create(null);
echo $this->Form->textarea('responseArea', array('readonly' => true, 'placeholder' => 
'***********************************************************************************
WELCOME! I am SANTI. I will be the one to answer your questions regarding the enrollment process 
and other information related to it. ***********************************************************************************', 'class' => 'appRespArea'));
echo $this->Form->end();
?>
</p>

<p>
<!--This is the text area where the user will type his/her question-->
<?php 
echo $this->Form->create(null, array('type' => 'get', 'controller' => 'people', 'action' => 'send', ));
echo $this->Form->textarea('userArea', array('placeholder' => 'Please type your question here', 'class' => 'userTextArea'));
echo $this->Form->end('Send');
?>
</p>

これはコントローラーです:

<!--Controller/PeopleController.php-->
<?php
class PeopleController extends AppController{
    public $helpers = array('Form');

    public function index(){

    }

    public function send(){
        //parsing logic goes here
    }
}
?>

ご覧のとおり、index.ctpのフォームに、PeopleControllerのsend()メソッドをポイントするように指示しているので、データベースと対話する前に質問を解析できます。ボタンをクリックしたときに発生する問題は、常に/ users / loginにリダイレクトされることですが、これは私が望んでいることではありません。アプリケーションが/people/sendを指すようにしたいだけです。その場合の問題は何だと思われますか?私はインターネットとドキュメントの両方で答えを探してテストしましたが、これまでのところ問題を解決するものはありません。誰かがこれについて私を助けてくれますか?私はこれを何日も解決しようとしてきました。

私はこのエラーを受け取り続けます:

Missing Method in UsersController
Error: The action *login* is not defined in controller *UsersController*

Error: Create *UsersController::login()* in file: app\Controller\UsersController.php.

<?php
class UsersController extends AppController {


public function login() {

}

}
4

1 に答える 1

1

Auth Componentを使用している場合は、PeopleControllerコードを変更する必要がある場合があります。

<!--Controller/PeopleController.php-->
<?php
class PeopleController extends AppController{
    public $helpers = array('Form');

   public beforeFilter()
   {
      parent:: beforeFilter();
      $this->Auth->allow('index', 'send');
   }

   public function index(){

   }

   public function send(){
    //parsing logic goes here
   }
}
?>

これは、フォームアクションとして人/送信を使用したためです。また、ユーザーはログインしていません。つまり、認証セッションが設定されていません。そのため、常にユーザーをログインページにリダイレクトし、ログインページがない場合は、エラーが表示されます。

そこで、send()メソッドもパブリックにして、誰でもアクセスできるようにしました。この概念がお役に立てば幸いです。

于 2012-08-29T10:13:03.127 に答える