thinkphp は基本クラスのメソッドをオーバーライドします

WBOY
リリース: 2023-05-26 09:13:37
オリジナル
707 人が閲覧しました

ThinkPHP5 フレームワークでは、基本クラス (Base) は非常に重要なクラスです。これはすべてのコントローラーの親クラスであり、コントローラーの初期化、テンプレートのレンダリング、テンプレートの出力など、多くの重要なメソッドが含まれています。実際の開発では、特定のビジネス ニーズを満たすために、基本クラスの一部のメソッドを書き直す必要がある場合があります。では、ThinkPHP5 フレームワークで基本クラスのメソッドをオーバーライドするにはどうすればよいでしょうか?以下で詳しく説明します。

最初のステップは、基本クラス ファイルを見つけることです。

ThinkPHP5 フレームワークでは、基本クラス (Base) ファイルは「thinkController.php」にあります。このファイルのデフォルトのディレクトリは「/thinkphp/library/think/」ですが、このファイルは、composer によってインストールされた「topthink/framework」からも見つけることができます。したがって、コントローラーを変更する前に、コントローラーの基本クラス ファイルを見つける必要があります。

2 番目のステップはカスタム メソッドを作成することです

基本クラス メソッドをオーバーライドする前に、カスタム メソッドを作成する必要があります。このメソッドのコード ロジックは、実際のビジネス ニーズに従って作成する必要があり、コントローラー内の必要な場所であればどこでも呼び出すことができます。たとえば、コントローラが出力する前に現在のユーザーがログインしているかどうかを判断する必要があります。現在のユーザーがログインしていない場合は、ログイン ページにジャンプします。

具体的な操作は次のとおりです:

<?php
namespace appindexcontroller;
use thinkController;

class Base extends Controller
{
    public function _initialize()
    {
        parent::_initialize();
        // ...
    }
    
    public function index()
    {
        // ...
    }

    public function checkLogin()
    {
        // 判断用户是否登录
        if(!session('?user_id')) {
            $this->redirect('user/login');
        }
    }
}
ログイン後にコピー

上記のサンプル コードでは、ユーザーがログインしているかどうかを判断するために「checkLogin」という名前のカスタム メソッドを作成しました。ユーザーがログインしていない場合、このメソッドはリダイレクト メソッドを通じて指定されたログイン ページにジャンプします。

3 番目のステップは、基本クラスのメソッドを書き直すことです。

独自のカスタム メソッドを作成した後、基本クラスのメソッドを書き直すことができます。 ThinkPHP5 フレームワークの基本クラスのメソッドは、すべてプロテクト型またはパブリック型のメソッドであり、通常は、基本クラスを継承し、基本クラスのメソッドをオーバーライドすることで、独自のビジネス ニーズを実現できます。たとえば、コントローラが出力する前に現在のユーザーがログインしているかどうかを判断する必要がありますが、すでにログインしている場合はジャンプする必要はありません。

具体的な操作は次のとおりです:

<?php
namespace appindexcontroller;
use thinkController;

class Base extends Controller
{
    public function _initialize()
    {
        parent::_initialize();

        $this->checkLogin(); // 调用自定义方法检测用户是否登录
    }
    
    public function index()
    {
        // ...
    }

    // 重写基类的redirect方法
    protected function redirect($url, $params = array(), $code = 302, $with_prefix = false)
    {
        // 当前用户已登录,则直接输出模板
        if(session('?user_id')) {
            parent::redirect($url, $params, $code, $with_prefix);
        }
        // 当前用户未登录,则跳转至登录页面
        else {
            parent::redirect('user/login');
        }
    }
}
ログイン後にコピー

上記のコード例では、基本クラスのリダイレクト メソッドをオーバーライドして、現在のユーザーがログインしているかどうかを判断します。ユーザーがログインしている場合はテンプレートが直接出力され、ログインしていない場合は自動的にログインページにジャンプします。

概要

ThinkPHP5 フレームワークでは、基本クラスのメソッドを書き直すことで、独自のビジネス ニーズを実現できます。基本クラス メソッドをオーバーライドする場合は、基本クラス メソッドのシグネチャとセマンティクスに従う必要があり、基本クラス メソッドの実装は、変更する前に注意深く分析する必要があります。基本クラス メソッドの書き換えはコントローラーで行う必要があります。具体的な手順としては、まず独自のカスタム メソッドを作成し、次に基本クラス メソッドを書き換え、最後に必要に応じてカスタム メソッドを呼び出します。

以上がthinkphp は基本クラスのメソッドをオーバーライドしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート