代码之家  ›  专栏  ›  技术社区  ›  Mittul At TechnoBrave

Cakephp 3-页面没有正确重定向

  •  0
  • Mittul At TechnoBrave  · 技术社区  · 5 年前

    Cakephp 3.x版 其中我在我的 AppController ( )其中我检查了我的逻辑,并根据需要重定向到另一个页面。下面是方法的外观。

    应用程序控制器.php

    public function checkBrandAssigned(){
    
                    $this->loadModel('Users');
    
                    $user_data = $this->Users->find()
                        ->select(['user_id'])                    
                        ->where([                    
                            'user_type' => SALES_REPRESENTETIVE,
                            'user_status' => STATUS_INACTIVE,
                            'user_id NOT IN (SELECT ub_user_id FROM fp_user_brand)'
                        ])
                        ->order([ 'user_modified_date'=>'DESC'])
                        ->first();
    
    
                    if (!empty($user_data)) {
    
                     return $user_data->user_id;   
                    } else {
                        return '';
                    }
    
        }
    

    下面是我的完整片段 文件。

    <?php 
    
    
    class AppController extends Controller {
    
    
        public function initialize() {
        parent::initialize();
    
        switch ($this->request->session()->read('Auth.User.user_type')):
    
            case COMPANY_ADMIN :
    
                $loginRedirectUrl = ['controller' => 'users', 'action' => 'dashboardCompanyAdmin'];
    
                break;
    
            default : $loginRedirectUrl = ['controller' => 'users', 'action' => 'dashboardSalesRep'];
                break;
            endswitch;       
       }
    
    
    
        public function checkBrandAssigned(){
    
                    $this->loadModel('Users');
    
                    $user_data = $this->Users->find()
                        ->select(['user_id'])                    
                        ->where([                    
                            'user_type' => SALES_REPRESENTETIVE,
                            'user_status' => STATUS_INACTIVE,
                            'user_id NOT IN (SELECT ub_user_id FROM fp_user_brand)'
                        ])
                        ->order([ 'user_modified_date'=>'DESC'])
                        ->first();
    
    
                    if (!empty($user_data)) {
    
                     return $user_data->user_id;   
                    } else {
                        return '';
                    }
    
        }
    }
    

    checkBrandAssigned beforeFilter 如果我的情况属实,我会重新定向到, $this->redirect(['controller' => 'Users', 'action' => 'brandRetailerView','?'=>['repId'=>'6b12337d37870e4afb708a20f4f127af']]); .

    下面是我的 用户控制器.php

    用户控制器.php

    class UsersController extends AppController {
    
        public function initialize() {
            parent::initialize();
        }
    
        public function beforeFilter(Event $event) {    
            parent::beforeFilter($event);                
        }
    
    
        public function brandRetailerView() {
            die('inside my function');
    
        }
    
    }
    

    正如你所看到的我 die('inside my function'); 我可以看到这段文字,如果我评论它,我会得到错误的说法。。。

    页面重定向不正确

    我也创造了空白 brand_retailer_view.ctp 在我各自的位置归档。下面是我的错误截图。

    enter image description here

    我也用过 Auth Component . 我想要 brandRetailerView 方法在登录后使用,因此我没有在我的 $this->Auth->allow 应用程序控制器.php 用户控制器.php . 然而,我试图补充 支票品牌分配 $this->Auth->允许

    我试着用 return parent::beforeFilter($event); 在我的 UsersController.php 但它并不起作用。

    我没有在我的 .htaccess 文件,因此我不在这里添加。

    有人能帮我一下我为什么会有这个问题吗。即使我使用 die

    0 回复  |  直到 5 年前
        1
  •  1
  •   Mohd Samgan Khan    5 年前

    问题不在于代码,而在于逻辑

    问题是因为不管checkBrandAssigned()返回的条件如何,重定向都将指向用户控制器,在过滤用户控制器之前,将再次检查条件并将其重新重定向到用户控制器。

    它将成为一个无限的重定向循环,在die()的情况下,它是工作的,因为die()在重定向发生之前中断了循环。

    要解决这个问题,请删除beforeFillter中的重定向检查并将其放到其他位置。。。

    use Cake\Controller\Component\CookieComponent;
    

    并按如下方式更新条件。

    if (!isset($this->Cookie->read('checkedInLast30Secs'))) {
            $this->Cookie->write('checkedInLast30Secs',
                [
                    'value' => true,
                    'expires' => '+30 secs'
                ]
            );
            if (!empty($checkSalesRepId)) {
                $this->redirect(['controller' => 'Users', 'action' => 'brandRetailerView', '?' => ['repId' => '6b12337d37870e4afb708a20f4f127af']]);
    
                //     $this->dashboardUrl = ['controller' => 'users', 'action' => 'brandRetailerView'];
            } else {
                $this->dashboardUrl = ['controller' => 'users', 'action' => 'dashboardCompanyAdmin'];
            }
        }
    
        2
  •  0
  •   Mittul At TechnoBrave    5 年前

    case COMPANY_ADMIN :
    
      if (!empty($checkSalesRepId)) {
    
        if($this->request->params['action'] != 'brandRetailerView'){
            $this->redirect(['controller' => 'Users', 'action' => 'brandRetailerView','?'=>['repId'=>$checkSalesRepId]]);
        }                        
        else {
            $this->dashboardUrl = ['controller' => 'users', 'action' => 'dashboardSalesManager'];
        }
    
    }
    

    这里我只是检查一下当前的操作是否 brandRetailerView . 如果是,我将重定向到 佩奇,否则 dashboardSalesManager 第页。

    希望这有帮助。