目次
Codeigniter の優れた実践例
1. まずはMVCです
2. アプリケーションとシステムのパス
3. エラーの報告とデバッグ
4. セキュリティの問題は非常に重要です
5. 数据库 和 ORM
6. 代码实践
7. 模板渲染不必每次都调用 header 与 footer
8. 不必所有的类都继承 CI_Controller
9. CodeIgniter的文件结构
10. CodeIgniter的工作过程
まとめ
ホームページ バックエンド開発 PHPチュートリアル Codeigniter_PHP チュートリアルの優れた実践例

Codeigniter_PHP チュートリアルの優れた実践例

Jul 13, 2016 am 10:18 AM
codeigniter mvc

Codeigniter の優れた実践例

最近、私は Codeigniter を使用して他の人が書いたプロジェクトを引き継いで改善することを計画しています。以前に CI を使用したことがありますが、完全に自分の希望に従って書いたものであり、いくつかの仕様に従っていません。 CI ルーチン。一般の人が使うプロジェクトの場合は、フレームワークの仕様に従うのがベストなので、将来引き継いだときに笑われないようまとめておくと良いでしょう。

1. まずはMVCです

MVC をまだ知らない場合は、モデルでのデータ アクセス、コントローラーでのビジネス ロジック、およびビューでの HTML コードの記述の価値をすぐに理解できるようになります。これまでこのモデルを使用してプログラミングしたことがない場合は、額にしわを寄せるかもしれませんが、試してみる機会を与えてください。

経験則としては、コントローラーに入れるものを減らし、「車輪を再発明しない」という DRY ルールを覚えておいてください。同じコードを複数の場所に記述する場合は、その種類に応じてライブラリ、ヘルパー、またはモデルを作成するようにしてください。例えば、データベース接続クラスはよく使われるのでモデル化(システム側で提供)します。

MVC の本質を理解すると、これが習慣になり、MVC の簡潔なコードから多くの恩恵を受けるでしょう。

1 つの原則は、複雑な操作をモデルに任せることです。コントローラーはむしろアーキテクトに似ています。モデルは大変なお仕事です。ビューは画家です。コントローラーはモデルに何かを投げるだけでよく、データが異常であるかどうかを気にする必要はなく、フラグと対応するデータを返します。このように、MVC アーキテクチャが反映されます。

モデルは実際には電子レンジなどの電化製品に似ています。使いやすいほど、より多くの人に好まれます (食べ物を入れてスタートを押し、ご飯が炊き上がります)。インターフェイスが少ないという利点があります。それは、モデルがアップグレードされ、コードが最適化された場合、外部世界との結合度が高くないことです。たとえ内部的にうまく書かれていないとしても、インターフェースはすっきりしていて使いやすいです。

2. アプリケーションとシステムのパス

システム フォルダーとアプリケーション フォルダーを Webroot の外に配置するのが最善です。index.php が FTP サーバーの /public_html/ パスの下に配置されている場合は、システムをルート ディレクトリ /system の下に配置するようにしてください。 PHP ファイルにアクセスできるのは、index.php のみです。

index.php ファイル内の $system_folder と $application_folder の値を変更することを忘れないでください。$system_folder の値は、index.php ファイルを基準にし、$application_folder の値は、システムディレクトリ。

3. エラーの報告とデバッグ

よくある間違いは、PHP エラーとデータベース エラーのレポートをオフにするのを忘れることです。これは危険です。公開サイトでは、error_reporting は 0 に設定する必要があり、データベース設定 db_debug は false に設定する必要があります。ini_set('display_errors') は、エラー情報が表示されないように設定します。 、「オフ」);

コーディングとデバッグを行うときは、アプリケーションをリリースする前に、error_reporting を E_ALL に設定し、すべてのメモと警告に対処する必要があります。

簡単な方法は、Web サイトの実行中に、application/config/database.php ファイルで db_debug の値を定数 MP_DB_DEBUG に設定することです。

リーリー

コーディングとデバッグでは次のように設定します:

リーリー

4. セキュリティの問題は非常に重要です

