Нужна помощь в определении проблемы при обновлении - PullRequest
0 голосов
/ 11 декабря 2011

У меня проблемы с обновлением записей с использованием cakephp, это второй раз, когда это происходит, и я не могу понять, что это такое. Когда я нажимаю «Отправить», чтобы обновить запись всегда, она всегда отправляет меня к логину ион либо регистрирует меня, либо выходит из системы .. Я не понимаю .. и он никогда не обновляет запись, он просто переходит к элементу входа в систему ... страница регистрации - то же самое .. это работало раньше ... единственное, что я изменил.. был в app_controller вместо того, чтобы указывать элементы управления, чтобы разрешить, я просто добавил '*' для всех, и теперь он не позволяет обновлять или сохранять что-либо .. причина, по которой я это сделал, была в том, что другие страницы, которые находятся в pages / contact_us илиpages / about_us они также блокировались Auth, но с '*' он исчез.

В моем App_Controller я настроил его так, чтобы разрешить все в фильтре before, в том числе и в самом контроллере.снова beforeFilter, повторяющий то же самое .. Я пробовал обо всем .. Вот мой код

App_Controller

<?php
class AppController extends Controller {    

    var $helpers = array('Html', 'Form', 'Javascript', 'Session'); 
    var $components = array('Auth', 'Session');

    function beforeFilter() {

       $this->Auth->allowedActions = array('*');
       $this->Auth->autoRedirect = false;

      } 
}
?>

один из моих контроллеров, где я обновляю

<?php

class DishRatingsController extends AppController {

      function list_ratings() { 

         $this->loadModel('Dish');
         $this->set('list_ratings', $this->Dish->find('all')); 
         $this->layout = 'master_layout';

      }

      function  rate_dish($id = null)
      {
        $this->layout = 'master_layout';

        $this->set('rate_dishes', $this->DishRating->find('all', array(
            'conditions' => array(
               'Dish.id' => $id
          )
        )));

         if(!empty($this->data)) {         
             if($this->DishRating->save($this->data)) {                        
                $this->Session->setFlash("Rating Saved!");             
                 $this->redirect(array('action' => 'dish_ratings'));                  
             }         

        // set master layout
     }
    }

    function beforeFilter() {
       parent::beforeFilter(); 
       $this->Auth->allowedActions = array('*');

      } 

}

и мой взгляд, где кнопка отправки

<?php

 echo $this->Form->create('DishRating', array('action' => 'rate_dish'));

 echo '<div><h3>Rate this Dish...</h3><p>You can rate this dish on this page and view other ratings from out customers...   </p></div>
    <table id="recipes">
     <tr>
         <td style="padding:10px;">';
         //<input type="hidden" name="userID" value="'.$rate_dishes[0]["DishRating"]["user_id"].'">
         echo $this->Form->hidden('id', array('value'=> $rate_dishes[0]["DishRating"]["user_id"]));
         //<input type="hidden" name="dish_id" value="'.$dish_rateid.'">
         echo $this->Form->hidden('rate_id', array('value'=> $rate_dishes[0]["DishRating"]["dish_id"]));
         echo '
         <span style="font-size: 20px; vertical-align:top;">Comments</span>
         </td>
         <td style="padding:10px;">';
         echo $this->Form->input('comments', array('type' => 'textarea', 'escape' => false , 'rows'=>'2','cols'=>'40', 'div' =>'false', 'label'=>''));
         //<textarea name="comments" cols="40" rows="2"></textarea>
         echo '</td>
         <td>
         <div>
          <input name="star1000" value "1" type="radio" class="star"/>
          <input name="star1000" value="2" type="radio" class="star"/>
          <input name="star1000" value="3" type="radio" class="star"/>
          <input name="star1000" value="4" type="radio" class="star"/>
          <input name="star1000" value="5" type="radio" class="star"/> 
          </div>
         </td>
         <td>';
          // <input type="submit" value="Submit" name="submitrating" class="button"/>
         echo $this->Form->end(array('value'=>'Submit','name'=>'submitrating', 'type' =>'submit', 'class'=>'button'));
         echo '</td>
    <tr>
    </table>'; 

      print("<table id='results'><tr><th>User Name</th><th>Comments</th><th>Star Rating</th></tr>");
     $j = 0;

         foreach ($rate_dishes as $key => $rate_dish):

         print("<tr>");   
         print("<td width='20px'>");
         print("<p style='font-size:14px; color:blue; padding:0;'>".$rate_dishes[$j]['User']['username']."</p>");

         print("</td>");          
         print("<td width='100px'>");
         print("<p style='font-size:14px; color:blue; padding:0;'>".$rate_dishes[$j]['DishRating']['rate_comments']."</p>");
         print("</td>");
         print("<td width='100px'>");
         print("<div>");
         for($i = 1; $i < 6;$i++)
         {
          if($i != $rate_dishes[$j]['DishRating']['rate_num'])
          {
              echo  '<input name="star'.$j.'"  type="radio" class="star" disabled="disabled"/>';
          } 
          else 
          {
              echo  '<input name="star'.$j.'"  type="radio" class="star" disabled="disabled" checked="checked"/>';
          }
         }
         print("</div>");
         print("</td>");
         print("</tr>");
         $j++;
         endforeach;

         print("</table>");      

      if($j> 6)
     {
         echo '<div id="pageNavPosition"></div>
         <div>&nbsp;</div>';      


           echo $this->Html->script('padminbottom.js');
     }
  ?>

Пожалуйста, помогите решить эту проблему, у меня естьисследовали, пошли к кулинарной книге тортPHP, ничего ...

1 Ответ

0 голосов
/ 12 декабря 2011

, если вы хотите разрешить каждое действие каждого контроллера, ваш beforeFilter в app_controller должен быть похож на

   function beforeFilter() {

       $this->Auth->allow('*');
       $this->Auth->autoRedirect = false;

  }

, указав $this->allowedActions - это другое, и в этом случае ваша переменная authorize Auth должнабыть установлен на «контроллер».Это означает, что всякий раз, когда пользователь запрашивает действие, его / ее проверяют на правильное имя пользователя и пароль.После этого пользователь будет проверен функцией isAuthorize(), реализованной каждым контроллером для предоставления доступа на основе некоторой дополнительной логики.

Поскольку вы не используете эту функцию, вам не нужно указывать allowedAction.Если вы используете контроллер для авторизации, указав allowedActions, вы разрешите определенные действия по умолчанию, не отмечая их в Controller::isAuthorize().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...