زمان جاری: 2012/05/23, 03:58 AM خوش آمدید مهمان گرامی! (ورودعضویت)



مشکل در یک کنترلر


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
مشکل در یک کنترلر
نویسنده پیام
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #1
مشکل در یک کنترلر
با سلام به همه بچه ها کیکی

آقا من یک کنترلر نوشتم زمانی که کاربر از کنترلر index به delete میره و record مورد نظرشو حذف میکنه زمانه redirect شدن مجدد به Index کاربر مجددا به صفحه لاگین redirect میشه در حالی که سشنش هست و همون موقع که لاگین مجدد میشه دوباره اون عملایات رو انجام بده دوباره میره برای لاگین

کسی دلیلشو میدونه ؟
2011/07/22 09:56 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #2
RE: مشکل در یک کنترلر
سلام بر شما

جندین حالت امکان پذیر هست :

1- اگر از beforFilter تو کنترلرتون استفاده کردید حتما پدر کنترلر رو فراخوانی کنید.

کد PHP:
function beforeFilter(){
parent::beforeFilter();


2- یک بار تمام اکشن ها رو allow کنید. ببینید ری دایرکت صحیح انجام میشه یا خیر.


در غیر این صورت کنترل خودتون رو قرار بدید. تا بررسی کنیم.
2011/07/22 10:04 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : ghasem.fattahpour
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #3
RE: مشکل در یک کنترلر
در حالت allow ریدایرکت درست انجام میشه

کنترلر

کد PHP:
class ReciveController extends AppController {

    public 
$name 'Recive';
  

   

    public function 
customer_inbox() {

       
$this->set('title_for_layout'__('    ليست پيام هاي دريافتي 'true));


       
$this->paginate = array(
            
'Recive' => array(
                
'conditions' => array('username' => $this->Auth->user('username'),'owner' => $this->Auth->user('owner')),
                
'limit' => 10,
                
'order' => array('created' => 'DESC')
            ),
         );

       
$this->set('Recive'$this->paginate('Recive'));


    }

    public function 
customer_delete($id null) {
        if (!
$id) {
            
$this->Session->setFlash(__('Invalid id for message'true));
            
$this->redirect($this->referer());
        }



        if (
$this->Recive->delete(array('id' => $id,'username' => $this->Auth->user('username'),'owner' => $this->Auth->user('owner')))) {
            
$this->Session->setFlash(__('پيام با موفقيت از سيستم حذف شد'true));
            
$this->redirect('/customer/recive/inbox');
        }
    }

   



2011/07/22 11:18 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #4
RE: مشکل در یک کنترلر
این مقدار رو امتحان کنید.

کد PHP:
$this->redirect(array('action'=>'index')); 
2011/07/22 11:21 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #5
RE: مشکل در یک کنترلر
بازم نشد Undecided
آقا کنترلر های دیگه رو هم تست زدم همینطوره
(آخرین تغییر در این ارسال: 2011/07/22 11:30 AM توسط sajadonline.)
2011/07/22 11:28 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #6
RE: مشکل در یک کنترلر
تو اکشنتون این کد رو اجرا کنید.

کد PHP:
pr(Router::url(array('action'=>'index'))); 
ببینید /customer/recive/inbox خروجی میده یا نه. درضمن از ACL استفاده کردید یا خیر؟

در غیر این صورت
لطفا خروجی کد زیر رو برای من قرار بدید.
کد PHP:
public function customer_delete($id null) {
pr($this);


درضمن دیباگ رو روی 1 قرار بدید یا 2 .
2011/07/22 11:50 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #7
RE: مشکل در یک کنترلر
acl استفاده نمیکنم

من به جای Index از Inbox استفاده کردم

خروجی

/customer/recive/inbox



کد PHP:
http://pastebin.com/LFRDvU4i 
(آخرین تغییر در این ارسال: 2011/07/23 12:45 AM توسط saleh.)
2011/07/22 11:57 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #8
RE: مشکل در یک کنترلر
مشکلتون در تنظیمات کامپوننت Auth هست.



در آخرین ورژن کیک 1.3 یک سری فیلتر ها اضافه شده. داکیومنت رو نگاه کنید. مخصوص سر استفاده از پرفیکس ها.
2011/07/22 12:15 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #9
RE: مشکل در یک کنترلر
والا من دیگه هنگ شدم ، اگه میشه بیشتر راهنمایی کنین

app_controller
کد PHP:
<?php

class AppController extends Controller {


    public 
$components = array(
        
'Security',
        
'Auth',
        
'Session',
        
'RequestHandler',


    );

    public 
$paginate = array('limit' => 10);

    public 
$helpers = array(
        
'Html',
        
'Form',
        
'Session',
        
'persiandate',
        
'Ajax',
        
'Javascript'






    
);

    public function 
beforeFilter() {


        
$this->loadModel('Configuration');
        if (isset(
$this->Configuration) && !empty($this->Configuration->table))
         {
             
$this->Configuration->load();
         }

         if (
$this->RequestHandler->isMobile()) {
            
$this->autoRender false;
         }

         if (isset(
$this->params['admin'])) {
            
$this->layout 'admin';
         }

         if (isset(
$this->params['reseller'])) {
            
$this->layout 'reseller';
         }

          if (isset(
$this->params['customer'])) {
            
$this->layout 'customer';
         }





          
Security::setHash('md5');


        
$this->Auth->loginRedirect = array('controller' => 'home''action' => 'index');
        
$this->Auth->userScope = array('User.status' => true);
        
$this->Auth->loginError "invalid u/p";
        
$this->Auth->allow(array('get'));

       
// $this->set('userinfo',$this->Auth->user());


    
}

    public function 
afterFilter(){
        if (
$this->RequestHandler->isMobile()) {
            
$this->render($this->action'mobile''mobile_'.$this->action);
        }
    }




    public function 
__securityError() {
        
$this->cakeError('securityError');
    }

}
?>
2011/07/22 12:24 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #10
RE: مشکل در یک کنترلر
درست حدس زده بودم تنظیمات کامپوننت Auth ناقصه. مثلا شما نابع isAuthorized() رو ندارید. اصلا سطح Auth رو مشخص نکردید. داکیومنت رو مطالعه کنید.
کد PHP:
$this->Auth->loginRedirect = array('controller' => 'home''action' => 'index');
        
$this->Auth->userScope = array('User.status' => true);
        
$this->Auth->loginError "invalid u/p";
        
$this->Auth->allow(array('get')); 
2011/07/22 12:56 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #11
RE: مشکل در یک کنترلر
بازم نشد

کد PHP:
<?php

class AppController extends Controller {


    public 
$components = array(
        
'Security',
        
'Auth' ,
        
'Session',
        
'RequestHandler',


    );

    public 
$paginate = array('limit' => 10);

    public 
$helpers = array(
        
'Html',
        
'Form',
        
'Session',
        
'persiandate',
        
'Ajax',
        
'Javascript'






    
);

    public function 
beforeFilter() {


        
Security::setHash('md5');


        
$this->loadModel('Configuration');
        if (isset(
$this->Configuration) && !empty($this->Configuration->table))
         {
             
$this->Configuration->load();
         }

         if (
$this->RequestHandler->isMobile()) {
            
$this->autoRender false;
         }

         if (isset(
$this->params['admin'])) {
            
$this->layout 'admin';
         }

         if (isset(
$this->params['reseller'])) {
            
$this->layout 'reseller';
         }

          if (isset(
$this->params['customer'])) {
            
$this->layout 'customer';
         }








        
$this->Auth->loginRedirect = array('controller' => 'home''action' => 'index');
        
$this->Auth->userScope = array('User.status' => true);
        
$this->Auth->loginError "This message shows up when the wrong credentials are used";
        
$this->Auth->authError "This error shows up with the user tries to access a part of the website that is protected.";
        
$this->Auth->allow(array('get'));
        
$this->Auth->authorize 'controller';

       
// $this->set('userinfo',$this->Auth->user());


    
}

    public function 
isAuthorized()
    {


       if (
$this->action == 'customer_delete') {
            if (
$this->Auth->user('usertype') == 'user') {
            return 
true;
            } else {
                return 
false;
            }
        }
        return 
true;
        }

    public function 
afterFilter(){
        if (
$this->RequestHandler->isMobile()) {
            
$this->render($this->action'mobile''mobile_'.$this->action);
        }
    }




    public function 
__securityError() {
        
$this->cakeError('securityError');
    }

}
?>
2011/07/22 01:38 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #12
RE: مشکل در یک کنترلر
دوست عزیز مقدار تلاش کنید.

شما برای تست کد زیر رو جایگزین کد خودتون کنید.

کد PHP:
function isAuthorized(){

      if ( 
$this->Auth->user() ) 
      {
      
           return 
true;
      }
          
            
        return 
false;
      
    } 

نتیجه رو ببینید.
2011/07/22 05:28 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ghasem.fattahpour آفلاین
Super Moderator
******

ارسال‌ها: 234
تاریخ عضویت: Aug 2010
رتبه: 7
تشکر: 176
241 بار تشکر شده در 114 پست
ارسال: #13
RE: مشکل در یک کنترلر
البته اینطوری که گفته شده در cakephp2 خیلی از مشکلات Auth حل شده!

آنچه می نویسم نشانه دانایی من نیست، نشانه آنچه می دانم است.
---------------------------------------------------------------------------
2011/07/22 05:31 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #14
RE: مشکل در یک کنترلر
حتی این حالت هم جواب نمیده

کد PHP:
function isAuthorized(){

           
           return 
true;

    } 
2011/07/22 11:36 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #15
RE: مشکل در یک کنترلر
متاسفانه کن چندین بار گفتم داکیومنت رو نگاه کنید. نکردید. سعی کردم تیکه تیکه مشکلات رو نشون بدم که در اهراز هویت مشکل دارید. اما گویا شما فقط می خواهید از شر این مشکل راحت بشید.

کد PHP:
public function beforeFilter()
    {
        
Security::setHash('md5');
        
$this->Auth->allow('index','view','login','intro','logout','category','biography','contact');
$this->Auth->userScope = array('User.active' => true);
        
$this->Auth->authorize 'controller';
        
$this->Auth->fields = array('username' => 'username' ,'password' => 'password' );
        
$this->Auth->loginAction = array( 'admin' => true'plugin'=>false,  'controller' => 'users''action' => 'login' );
        
$this->Auth->logoutRedirect '/'
        
$this->Auth->loginRedirect = array('admin' => true'plugin'=>false'controller' => 'dashboards');
        
$this->Auth->autoRedirect false;
        
$this->Auth->loginError "خطا در ورود به سایت";
        
$this->Auth->authError "دستریسی برای شما مقدور نیست";

      

        if (
$this->Loader->IsAdmin())
            
$this->layout 'backend';
        else
            
$this->layout 'front';
    }



    function 
isAuthorized()
    {
   if ( 
$this->Auth->user() )
            return 
true;
        return 
false;
        
       
    } 

حالا خودتون یک بار مقایسه کنید.
درضمن کش رو کاملا غیر فععال کنید. به صورت دستی تمامی فایل های کش رو در فولدر /tmp/* حذف کنید.

اگر باز مشکل داشتید. کل پروژه ررو آپلو کنید. منظورم کنترلر هاست
2011/07/23 12:41 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : sajadonline ghasem.fattahpour
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #16
RE: مشکل در یک کنترلر
در این حالت مشکلم حل شد

کد PHP:
$this->Auth->loginRedirect = array('controller' => 'home''action' => 'index');
        
$this->Auth->userScope = array('User.status' => true);
        
$this->Auth->loginError "خطا در ورود به سایت";
        
$this->Auth->authError "دستریسی برای شما مقدور نیست";
        
$this->Auth->allow(array('get'));
        
$this->Auth->authorize 'controller';

       
// $this->set('userinfo',$this->Auth->user());


    
}

     function 
isAuthorized()
    {
      if ( 
$this->Auth->user() )
            return 
true;
        return 
false;


    } 
2011/07/23 02:18 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh payamsp ghasem.fattahpour
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: