2012-05-25 2 views
0

я попробовал код из тэ источникаРабота на cjuiautocomplete Показаны Exception

Source Code i used for CJUIAutoComplete

не получаю где ошибка ошибка показывает, как не авторизованы, пожалуйста, помогите мне, я новичок в фреймворка и для отладки также ,

Вот идет моя ошибка входа

2012/05/25 06:07:28 [error] [exception.CHttpException.403] exception 'CHttpException' with message 'You are not authorized to perform this action.' in C:\wamp\yii\framework\web\auth\CAccessControlFilter.php:157 

Stack trace: 
#0 C:\wamp\yii\framework\web\auth\CAccessControlFilter.php(120) CAccessControlFilter->accessDenied(Object(CWebUser), 'You are not aut...') 
#1 C:\wamp\yii\framework\web\filters\CFilter.php(39) CAccessControlFilter->preFilter(Object(CFilterChain)) 

#2 C:\wamp\yii\framework\web\CController.php(1146): CFilter->filter(Object(CFilterChain)) 
#3 C:\wamp\yii\framework\web\filters\CInlineFilter.php(59) CController->filterAccessControl(Object(CFilterChain)) 


#4 C:\wamp\yii\framework\web\filters\CFilterChain.php(131) CInlineFilter->filter(Object(CFilterChain)) 

#5 C:\wamp\yii\framework\web\CController.php(292): CFilterChain->run() 

#6 C:\wamp\yii\framework\web\CController.php(266): CController->runActionWithFilters(Object(CInlineAction), Array) 

#7 C:\wamp\yii\framework\web\CWebApplication.php(276): CController->run('autocompleteTes...') 

#8 C:\wamp\yii\framework\web\CWebApplication.php(135): CWebApplication->runController('details/autocom...') 

#9 C:\wamp\yii\framework\base\CApplication.php(162): CWebApplication->processRequest() 

#10 C:\wamp\www\myapp\index.php(13): CApplication->run() 

#11 {main} 
REQUEST_URI=/myapp/index.php?r=details/autocompleteTest&term=asss 
HTTP_REFERER=http://localhost/myapp/index.php?r=details/create 

Controller Кодекс

<?php 
class DetailsController extends Controller 
{ 
/** 
* @var string the default layout for the views. Defaults to '//layouts/column2', meaning 
* using two-column layout. See 'protected/views/layouts/column2.php'. 
*/ 
public $layout='//layouts/column2'; 

/** 
* @return array action filters 
*/ 
public function filters() 
{ 
    return array(
     'accessControl', // perform access control for CRUD operations 
    ); 
} 

    public function actionAutocompleteTest() { 
$res =array(); 

if (isset($_GET['term'])) { 
    $qtxt ="SELECT name FROM {{details}} WHERE name LIKE :username"; 
    $command =Yii::app()->db->createCommand($qtxt); 
    $command->bindValue(":name", '%'.$_GET['term'].'%', PDO::PARAM_STR); 
    $res =$command->queryColumn(); 
} 

echo CJSON::encode($res); 
Yii::app()->end(); 
} 


/** 
* Specifies the access control rules. 
* This method is used by the 'accessControl' filter. 
* @return array access control rules 
*/ 
public function accessRules() 
{ 
    return array(
     array('allow', // allow all users to perform 'index' and 'view' actions 
      'actions'=>array('index','view'), 
      'users'=>array('*'), 
     ), 
     array('allow', // allow authenticated user to perform 'create' and 'update' actions 
      'actions'=>array('create','update'), 
      'users'=>array('@'), 
     ), 
     array('allow', // allow admin user to perform 'admin' and 'delete' actions 
      'actions'=>array('admin','delete'), 
      'users'=>array('admin'), 
     ), 
     array('deny', // deny all users 
      'users'=>array('*'), 
     ), 
    ); 
} 

/** 
* Displays a particular model. 
* @param integer $id the ID of the model to be displayed 
*/ 
public function actionView($id) 
{ 
    $this->render('view',array(
     'model'=>$this->loadModel($id), 
    )); 
} 

/** 
* Creates a new model. 
* If creation is successful, the browser will be redirected to the 'view' page. 
*/ 
public function actionCreate() 
{ 
    $model=new Details; 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

    if(isset($_POST['Details'])) 
    { 
     $model->attributes=$_POST['Details']; 
     if($model->save()) 
      $this->redirect(array('view','id'=>$model->id1)); 
    } 

    $this->render('create',array(
     'model'=>$model, 
    )); 
} 

/** 
* Updates a particular model. 
* If update is successful, the browser will be redirected to the 'view' page. 
* @param integer $id the ID of the model to be updated 
*/ 
public function actionUpdate($id) 
{ 
    $model=$this->loadModel($id); 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

    if(isset($_POST['Details'])) 
    { 
     $model->attributes=$_POST['Details']; 
     if($model->save()) 
      $this->redirect(array('view','id'=>$model->id1)); 
    } 

    $this->render('update',array(
     'model'=>$model, 
    )); 
} 

/** 
* Deletes a particular model. 
* If deletion is successful, the browser will be redirected to the 'admin' page. 
* @param integer $id the ID of the model to be deleted 
*/ 
public function actionDelete($id) 
{ 
    if(Yii::app()->request->isPostRequest) 
    { 
     // we only allow deletion via POST request 
     $this->loadModel($id)->delete(); 

     // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser 
     if(!isset($_GET['ajax'])) 
      $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin')); 
    } 
    else 
     throw new CHttpException(400,'Invalid request. Please do not repeat this request again.'); 
} 

/** 
* Lists all models. 
*/ 
public function actionIndex() 
{ 
    $dataProvider=new CActiveDataProvider('Details'); 
    $this->render('index',array(
     'dataProvider'=>$dataProvider, 
    )); 
} 

/** 
* Manages all models. 
*/ 
public function actionAdmin() 
{ 
    $model=new Details('search'); 
    $model->unsetAttributes(); // clear any default values 
    if(isset($_GET['Details'])) 
     $model->attributes=$_GET['Details']; 

    $this->render('admin',array(
     'model'=>$model, 
    )); 
} 

/** 
* Returns the data model based on the primary key given in the GET variable. 
* If the data model is not found, an HTTP exception will be raised. 
* @param integer the ID of the model to be loaded 
*/ 
public function loadModel($id) 
{ 
    $model=Details::model()->findByPk($id); 
    if($model===null) 
     throw new CHttpException(404,'The requested page does not exist.'); 
    return $model; 
} 



/** 
* Performs the AJAX validation. 
* @param CModel the model to be validated 
*/ 
protected function performAjaxValidation($model) 
{ 
    if(isset($_POST['ajax']) && $_POST['ajax']==='details-form') 
    { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 
} 
} 

Форма Код

<div class="form"> 

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'details-form', 
    'enableAjaxValidation'=>false, 
)); ?> 

    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <?php echo $form->errorSummary($model); ?> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'id'); ?> 


     <?php echo $form->textField($model,'id'); ?> 
     <?php echo $form->error($model,'id'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'name'); ?> 
     <?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
    'name'=>'test1', 
    'value'=>'test21', 
    'source'=>$this->createUrl('details/autocompleteTest'), 
    // additional javascript options for the autocomplete plugin 
    'options'=>array(
      'showAnim'=>'fold', 
    ), 
)); 
    ?> 
       <?php echo $form->error($model,'name'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'phone'); ?> 
     <?php echo $form->textField($model,'phone'); ?> 
     <?php echo $form->error($model,'phone'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'email'); ?> 
     <?php echo $form->textField($model,'email'); ?> 
     <?php echo $form->error($model,'email'); ?> 
    </div> 

    <div class="row buttons"> 
     <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?> 
    </div> 

<?php $this->endWidget(); ?> 

</div><!-- form --> 

Благодаря Devendar

ответ

0

Попробуйте его очень просто для вас ..

public function actionAutoCompleteLookup() 
     { 
      if(Yii::app()->request->isAjaxRequest && isset($_GET['q'])) 
      { 

       $name = $_GET['q']; 

       $qtxt ="SELECT name FROM details WHERE name LIKE '%".$name."%'"; 
       $command =Yii::app()->db->createCommand($qtxt); 

       $userArray =$command->queryColumn(); 

       $returnVal = ''; 
       foreach($userArray as $userAccount) 
       { 
       $returnVal .= $userAccount->getAttribute('first_name').'|' 
              .$userAccount->getAttribute('user_id')."\n"; 
       } 
       echo $returnVal; 
      } 
     } 

А в коде представления, как это ..

<?php $this->widget('CAutoComplete', 
      array(
         //name of the html field that will be generated 
      'name'=>'name', 
         //replace controller/action with real ids 
      'url'=>array('detail/AutoCompleteLookup'), 
      'max'=>10, //specifies the max number of items to display 

         //specifies the number of chars that must be entered 
         //before autocomplete initiates a lookup 

      )); 
    ?> 

его работа прекрасна ...

+0

i скопировано как есть - показ этой ошибки в журнале ошибок 2012/05/25 06:55:48 [error] [exception.CHttpException.404] exception 'CHttpException' с сообщением «Невозможно разрешить запрос« admin/AutoCompleteLookup ». ' в C: \ wamp \ yii \ framework \ web \ CWebApplication.php: 280 Трассировка стека: # 0 C: \ wamp \ yii \ framework \ web \ CWebApplication.php (135): CWebApplication-> runController ('admin/AutoCompl ... ') # 1 C: \ wamp \ yii \ framework \ base \ CApplication.php (162): CWebApplication-> processRequest() # 2 C: \ wamp \ www \ myapp \ index.php (13): CApplication-> run() – Devendar

+0

# 3 {main} REQUEST_URI =/myapp/index.php? R = admin/AutoCompleteLookup & q = de & limit = 10 & timestamp = 1337928948219 HTTP_REFERER = http: //localhost/myapp/index.php? r = details/create – Devendar

+0

в поле зрения дают неправильный Url ...исправить url как 'url' => массив ('Имя контроллера/AutoCompleteLookup'); –

1

Вы должны обновить DetailController:

array('allow', 
     // allow authenticated user to perform 'create', 'update' and 'autocompleteTest' actions 
     'actions'=>array('create','update', 'autocompleteTest'), 
     'users'=>array('@'), 
), 
+0

@Segey Спасибо за ответ - но все же показывая ту же ошибку Журнал – Devendar

+0

Я добавил вышеуказанный код в DetailConstroller под действиемAutocompleteTest() - это правильно? – Devendar

+0

Я добавил в accessrules - но также то же сообщение в журнале ошибок – Devendar

0

Код контроллера :

имя является атрибутом модели (таблица базы данных)

public function actionAutoCompleteLookup() { 
    $res =array(); 

    if (isset($_GET['term'])) { 

     $qtxt ="SELECT name FROM customer WHERE name LIKE :name"; 
     $command =Yii::app()->db->createCommand($qtxt); 
     $command->bindValue(":name", '%'.$_GET['term'].'%', PDO::PARAM_STR); 
     $res =$command->queryColumn(); 
    } 

    echo CJSON::encode($res); 
    Yii::app()->end(); 
} 

View Code

Создать URL - имя контроллера/актин (Название функции U записано в контроллере)

 <?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
    'name'=>'test2', 
    'source'=>$this->createUrl('Customer/AutoCompleteLookup'), 

      'options'=>array(
      'showAnim'=>'fold', 
      ), 
)); 
    ?> 

Благодаря Stackoverflow

Смежные вопросы