ホームページ >バックエンド開発 >PHPチュートリアル >PHPもどきブログパーク・個人ブログ(2)_PHPチュートリアル
2回目の記事となりますので、どうぞよろしくお願いいたします。これはこのブログ システムの中核でもあります。このブログを書いたら、私のブログサイトに掲載します。ここに私の履歴書もあります。
早速ですが、前の記事の中心となるコンセプトは、「アクションを与える」「何かをする」です!
この記事では、コードを使用してこの概念が何を意味するかを説明します。まず、このファイルはデータ層処理クラスです。
このモデル クラスを簡単に紹介します。これは crud などの一般的な操作を実行するためにデータベースの基本クラスを継承し、データベース オブジェクト $db を使用してデータを操作します。
データ操作には 2 つの重要なメソッドがあります。storePostFormValues() と storeDiaryFormValues() です。これら 2 つのメソッドはデータ フローの始まりです。
他に、addChildNumber( ) と ReduceChildNumber( ) という 2 つの興味深いメソッドがあります。これらは、ドキュメントの挿入または削除時のブラックボックス操作を担当します。私のドキュメントは複数のカテゴリに分類できるため、ドキュメントを操作するときに考慮しなければならない問題の 1 つは、カテゴリ テーブルにこのカテゴリに属するドキュメントの数を記録するフィールドがあることです。したがって、これらの数値の値は動的に変更する必要があります。
次に、post.php コントローラーを使用して、データのプロセスを開始できます (コントローラーはまだクラスではないため、API ドキュメントを生成できません。これは実際の MVC アーキテクチャではないためです)。つまり、MVC の前に、これは次のようになります。また、MVC とは何か、そしてそれを自分で適用して独自の MVC を作成する方法を理解するのにさらに役立ちます。
以下の状況はすべて仮定です:
$action = "空から彼女をください!"; このコントローラーを渡して、何が起こるか見てみましょう。
require_once( "config/config.php" );
session_start( );
$action = isset( $_GET['action'] ) $_GET['action'] : "";
$username = isset( $_SESSION['username'] ) $_SESSION['username'] : "";
if( !$ユーザー名 )
{
header("場所:index.php?action=login");
終了します;
}
ここには重要なフロー制御ステートメント switch があり、これは switch を意味します。そのため、上記の $action = "Give me a girl from the sky!" が渡されるとき、可能性は 2 つだけです。1 つは On、もう 1 つは On です。オフ。ここにはちょっとしたダジャレがあり、それを目にする生徒もいるかもしれません。おいおい!
もっと身近な話ですが、スイッチがこれらの $actions をどのようにオン/オフにするかを見てください。コントローラーにはそのようなスイッチがないので、空からガールフレンドを得ることができないのは明らかです。そのため、コードについてしか話せません。
スイッチ( $action )
{
ケース「新しい投稿」:
newPost( );
休憩
ケース「削除」:
削除( ) ;
休憩
ケース「updatePost」:
updatePost( );
休憩
ケース「ドラフト」:
listDraft( );
休憩
ケース「ログアウト」:
ログアウト( );
休憩
ケース「isPost」:
listPost( );
休憩
ケース「異なるカテゴリ投稿」:
diffentCategoryPost( );
休憩
ケース「カテゴリ外」:
unCategory( );
休憩
デフォルト:
listPost( );
休憩
}
各スイッチはデフォルトのスイッチを定義する必要があります。これにより、ガールフレンドがいない場合でも、ゲイの友達がいることを確認できます。
行動に移すにはどうすればよいでしょうか?
バックグラウンド フレームワークのナビゲーションである URL を見てみましょう。これは、実際にはこれらのアクションで構成されています。これにより、コントローラーで定義されたメソッドで GET (これらの変数の値を取得) できるようになり、より詳細な制御が可能になります。
この URL がコントローラーに到達すると、isPost スイッチをオンにして、次のメソッドを呼び出すことができます。スイッチは私たちがよく行うことです。
ここで場所を変えただけです。
わかりました。 このスイッチの次のメソッドを見てみましょう。
関数 listPost( )
{
$results = array( );
$results['pageTitle'] = "投稿リスト" ;
$results['path'] = "エッセイ";
// メッセージを設定します
If ( isset( $_GET['error'] ) )
{
If ( $_GET['error'] == "InsertedFailed" ) $results['errorMessage'] = "ドキュメントの追加に失敗しました";
If ( $_GET['error'] == "postDeleteFailed" ) $results['errorMessage'] = "ドキュメントの削除に失敗しました";
}
If ( isset( $_GET['status'] ) )
{
If ( $_GET['status'] == "changesSaved" ) $results['statusMessage'] = "ドキュメントは保存されました!";
If ( $_GET['status'] == "削除されました" ) $results['statusMessage'] = "ドキュメントは削除されました!";
If ( $_GET['status'] == "挿入されました" ) $results['statusMessage'] = "新しいドキュメントが追加されました!";
If ( $_GET['status'] == "SaveToDraft" ) $results['statusMessage'] = "ドキュメントは下書きボックスに保存されました!";
}
// カテゴリ別にドキュメントを参照します
$db = MySQL::getInstance( );
$pagination = new Pagination;
$cat = new Category;
$results['categories'] = $cat->getCategoryList("post");
$pagination->countSQL = "select * from post where type = 'post' " ;
$db->Query( $pagination->countSQL );
$pagination->totalRecords = $db->RowCount( );
$records = $db->HasRecords( $pagination->rebuiltSQL( ) );
if( $records )
{
$results['posts'] = $db->QueryArray( $pagination->rebuiltSQL( ) );
require_once(TEMPLATE_PATH . "/post/post_list.php");
}
else
{
require_once(TEMPLATE_PATH . "/post/post_list.php");
}
}
我们定义了一个数组,$results = array( ); 这个数组的作用明显,它将保存我们从 model 中获取的任何数据,也可以保存从url上 GET 的特殊参数。然后将在我们下面require_once(*****) 包含的模版中显示出来, 路径定义在了 path 变量中。
同时我们会接收2个提示参数,
error , 表示操作出现错误,任何人都在所难免,包括电脑,谁都会犯错,关键是去承认,电脑做的很好,他们勇于承认错误。
status; 表示状态,就是成功的操作。
$pagination = new Pagination;
这个类是我们的分页类,我们传入一个 总的数量给它,然后它自己会算出总页数,每跳转一个页面,相当于刷新了一次,所以大家的做法就是,在构造器里 GET(获取)url上的page 的值,
让我们知道是当前那一页了。同时我们重新生成了查询的语句,后面加上一条限制的语句,类似 limit $start(起始的id), $offset(长度); 原理就是从这个id起,往后给我10 条记录;
我的设定就是 10 条,你也可以更灵活。
$cat = new Category;
这个类后面会详细说,也是非常重要的分类model。这里我们就是简单获取 这个类型下的所有分类,显示在侧边栏,我已经完成了。有图有真相!
这样 我们的 $results 数组中就储存了我们页面所需的所有数据。 好的,来看看我们的模版,是怎么输出的。
View Code
1
2
3
13 14 Arist's Blog 15 16 17 Hinging there, everything will be fine. 18 19 |
|||||||||||||
23 24 |
26 33 36 |
||||||||||||
40 45 46 分类 47 48 49
50 51 52 53 54 if( isset( $results['categories'] ) && ! empty( $results['categories'] ) ){ 55 foreach( $results['categories'] as $category ){ 56 echo 57 58 EOB; 59 } 60 } 61 ?> 62 63 64 |
66 67 68 69 70 if( isset( $results['statusMessage'] )){echo $results['statusMessage'];} 71 if( isset( $results['errorMessage'] )){echo $results['errorMessage'];} 72 ?> 73 74 75 76 文章(主要用于转载,发布原创博文要通过“随笔”) 77 78 79 80 if( isset( $results['posts'] )){ 81 エコー 82
126 if( isset( $pagination) ){$pagination->createLinks( ) ;} 127 } else { 128 echo "当前无内容!"; 129 } 130 131 ?> 132 133 134 135 136 137 138 139 140 |
154 155 © Arist 156 157 158 159 160体> 161 上記はデータを示すだけなので、誰でも実行できます。 このデータをどのように操作するのでしょうか? 操作とは制御能力のようなものです。 学生時代にフットボールをしていたとき、私はコートをコントロールする能力が高く、大学のフットボールの試合で優勝1回、準優勝1回、3位1回を経験しました。中学時代に数々の栄誉を獲得。 私のポジションはセンターディフェンダーで、全体の状況を把握する能力、高い個人能力、そして指揮能力が求められます。今は毎日コンピューターの前に座っています。ものはとうの昔になくなってしまいました、 いくつかの体験談が残っています。しかし、味も体験する必要があります。 私のブログには欠点があります。データベースに対して読み取りまたは書き込み操作を実行するたびに、データベースを更新する必要があります。サーバーに大きな負荷がかかることは承知していますが、新しい技術をよく理解せずにやみくもに使っても逆効果になるだけだと感じています。 したがって、当面は、相対的な安定性を実現するために、サーバーの応答時間とメモリ消費量を犠牲にします。 なので全体の状況はよくわかっていないですし、Ajaxの奥まで入ったり、PHPの奥に入ったり、Cの奥に入ったりなど、まだ手を出していない未知の部分がたくさんあります。 。 。 もう言うことはありません。 では、データを CRUD する方法を見てみましょう。 削除削除 まずはこのコマンド post.php?action=delete&postID=132 を見てください 削除することを確認するとき、最初にドキュメントが属するカテゴリの下の count_child_number フィールドで 1 の減算操作を実行できることに注意してください。 なぜ? 私も論理的な間違いを犯し始めたので、削除後にのみこのメソッドを呼び出しました。覚えておいてください。 reduceChildNumber() の興味深い部分はここにあり、私にとって大きな恩恵を受けました。デバッグにも時間がかかりました。 つまり、文法が正しいとしても、論理が間違っている可能性があります。もしくはやり方が間違っている!それは私のメモです! ご覧ください: $post = 新しい投稿; $filter['post_id'] = isset( $_GET['postID'] ) ( int )$_GET['postID'] : ""; // !重要 データを削除する前に、このカテゴリの記事数を 1 つ減らしてください // そうしないと、そのカテゴリで削除する記事の数がわかりません // 論理的な間違いを犯しました。最初にドキュメントを削除してから、ドキュメントのカテゴリ ID を確認しましたが、ドキュメントが存在しなかったため、見つかりませんでした。 $post->reduceChildNumber( "カテゴリ", ( int ) $_GET['postID'] ); $result = $post->delete("post", $filter ); ここでは、記事の先頭でモデルを初期化する限り、簡単に delete() メソッドを呼び出すことができます。 挿入を作成する まずはこのコマンド post.php?action=newPost を見てください。 正直に言うと、長い間挿入していませんでした。ふふ! 制御方法を参照してください: コードを見る 関数 newPost( ) { $results['action'] = "新しい投稿" ; $results['pageTitle'] = "新しい投稿を追加" ; $results['newPost'] = "true"; $results['path'] = "エッセイ» エッセイを追加" $post = 新しい投稿; $cat = 新しいカテゴリ; $results['categories'] = $cat->getCategoryList( "post"); //新しいドキュメントを作成します If( isset( $_POST['saveChanged'] )) $post->storePostFormValues( $_POST ); $result = $post->insertPost( ); if( $result ) { $post->addChildNumber( "カテゴリ", $_POST['カテゴリ'] ); header("場所: post.php?action=isPost&status=Inserted"); } その他 { header("場所: post.php?action=isPost&error=InsertedFailed"); } // 下書きボックスに保存します } else if( isset( $_POST['saveDraft']) ) { $post = 新しい投稿; $post->storePostFormValues( $_POST ); $post->saveDraft( ); header("場所: post.php?action=isPost&status=postSaveToDraft"); // キャンセル else if( isset( $_POST['cancel'] )) { header("場所: post.php?action=isPost"); } それ以外 { require_once(TEMPLATE_PATH . "/post/post_edit.php"); } } テンプレートを使用して、ドキュメントの挿入と更新を同時に行います。キーは isset() です。コントローラーの newPost メソッドを呼び出すときは、ドキュメントをテンプレートに渡しません。 したがって、テンプレート内で isset() を使用して判断を行うと、null 値が得られますが、これは良いことであり、テンプレートには何も出力しません。このようにして、ユーザーがフォームを送信するのを待ちます。ここでは、手間を省くために、当面はフォームをフィルタリングしていませんが、後で更新できるようにバックドアを残しています。 さて、フォームが送信された (そして基本フィルターでフィルターされた) としましょう。 投稿モデルで storePostFormValues( ) と storeDiaryFormValues( ) を呼び出します。このメソッドは、基本的な型チェックを行った後、すべてのフォームのコンテンツを配列に入れます。
これで戦いはすでに半分です。以下はinsert***()です。 これは、さまざまな形式やタイプの処理に役立つ mysql のユニバーサル データベース操作クラスの利点です。もちろん、より詳細な要件があれば、それを継承して拡張することもできます ウォークラフトより抜粋
http://www.bkjia.com/PHPjc/478182.html |