2016-09-12 8 views
1

こんにちは私は2つのメソッドを含むクラスを持っています。 1つはセッションを初期化し、もう1つはWebページをリダイレクトすることです 私は繰り返し呼び出すことができるようにクラスを作成しました。呼び出す順番を保たずにクラスメソッドを定義する方法

$obj->setSession(key,value)->redirect(url); 

このモードでは、セッションは最初に初期化され、次のページにリダイレクトされます。 しかし、それはこの

$obj->redirect(url)->setSession(key,value); 

のように書かれている場合、それだけで定義された場所にリダイレクトセッションがもはや初期化されていませんQND .. resirectメソッドが呼び出されたときに、ページが速やかに変更cuzのそれはね、それは第二の原因となりますメソッドは呼び出されません。 メソッドの順序を考慮する必要なく繰り返しメソッドを呼び出す方法はありますか?

+0

私はイエスと言うだろうが、あなたは追加する必要がありますあなたが望む条件が真であるか偽であるかをチェックするもっと多くのコード –

+0

簡単な質問は、 'setSession'オプションですか?リダイレクトする前にいつも呼び出す必要がありますか? –

+0

そのmoethodはオプションです – user3754884

答えて

0

私は通常、この問題に直面したとき、オブジェクトにrender()またはdone()というメソッドを追加します。これは、以前定義したすべてのフラグをチェックするものです。これらのフラグの1つはheaderフラグで、redirectメソッドは通常header(Location: $yourDestUrl)となります。

は、だからあなたのようなもので終わる:あなたは、このようなredirectsetSessionとしてメソッドを呼び出すと

$obj->redirect(url)->setSession(key,value)->render(); 
+0

レンダリングメソッドを使用するとコードが長くなり、laravel – user3754884

0

、あなたのクラスのプロパティとして「スタック」にこれらのアクションを置きます。

すべてのメソッドが呼び出されたら、「スタック」内のすべてのアクションを実行するメソッド(たとえば、exec)を呼び出します。ここで

はマジックメソッドを使用して、この考え方に基づいて、基底クラスである:

class Stack { 

    private $_stack = array(); 

    public function __call($method, $args) { 

     // Adding method to stack 
     $this->_stack[$method] = $args; 

     return $this; 
    } 

    public function __isset($name) { 

     // Checks if method is in stack 
     return isset($this->_stack[$name]; 
    } 

    public function exec() { 

     // setSession is executed first 
     if (isset($this->setSession)) 
      call_user_func_array('setSessionMethod', $this->_stack['setSession']); 


     // redirect is executed second 
     if (isset($this->redirect)) 
      call_user_func_array('redirectMethod', $this->_stack['redirect']); 

    } 
} 

このクラスを使用するには、どうなる:

$stack = new Stack; 
$stack->redirect('arg') 
     ->setSession('arg1', 'arg2') 
     ->exec(); 
+0

でこれらの種類のメソッド呼び出しが何度も見られました。execメソッドを使用するとコードが長くなり、laravelでこれらの種類の呼び出しが何度も見られました – user3754884

+0

@ user3754884あなたが求めていることを行う方法は他にありません。メソッドは常に書かれた順番で呼び出されます。したがって、 'setSession'が呼び出される前に' redirect'メソッドが実行を終了すると、ページがリダイレクトされ、メソッドへの呼び出しは実行されません。さらに、 "スタックメソッド"は面倒ではなく、 'exec'メソッドに必要な呼び出しを1つだけ追加し、クラスに数行追加しますが、実行が確実に望む順序で実行されますユーザーコードがメソッドを呼び出す順序です。 – TheKitsuneWithATie

関連する問題