フォームによって送信された POST データ、COOKIE データ、URI データ、XML-RPC データ、または SERVER 配列内のデータのいずれであっても、プログラムにデータを受信する前に、次の 3 つの手順を実行することをお勧めします。

    不良データをフィルタリングします。
  1. データを検証して、正しいタイプ、長さ、サイズなどを確認します (場合によっては、このステップが最初のステップの代わりになることもあります)
  2. データベースに送信する前にデータを変換します。
SQL インジェクション、XSS、CSRF については、それらを理解した上で、それらを防止する方法を採用するかどうかを決定する必要があります。 CI マニュアルのセキュリティ ガイドラインと入力およびセキュリティ カテゴリを参照できます。おそらく最も重要な原則は、データベースまたはファイル システムにデータを送信する前にすべてのユーザー入力をチェックすることです。

  • SQL注入。使用 CI 自带的 Active Record 可以解决这个问题。
  • XSS (跨站脚本)。通过设置 $config['global_xss_filtering'] = TRUE; 开启自动过滤POST和COOKIE中的跨站脚本攻击,但需要消耗一些资源。也可以在每次处理POST和COOKIE的时候单独使用,把第二个参数设为TRUE,如 $this->input->post('some_data', TRUE); 表单验证类也提供了 XSS 过滤选项,如 $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
  • CSRF (跨站请求伪造)。CI 2.0 将内置 CSRF 检查,在 Google 上搜索 "CSRF tokens" 学习更多关于在保护表单提交和 URL 链接的知识,在 Ajax 应用方面可以搜索 "double cookie submission" 或 "双提交 cookie"。
  • SPAM (垃圾留言和恶意注册)。通过保护你的邮件表单,评论表单,以及其他各种免费用户提交的数据来防止垃圾信息,一个简单的方法是只允许一个IP/User客户端在一分钟之内只能提交一次,一个比较好的方式是使用 Captcha ,CI2中内置了一个CAPTCHA的辅助函数。

5. 数据库 和 ORM

CodeIgniter 有一个自带的库 Active Record 能够帮助你在不使用 SQL 语句的情况下写查询语句。这在你不太精通 SQL 语句或不知道怎样防止SQL注入的情况下是一个很好的方法。

当你需要更强大的工具时,你可以考虑使用 Object Relational Mapper ,就是鼎鼎大名的 ORM 了,遗憾的是,CodeIgniter 没有自带 ORM 库,不过也有一些其他很好的选择。

最流行的或许是 DataMapper OverZealous Edition (DMZ),还可以使用 Doctrine (这里有一个教程),另一个选择 RapidDataMapper 是作者自己的作品。

6. 代码实践

编写简洁的代码,并且理解你的代码,不要只是复制粘贴别人的代码,并且不断提高编码能力。手册上的开发规范是一个能学习怎样更好编写代码的地方。

1. DRY。不要总是重复造轮子,把能重用的代码放在它应该在的地方,比如libraries, helpers 或者是 models,而不是controllers,一个经验准则:当你复制代码的时候,也许你已经第二次把它放在了错误的地方。

2. Caching (缓存)。缓存是一个提高性能的很好的方式,尤其是减少数据库的访问。可以参考网页缓存和数据库缓存,或者在论坛上搜索其他的可选方案,比如 MP_Cache 是作者自己的作品。

3. HTTP headers (HTTP头部)。在客户端你能够通过单独发送HTTP头部使浏览器缓存页面来提高性能,当你使用 AJAX 的时候你也需要了解它来禁止浏览器缓存。

一个禁止缓存的例子:

$this->output->set_header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
$this->output->set_header("Pragma: no-cache");  
ログイン後にコピー

一个长时间保持缓存的例子(比如 css, javascript):

$this->output->set_header('Cache-Control: private, pre-check=0, post-check=0, max-age=2592000');
$this->output->set_header('Expires: ' . gmstrftime("%a, %d %b %Y %H:%M:%S GMT", time() + 2592000));
$this->output->set_header('Last-Modified: ' . gmstrftime("%a, %d %b %Y %H:%M:%S GMT", time() - 20));  
ログイン後にコピー

在 MY_Controller 头部和 __construct 函数中添加以下内容,用于设定默认的模版信息,其中 SITE_NAME 需要自己在 application/config/constants.php 里面自己定义:

class MY_Controller extends CI_Controller {

    protected $_data;    // 模版传值数组
    protected $_tplext;  // 默认模版后缀
    protected $_header;  // 默认头部模版
    protected $_footer;  // 默认底部模版


    public function __construct () {
        parent::__construct();

        $this->_data['title'] = SITE_NAME;
        $this->_tplext = '.php';
        $this->_header = 'templates/header';
        $this->_footer = 'templates/footer';

        // 开发模式下开启性能分析
        if (ENVIRONMENT === 'development') {
            $this->output->enable_profiler(TRUE);
        }
    }

}
ログイン後にコピー

8. 不必所有的类都继承 CI_Controller

新增的控制器不再继承 CI_Controller,而改继承 MY_Controller:

class Index extends MY_Controller {

    public function __construct () {
        parent::__construct();
    }


    /**
     * 前台首页
     */
    public function index () {
        $this->_data['title'] = '首页';  // 不指定则使用默认标题 SITE_NAME
        $this->_view('index/index');
    }

}
ログイン後にコピー

末了,再补充两个:

9. CodeIgniter的文件结构

cache用以存储缓存文件,codeigniter文件夹包含了CI的基类CI_Base,为了兼容php4和php5,CI_Base有两个版本,其中php4版本的CI_Base继承于CI_Loader。libraries里存放了大部分常用的类库,最主要的三个类:Model,View和Cotronller,自己写的任何mvc都要继承于已有的mvc类;helpers里是一些函数(方法)集合,用以辅助其他模块的方便工作。language是一个语言包,用以支持多语言。

application文件夹用以存储您的应用程序,CI已经在内部为您增加了一些子文件,包括models、views、controllers、config、errors、hooks和libraries。其中前三个文件夹是用以创建模型、视图和控制器的。您的大部分工作都应该是创建属于自己的MVC,并可在config里加入配置文件,libraries里加入一些对象和方法,用来辅助您的模型和控制器工作。而hooks也是对CI_Hooks的扩展,具体内容见下面的章节。

10. CodeIgniter的工作过程

当有一个http请求时,如http://www.google.com/blog/,首先进入CI的引导文件index.php。接下来我们看看index.php里做了哪些事情。

index は、まずアプリケーション フォルダー名を application に設定し、システム フォルダー名を system に設定します。次に、一連の厳密な判断を行って、それらを Unix スタイルのサーバー絶対ファイル パスに変換します。具体的には、2 つの重要な定数 APPPATH を定義します。分析によると、このパスはシステムと同じレベルである可能性があります: htdocs/application/ 、またはシステム フォルダにそのサブフォルダとして配置される可能性があります: htdocs/system/application/ 2 番目の方法を使用することをお勧めします。これは、Web サイト ドキュメントの基本ファイル パスである BASEPATH は、最終的には htdoc/system/ になります。最終的に、インデックス ブート ファイルは codeigniter/codeigniter.php に導入されます。次に、codeigniter で何が行われるかを見てみましょう。

codeigniter.php は、最初に Common.php、Compat.php、config/constants.php の 3 つのファイルを紹介します。 Common には、クラス ライブラリをロードするためのload_class、ログを記録するための log_message、エラー ページを紹介する show_404 などのいくつかの関数が含まれています。いくつかの重要な関数; Compat は主に php4 と php5 の関数の互換性の問題を解決し、定数はファイルの読み取りと書き込みのアクセス許可に関するいくつかの定数を定義します。

次に、codeigniter は最初のクラス ライブラリである Benchmark を読み込みます。このクラス ライブラリの最も単純なアプリケーションの 1 つは、Web ページの開始からコンパイルの終了までにかかる時間を計算することで、先頭にマークを付けます。コンパイルとレンダリングが終了すると、マークを追加して、費やした時間を計算できます。

次に、2 番目のクラス ライブラリであるフックがロードされます。このクラス ライブラリは Benchmark などのシステム ライブラリの下にあり、プログラムがコンパイルを開始する前に他のことを実行する機会を提供します。他のミッションでは約 8 つの機会が提供されます。詳細についてはユーザー ガイドを参照してください。ここでは最初のフックをインポートします。

次に、Config、URI、Router、Output、およびその他のクラス ライブラリをそれぞれロードします。次に、cache_override フックがあるかどうかを確認します。このフックを使用すると、Output クラスの _display_cache メソッドを置き換える関数をスケジュールできます。 _display_cache を直接出力し、キャッシュ コンテンツがあるかどうかを確認し、存在する場合はキャッシュを直接出力し、存在しない場合は実行を続行します。

その後、入力と言語のロードを続けます。前にロードされたクラス ライブラリはすべて参照であることに注意してください。次に、CI_Base オブジェクトのロードが最初に判断されます。 php4 バージョンでは、Loader が最初にロードされ、次に Base4 がロードされます。Base4 の CI_Base は CI_Loader を継承しますが、Base5 では、CI_Base と CI_Loader には継承関係がありません。

次のステップも非常に重要なステップです。このステップは、参照ではなくインスタンスであるコントローラー クラスをロードすることから始まり、ルーターを通じて http アドレスを解析してコントローラーとメソッドの名前を取得し、チェックします。アプリケーションコントローラが存在するかどうか、存在しない場合はエラーが報告され、存在する場合は判定が開始されます。

まとめ

まずはこれくらいまとめて、後ほど追加していきます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/881582.html技術記事最近、Codeigniter を使用して他の人が書いたプロジェクトを引き継いで改善するための Codeigniter の優れた実践例がいくつか準備されています。私は以前 CI を使用したことがありますが、完全に自分の希望に従って書いており、CI に従っていませんでした...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CodeIgniter でカスタムミドルウェアを実装する方法 CodeIgniter でカスタムミドルウェアを実装する方法 Jul 29, 2023 am 10:53 AM

CodeIgniter でカスタム ミドルウェアを実装する方法 はじめに: 最新の Web 開発では、ミドルウェアがアプリケーションで重要な役割を果たします。これらは、リクエストがコントローラーに到達する前または後に、共有処理ロジックを実行するために使用できます。 CodeIgniter は、人気のある PHP フレームワークとして、ミドルウェアの使用もサポートしています。この記事では、CodeIgniter でカスタム ミドルウェアを実装する方法を紹介し、簡単なコード例を示します。ミドルウェアの概要: ミドルウェアは一種のリクエストです

CodeIgniter ミドルウェア: アプリケーションの応答性とページのレンダリングを高速化します。 CodeIgniter ミドルウェア: アプリケーションの応答性とページのレンダリングを高速化します。 Jul 28, 2023 pm 06:51 PM

CodeIgniter ミドルウェア: アプリケーションの応答性とページ レンダリングの高速化 概要: Web アプリケーションの複雑さと対話性が増大し続ける中、開発者はアプリケーションのパフォーマンスと応答性を向上させるために、より効率的でスケーラブルなソリューションを使用する必要があります。 CodeIgniter (CI) は、多くの便利な機能を提供する軽量の PHP ベースのフレームワークであり、その 1 つがミドルウェアです。ミドルウェアは、リクエストがコントローラーに到達する前または後に実行される一連のタスクです。この記事では使い方を紹介します

PHP MVC アーキテクチャ: 将来に向けた Web アプリケーションの構築 PHP MVC アーキテクチャ: 将来に向けた Web アプリケーションの構築 Mar 03, 2024 am 09:01 AM

はじめに 今日の急速に進化するデジタル世界では、堅牢かつ柔軟で保守可能な WEB アプリケーションを構築することが重要です。 PHPmvc アーキテクチャは、この目標を達成するための理想的なソリューションを提供します。 MVC (Model-View-Controller) は、アプリケーションのさまざまな側面を独立したコンポーネントに分離する、広く使用されている設計パターンです。 MVC アーキテクチャの基礎 MVC アーキテクチャの核となる原則は、関心事の分離です。 モデル: アプリケーションのデータとビジネス ロジックをカプセル化します。ビュー: データの表示とユーザー インタラクションの処理を担当します。コントローラー: モデルとビュー間の対話を調整し、ユーザーのリクエストとビジネス ロジックを管理します。 PHPMVC アーキテクチャ phpMVC アーキテクチャは従来の MVC パターンに従いますが、言語固有の機能も導入しています。以下はPHPMVCです

