CakePHPについて

CakePHPは、Model-View-Controller(MVC)プログラミングパラダイムを中心に構築された強力で堅牢なPHPフレームワークです。 これを使用してアプリケーションを構築するための柔軟な方法に加えて、ファイルとデータベーステーブル名を整理するための基本構造を提供し、すべての一貫性と論理性を維持します。

最後のチュートリアルでは、CakePHPをVPSにインストールし、いくつかの初期構成を行う方法を見てきました。 さらに、このチュートリアルで開始し、次のチュートリアルで終了する小さなWebアプリケーションに役立つデータベースをすでにセットアップしています。 したがって、目的は、CakePHPを少し試して、必要なアプリケーションを構築するためにCakePHPをどのように使用できるかをよりよく理解することです。 いくつかの主要な概念(コントローラー、モデル、ビューなど)を確認し、それらが何であるかを示すために例を使用します。 最後に、データベーステーブルに対してCRUD(作成、読み取り、更新、削除)操作を実行する小さなアプリケーションを作成します。

このチュートリアルは、前のチュートリアルで説明したすべての手順を実行したことを前提としています。 これは、LAMPスタックを実行している独自のVPSにコマンドラインでアクセスでき、CakePHPをすでにインストールおよび構成していることを意味します。 つまり、前のチュートリアルが終了したところから続行されます。

覚えているかと思いますが、私たちのアプリケーションの状態は、 / var / www / project フォルダーへの単純なCakePHPインストールと、posts[というテーブルを保持するcakeというデータベースでした。 X192X]現在1行あります。 mysqlコマンドラインにアクセスして、別の行を追加しましょう。

INSERT INTO posts (title,body,created)
    VALUES ('Another title', 'Another body text', NOW());

2つの行ができたので、CakePHPを使用してこのデータを操作し始めることができます。 しかし、前に、命名規則についてのいくつかの言葉。

命名規則

CakePHPは、提案されている命名規則に従うと、いくつかの優れた機能を提供します。 これは、アプリケーションロジックと一貫性を維持するのにも役立ちます。 たとえば、コントローラー名はCamelCasedで、複数形で、 Controller (たとえば、 PostsController )で終わり、同じ名前のファイル( PostsController)に保存する必要があります。 .php )。

一方、モデルクラス名は特異であり、個々のデータモデル( Post )を反映しています。 さらに、Modelクラスは、慣例に従って名前が付けられている場合、そのデータが同じ名前で複数形で呼び出されたデータベーステーブル(この場合は post )に存在し、によって使用されることを自動的に推測します。同じ名前が複数形で、末尾にControllerという単語が付いているコントローラー(この場合は PostsController )。

これは簡単な紹介です。CakePHPの規則の詳細については、このページにアクセスしてください。

モデル

モデルクラスは、データとのやり取りに使用されるため、アプリケーションのビジネスレイヤーです。 CakePHPでは、モデルは通常データベーステーブルを表しますが、他の種類のデータにアクセスするためにも使用できます。 この点で、モデルはデータモデルであり(ブログ投稿、コメント、ユーザーはたとえばデータモデルです)、それらの宣言は / app /Modelフォルダーにあるファイルに格納されます。

このアプリケーションでは、命名規則に従うため、Modelクラスに Post という名前を付け、 app /ModelにあるPost.phpというファイルに配置します。 ]フォルダ。 このようにして、データベース内の posts テーブルを使用する必要があることが自動的に認識され、PostsControllerによって使用されます。

それでは、先に進んでファイルを作成し、次のクラス宣言内に配置します。これにより、デフォルトのCakePHP Modelクラスを拡張して、ブログ投稿用のクラスを作成します(ファイルの先頭にPHP開始タグを追加してください)。

class Post extends AppModel {
}

ファイルを保存して終了します。 デフォルトのCakePHPModelクラスを拡張し、命名規則に従うことで、CakePHPは何をすべきかを知っているので、このテーブルでの単純なCRUD操作に必要なのはこれだけです。 ただし、実際にコントローラーで呼び出すことができるように、テーブルのクエリに使用するメソッド名を知っておく必要があります。 次にいくつか説明します。

コントローラー

コントローラは、ブラウザのユーザーリクエストをアプリケーションのアクションにルーティングするために使用されます。 次に、リクエストを解釈し、リクエストされた情報を特定の形式(特定のビューによって決定される)で配信する必要があるモデルを利用します。

このアプリケーションでは、 app /ControllerフォルダーにあるPostsController.phpというファイルにPostsControllerというコントローラーを作成します。 次に、最初に次のコードを貼り付けます(ファイルの先頭にPHPの開始タグを追加してください)。

class PostsController extends AppController {
    public $helpers = array('Form');
    
    public function index() {
        $this->set('posts', $this->Post->find('all'));
    }
}

