2017-11-21 1 views
0

私はZend Frameworkで非常に新しいです。 jQueryの$ .post経由でデータベース内の行を削除したがっていた。 私はGoogleとYoutubeについても多くの研究をしましたが、残念ながら結果は得られませんでした。 私を助けてください。 ZFのバージョン:1.11.2Zend FrameworkのAjax投稿

アプリケーション/ bootstrap.phpの:

protected function _initDb(){ 
$con=array('host'=>'127.0.0.1','username'=>'root','password'=>'','dbname'=>'sample_db'); 
    $db=Zend_Db::factory('Pdo_Mysql',$con);$db->query("SET NAMES 'utf8'"); 
    Zend_Registry::set('db',$db); 
} 

アプリケーション/コントローラ/ DashboardController.php:

public function indexAction(){ 
    $this->_helper->layout->setLayout('a'); 
} 

アプリケーション/ビュー/スクリプト/ダッシュボード/ index.phtmlを:

<a href="javascript:deleteTest('62989c12369ea3c1')">DELETE</a> 

公開/のJS/0.js:

function deleteTest(id){ 
    if(confirm('Are you sure?')) 
     $.post('http://127.0.0.1/Sample4/application/models/Guestdb.php',{funcName:'Delete_Test',id:id},function(r){alert(r)}) 
} 

アプリケーション/モデル/ Guestdb.php:

class Model_Guestdb{ 
    public function Delete_Test(){ 
    $db=Zend_Registry::get('db'); 
     $r=$db->query("DELETE FROM `prac` WHERE `id`='".trim((new Zend_Filter_Decrypt(array('adapter'=>'mcrypt','key'=>'thisisakeytolock','vector'=>'myvector')))->filter(hex2bin($this->getRequest()->getPost()['id'])))."'"); 
     echo$r?'t':'f'; 
    } 
} 
$a=new Model_Guestdb(); 
if(isset($_POST['funcName']))call_user_func(array($a,$_POST['funcName'])); 
elseif(isset($_GET['funcName']))call_user_func(array($a,$_GET['funcName'])); 

出力:事前に私の英語は私を助けてください

ありがとう

Fatal error: Uncaught Error: Class 'Zend_Registry' not found in C:\xampp\htdocs\Sample4\application\models\Guestdb.php:6 Stack trace: #0 C:\xampp\htdocs\Sample4\application\models\Guestdb.php(35): Model_Guestdb->Delete_Test() #1 {main} thrown in C:\xampp\htdocs\Sample4\application\models\Guestdb.php on line 6 

申し訳ありませんが

+0

"クラス 'Zend_Registry'が見つかりません"あなたのプロジェクトにZend_Registryがありますか?あなたがzfで新しい人でも、zf1では動作しません。それはすでにeolが渡されています。ちょうどzf3を使用してください。 –

+0

@MehmetSöĞÜNMEZご覧のとおり、Bootstrap.phpでZend_Registryを使用しても問題ありません。 問題は私のAjaxに関連しているか、Guestdbに関連しています。 – WeLoveLinux

+1

問題は次のとおりです。モデルに直接リクエストしています: "$ .post( 'http://127.0.0.1/Sample4/application/models/Guestdb.php'")ルーティング、コントローラアクション、あなたのpublic/index.phpを見て、コントローラファイル(DefaultController.phpやIndexController.phpなど)とこれらの内部で定義されているアクション(例えばindexAction())を見つけてください。始めてみましょう。 –

答えて

0

私は解決しましたこの問題は次のようになります。

アプリケーション/ビュー/スクリプト/ダッシュボード/ index.phtmlを:

<a href="javascript:del('210')">DELETE</a> 

公開/ JS/0.js:

function del(id){ 
    if(confirm('Are you sure?')) 
     $.post('ajax',{func:'del',table:'prac',id:id}, 
      function(r){r=='t'?location.reload():alert('Error!')}) 
} 

アプリケーション/コントローラ/ DashboardController.php:

<?php 
class DashboardController extends Zend_Controller_Action{ 
    public function ajaxAction(){ 
     $this->_helper->layout->disableLayout(); 
     $ajax=$this->getRequest()->getPost();$func=$ajax['func']; 
     (new Model_Guestdb)->$func($ajax['table'],$ajax['id']); 
    } 
} 

アプリケーション/モデル/ゲストdb.php:

class Model_Guestdb{ 
    public function del($table,$id){ 
     echo Zend_Registry::get('db')->query 
     ("DELETE FROM `$table` WHERE `id`='$id'")?'t':'f'; 
    } 
} 

友だちのコメントありがとうございます。