質問: '/' || preg_match('自分のサイトドメイン', $rfr)){ //DBに保存処理 } ``` これよりもっとスマートなやりかたがあればご教授頂きたく存じます。 よろしくお願い致します。 **※Componentに$this->referer()を使用すると下記のようなエラーがでました**。 > > Fatal error: Call to undefined method RefererComponent::referer() > > > コンポーネントでコントローラーのメソッドを使うにはどうすれば良いのでしょうか?
回答: cakephp 2.7.8 > > また、Componentではstartup()の部分に記述しています。 > > > 何パターンか検証してみましたが、どのメソッドであれ問題なく取得出来ました。 しかしComponentですので、どのようなロジックのControllerに組み込まれるか分かりません。 Controller::beforeFilter()直後に実行されるComponent::startup()がタイミングとしては無難ではないでしょうか。 > > (上記には載ってないbeforeFilter等々もありますよね・・・) > > > ControllerにbeforeFilter()は有りますが、Componentにはありません。 ComponentではbeforeFilter()の前後のComponent::initialize(), Component::startup()を使用します。 > > コンポーネントでコントローラーのメソッドを使うにはどうすれば良いのでしょうか? > > > Componentの各種メソッドの引数としてControllerのインスタンスが渡されます。 なのでそのインスタンスから呼んで下さい。 ``` class RefererComponent extends Component{ public function startup(Controller $controller){ var_dump($controller->referer(null, false)); } } ``` > > これよりもっとスマートなやりかたがあればご教授頂きたく存じます。 > > > Controller::referer()も結局はenv('HTTP_REFERER')で取得しているだけなので、 質問の通り正規表現で自サイトかどうかを判定すれば良いかと思います。 スマートにと言われると、今の正規表現ではstrpos()と変わりませんので、そこをもう少し凝れるかと思います。