このクラスは、デフォルトのCakePHP Controllerクラスを拡張し、後で使用するいくつかのCakePHPヘルパーライブラリを格納する属性($ helpers)を宣言します。 次に、 index()メソッド(コントローラーが使用するメソッドに関する指示を受け取らない場合にデフォルトで呼び出されるメソッド)を作成します。 CakePHPのメソッドは、アクションとも呼ばれます。

作成したindex()アクションは、親コントローラーから継承された set()メソッドを使用して、コントローラーからビューにデータを渡します(これはすぐに作成します)。 このデータはposts変数に格納され、 find(’all’)メソッドを使用してPostモデルから取得されます。データベーステーブル。 $ this-> Post を使用してモデルを使用できる理由は、CakePHPの命名規則に従っているためです。

これで、ビューを作成するだけで、すべての投稿を表示するページが表示されます。

景色

ビューの目的は、コントローラーによって要求され、モデルによって配信されたデータを表示することです。 ビューを使用して、アプリケーションのビジネスロジックからプレゼンテーションを分離するようにします。 現在のタスクは、上記で宣言した index()メソッドによって取得された情報を表示するビューファイルを作成することです。

CakePHPビューは、それらが属するコントローラーにちなんで名付けられたフォルダー内の app /Viewフォルダーにあります。 次に、Viewファイルを Posts というフォルダーに配置し、 index.ctp という名前を付ける必要があります(メソッドが要求した後)。 内部に、次のコードを配置しましょう。

&lth1>Blog posts&lt/h1>

&lt?php foreach ($posts as $post): ?>
&ltp>&lt?php echo $post['Post']['title']; ?> | &lt?php echo $post['Post']['created']; ?>
&lt?php endforeach; ?>
&lt?php unset($post); ?>

これにより、非常にシンプルで見苦しいページが出力されますが、要点はわかります。 配列$posts (Controllerの set()メソッドで設定して渡したもの)を繰り返し処理し、テーブルから投稿のタイトルと作成日を出力します。 したがって、この情報を取得するには、ブラウザでwww.example.com/project/posts/indexまたは単にwww.example.com/project/postsとして)を指定します。 index()は、メソッドが指定されていない場合に呼び出されるデフォルトのアクションです)。

ご覧のとおり、データベースにクエリを実行するためのコードを記述しなくても、アプリケーションはすでに読み取り操作を実行できます。

データがデフォルトのCakePHPレイアウト( app / View / Layouts にあります)内に表示されていることに気付くでしょう。 すべてのビューはレイアウトの一部であり、必要な数だけ作成できます。 次に、使用するレイアウトをコントローラーで指定するだけです。 自動的に使用されるため、このチュートリアルの残りの部分ではデフォルトのものを使用し続けます。 レイアウトの詳細については、こちらをご覧ください。

次に、個別の投稿を別のビューに表示する方法を見てみましょう。

このために、PostsControllerに別のメソッドを追加する必要があります。 したがって、 index()メソッドを定義した場所の下に、次のコードを貼り付けます。

 public function view($id = null) {
        $post = $this->Post->findById($id);
        $this->set('post', $post);
    }

ここでは、1つの投稿のみを検索しているため、 PostモデルはfindById()メソッドを使用して、必要なIDを渡します。 このIDは、次の方法でURLからパラメーターを取得する view()アクションから取得されます: www.example.com/posts/view/1 、1必要な投稿のIDです。 次に、同じ set()メソッドが、テーブルから取得した投稿情報を含むpostという変数をViewに渡します。 単純。 このメソッドには、この時点で実際に最低限含まれています。 コントローラに渡されるものが有効なIDなどであるかどうかを確認するためのチェックも実装することをお勧めします。

次に、 view.ctp という名前の、前に作成したフォルダーと同じフォルダーにビュー自体を作成します。このフォルダーに次のコードを配置します。

&lth1>&lt?php echo h($post['Post']['title']); ?>&lt/h1>
&ltp>&ltsmall>Created: &lt?php echo $post['Post']['created']; ?>&lt/small>&lt/p>
&ltp>&lt?php echo h($post['Post']['body']); ?>&lt/p>

www.example.com/project/posts/view/1 に移動すると、ID 1(タイトル、作成日、本文)の投稿が表示されます。

結論

このチュートリアルでは、CakePHPを使用してデータに対して基本的な読み取り操作を作成する方法を見てきました。 データモデル(投稿)のModelクラスを宣言し、コントローラーを使用してこのデータを要求し、ブラウザーに表示するためのいくつかの単純なビューを作成しました。 さらに、CakePHPによって実装された命名規則に従うことの力を少し見てきました。 そうすることで、データのデータベースクエリを作成する必要がなくなり、モデル、コントローラー、ビューが簡単に「接続」され、あまり指定する必要がなくなりました。

次のチュートリアルでは、テーブルに投稿を追加し、編集して、最後に削除する機能を追加して、小さなアプリケーションを完成させます。

投稿者: Danny