CodeIgniter フレームワークでデータベース クエリ ビルダー (Query Builder) を使用する方法 CodeIgniter フレームワークでデータベース クエリ ビルダー (Query Builder) を使用する方法 Jul 28, 2023 pm 11:13 PM

CodeIgniter フレームワークでデータベース クエリ ビルダー (QueryBuilder) を使用する方法の紹介: CodeIgniter は、開発者が Web アプリケーション開発を容易にするための強力なツールとライブラリを多数提供する軽量の PHP フレームワークです。最も印象的な機能の 1 つは、データベース クエリ ビルダー (QueryBuilder) です。これは、データベース クエリ ステートメントを構築および実行するための簡潔かつ強力な方法を提供します。この記事ではCoの使い方を紹介します。

PHP フレームワーク CodeIgniter を使用して、便利なコミュニケーション サービスを提供するリアルタイム チャット アプリケーションを開発します。 PHP フレームワーク CodeIgniter を使用して、便利なコミュニケーション サービスを提供するリアルタイム チャット アプリケーションを開発します。 Jun 27, 2023 pm 02:49 PM

モバイル インターネットの発展に伴い、インスタント メッセージングの重要性と人気がますます高まっています。多くの企業にとって、ライブ チャットはコミュニケーション サービスに似ており、ビジネス上の問題を迅速かつ効果的に解決できる便利なコミュニケーション手段を提供します。これを踏まえて、この記事ではPHPフレームワークCodeIgniterを使ってリアルタイムチャットアプリケーションを開発する方法を紹介します。 CodeIgniter フレームワークを理解する CodeIgniter は、開発者を迅速に支援する一連のシンプルなツールとライブラリを提供する軽量の PHP フレームワークです。

CodeIgniter ミドルウェア: 安全なファイルのアップロードおよびダウンロード機能を提供します。 CodeIgniter ミドルウェア: 安全なファイルのアップロードおよびダウンロード機能を提供します。 Aug 01, 2023 pm 03:01 PM

CodeIgniter ミドルウェア: 安全なファイルのアップロードおよびダウンロード機能を提供します はじめに: Web アプリケーション開発のプロセスにおいて、ファイルのアップロードとダウンロードは非常に一般的な機能です。ただし、セキュリティ上の理由から、ファイルのアップロードとダウンロードの処理には追加のセキュリティ対策が必要になることがよくあります。 CodeIgniter は、開発者による安全で信頼性の高い Web アプリケーションの構築をサポートする豊富なツールとライブラリを提供する人気の PHP フレームワークです。この記事では、CodeIgniter ミドルウェアを使用して安全なファイルを実装する方法を紹介します。

PHP 開発: CodeIgniter を使用して MVC パターンと RESTful API を実装する PHP 開発: CodeIgniter を使用して MVC パターンと RESTful API を実装する Jun 16, 2023 am 08:09 AM

Web アプリケーションは進化し​​続けるため、アプリケーションをより迅速かつ効率的に開発することが重要です。また、RESTful API は Web アプリケーションで広く使用されているため、開発者は RESTful API の作成および実装方法を理解する必要があります。この記事では、CodeIgniter フレームワークを使用して MVC パターンと RESTful API を実装する方法について説明します。 MVC パターン MVC (Model-Vie) の概要

PHPでCodeIgniter5フレームワークを使用するにはどうすればよいですか? PHPでCodeIgniter5フレームワークを使用するにはどうすればよいですか? Jun 01, 2023 am 11:21 AM

CodeIgniter は、MVC アーキテクチャを使用して迅速な開発をサポートし、一般的なタスクを簡素化する軽量の PHP フレームワークです。 CodeIgniter5 はフレームワークの最新バージョンであり、多くの新機能と改善点が提供されています。この記事では、CodeIgniter5 フレームワークを使用して簡単な Web アプリケーションを構築する方法を紹介します。ステップ 1: CodeIgniter5 をインストールする CodeIgniter5 のダウンロードとインストールは非常に簡単で、次の手順に従うだけです。 最新バージョンをダウンロードします。

See all articles