CI フレームワークを使い始めた当初、CI フレームワークのソースコードの読み取りメモをシリーズで書こうと計画していましたが、残念ながら頓挫してしまいました。何も行動はなかった。最近案件が少なかったので、やっと書く時間ができました。そこで私は、一方でメモとしてこれまでのメモや経験を記録し、他方で常に自分に言い聞かせる準備をしました。唯一の方法は過去から学び、過去から学ぶことだ、過去を忘れることは裏切りを意味します。
この記事を始める前に、記事内で繰り返し登場する用語について簡単に説明する必要があります。この部分をすでによく知っている場合は、完全にスキップしてください。この記事で繰り返し登場および言及されている用語は次のとおりです:
フロントコントローラー:
すべてのユーザーリクエストを集中制御し、ユーザーリクエストを特定のアプリケーションコントローラーに送信するために使用されるコンポーネント。 CI フレームワークでは、これは CodeIgniter クラスを指します。フロントエンドコントローラー自体はデザインパターンです。詳細については、「J2EE デザインパターン」を参照してください。
アプリケーションコントローラー
アプリケーション コントローラーは、ユーザー リクエストの URL を処理する特定のコントローラーです。たとえば、UserController には、ユーザーの登録、認証、個人情報、その他の関連するページが含まれます。オペレーション。
MVC
一般的な用語はコード階層化と組織モデルです。コードをM(モデル、ビジネスロジック)、V(ビュー、ビュー)、C(コントローラー、コントローラー)などのレベルに分割することで、ビジネスロジック部分とビューレンダリング部分の分離が容易になり、コードの結合が軽減されます。現在、PHP の多くのフレームワークは、ZF、YII、CI などの MVC パターンに基づいています
ルートルーティング
Routeといってもルーターではなく、ユーザーのリクエストをインターセプトし、特定のControllerに転送して処理する処理を指します。フレームワークが異なればルーティングも異なりますが、基本原則は同じです。
フックフック
本来のフックとは、「メッセージ配信におけるリンク。メッセージの配信を監視し、メッセージ処理の前に特定の処理を追加するために使用される」を指します。ここでのフックとは、フレームワークのコア ソース コードを変更せずに、システムのコア機能を追加または変更することを指します。最も一般的な状況には、コントローラーがロードされる前またはロードが完了した後に特定のスクリプトを実行することが含まれます。
この記事の基本環境: Linux x86_64 GNU/Linux PHP(CGI)+Nginx+Mysql+redis がインストールされています (この記事のサーバー関連の設定の多くは Nginx に基づいており、Apache サーバーは一時的に無視されます)。 。
まず、CI フレームワークのソース コードをダウンロードします。ダウンロード アドレスは、http://codeigniter.org.cn/downloads です。ソース コードをフォルダー (/usr/nginx/html/CI ディレクトリであると想定) に解凍します。
CI フレームワークを設定する前に、まずフレームワークのディレクトリ構造を参照します:
その中に:
Application : アプリケーションのディレクトリ。すべてのアプリケーション コードはこのディレクトリに配置する必要があります
index.php : フレームワーク
のエントリーファイルstatic : : 私たちが自分で作成したディレクトリには、CSS、画像、js などのいくつかの静的ファイルが配置されます (個人の好みに応じて、アプリケーション ディレクトリに配置することもできます)
システム : CIフレームワークのシステムファイルは、ソースコード読み取りの主要部分でもあります
user_guide : ユーザーガイド。オフラインのユーザーマニュアルに似ています。
CI フレームワークに必要な設定は少なくなります:
1. ルートを設定します
デフォルトのアプリケーション コントローラーと 404 ページは Routes.php で設定されています。 application/config/routes.php ファイルを開き、次のように設定します。 リーリー2.データベースdatabase.phpを設定します
アプリケーションが動的コンテンツを提供する必要がある場合、データベースはほぼ必須の構成です。 application/config/database.php ファイルを開きます。ファイルの内容は次のとおりです。
CI フレームワークはマルチデータ ストリーム接続をサポートしており、default は現在のデフォルト接続であり、active_record は ARM (アクティブ レコード モデル) を有効にするかどうかを指定するために使用されます。各設定項目は非常に簡潔なので、ここでは詳しく紹介しません。
3.index.phpを削除します
ここでアプリケーションにアクセスします。URL は次のようになります:
<span>test.xq.com/index.php/index test.xq.com/index.php/welcome</span>
注意每个请求都会带有index.php段。去掉index.php会让URI更加美观。
打开刚刚添加的test.xq.com.conf文件,在server中添加如下配置:
<span>if ($request_filename !~* /(favicon.ico|static|uploads|js|javascript|css|images|robots\.txt|index\.php|index\.html)) { rewrite ^/(.*)$ /index.php?$</span>1 last<span>; </span>}
重启服务器后,现在,URL的访问方式变成了:
<span>test.xq.com/index test.xq.com/welcome</span>
是不是简洁多了 :D
4. 添加.html访问后缀
可能还有人喜欢url中添加特定的后缀,例如.html后缀使你的应用程序更类似于一系列静态文件。配置方法是,在application/config/config.php中,更改如下配置为:
<span>$config</span>['url_suffix'] = '.html';
CI框架的更多配置可以参考:
为了方便访问(相比ip地址访问的方式,域名访问有更好的可记忆性),我们可以配置vhost,配置方式为:进入nginx的vhost目录,新建配置文件(本文中为test.xq.com.conf,一般情况下,我们的每个vhost都会以域名命名)。在配置文件中输入如下内容:
<span>server { listen </span>80<span>; </span> server_name test.xq.com<span>; </span> root /usr/nginx/html/CI/<span>; </span><span> access_log logs/xq_access_log main</span><span>; </span> error_log logs/testsq.log error<span>; </span> charset GBK<span>; </span> index index.php<span>; </span><span> location ~ .*\.(php|php5)?$ { include fastcgi_params</span><span>; </span> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name<span>; </span> fastcgi_pass 127.0.0.1:9000<span>; </span><span> } }</span>
Server中暂时没有其他rewrite配置,稍后在配置CI框架的时候,我们可以添加更多的配置类支持CI的友好URL.
打开本地的host文件,在host中添加条目:
10.130.130.130 test.xq.com
其中10.130.130.130应该是你的服务器的IP地址。
现在,在浏览器中可以通过域名访问CI框架了。
在结束本文之前,我们再看看CI框架的基本流程,这个流程将贯穿源码阅读的始终,所以,很有必要认真研读一下。引用CI框架用户手册的上的流程图:
基本的执行流程如下:
下一步开始,将开始CI的源码阅读之旅。
这是类里面的一个方法
功能是:浏览器使用post请求发送 shop_id到服务器,这个 shop_id 就是数据库中的manufacture_id,根据这个shop_id查询数据库,把查到的记录以json格式字符串的形式输出到浏览器
提示Fatal error: Class 'Test_model' not found in D:\wamp\www\CodeIgniter_2.1.2\system\core\Loader.php on line 303
意思提示这个Test_model类找不到
你的类名写错了,当然找不到了
以下为model代码,文件名为test_model.php: (类名要与文件名保持一致才行)
class Test_m extends CI_Model{ // 最好要大写都大写改成test_model
以下为contraller代码,文件名为user.php
$this->load->model('test_model'); 它加载的时候找不到class test_model
这样就应该能成功