2012-08-29 59 views
0

所有的好日子。我目前正在使用cakePHP開發一個聊天應用程序。這將是一個專注於回答問題的聊天應用程序。這意味着用戶將收到基於他/她的問題的自動回覆。我正在使用聊天界面,不需要用戶登錄。一旦用戶發送問題,聊天應用程序將只與數據庫表交互。現在我的問題是如何將問題發送到控制器中將被解析的方法。我試着做下面的視圖文件:將字符串/文本發送到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() { 

} 

} 
+0

爲什麼你在這裏使用GET而不是POST來表單提交?那不是要走的路,正如你所看到的那樣,這個問題在你可能還沒有掌握的方面會變得複雜。 – mark

+0

您是否在應用程序中使用了acl和auth,那麼您必須管理控制器和操作的權限 – Krishna

+0

在將它切換到GET之前,我使用了POST。在使用GET之前,我得到了錯誤,所以我認爲將它切換回POST不會解決問題。 – Jairo

回答

1

如果您正在使用驗證組件,那麼你可能需要改變你的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 
    } 
} 
?> 

這是因爲你使用的人/作爲表單行動發送。並且用戶沒有登錄,這意味着沒有設置任何Auth會話。這就是爲什麼它總是將用戶重定向到登錄頁面,並且如果沒有登錄頁面,則會顯示錯誤。

所以我讓send()方法也是公開的,這樣任何人都可以訪問它。 希望這個概念能幫助你。

+0

非常感謝您的幫助。有效。 :) 現在我懂了。我認爲Auth允許用戶訪問的是.ctp文件。正因爲如此,我真的需要分配更多時間來理解cakePHP。 – Jairo

+0

隨時,在這裏提出你的問題,並要求我回答。 :) –

相關問題