Symfony2を使用してVPSでCRUD操作を実行する方法(パート1)
Symfonyについて
Symfony は、オープンソースのPHPWeb開発フレームワークです。優れたアプリケーションの構築に役立つツールと方法論のセットです。 このフレームワークの特徴のいくつかは、その速度、柔軟性、スケーラビリティ、および安定性です。 本格的なWebアプリケーションだけでなく、プロジェクトに必要な小さな機能にも使用できます。
前のチュートリアルでは、Symfony2 Standard Distribution をインストールし、VPSで動作するように構成する方法を見てきました。 このチュートリアルと次のチュートリアルでは、データモデルに対していくつかの基本的なCRUD(作成、読み取り、更新、削除)操作を実行する小さなSymfonyアプリケーションを作成します。 このチュートリアルは、前の記事の手順を実行し、中断したところから続行できることを前提としています。
使用するデータはニュースページです。 エンティティ(ニュースページのデータモデルとして機能)を作成し、それを読み取って表示する方法を学習します。 次の記事では、ニュースページの追加、更新、削除など、他の操作を実行する方法を学習します。 ただし、最初にバンドルを作成する必要があります。
バンドル
Symfonyのバンドルは、アプリケーションの特定の機能に必要なすべてのファイルを保持するディレクトリです。 これには、PHPファイル、スタイルシート、javascriptファイルなどが含まれます。 このアプリケーションでは、ニュースページに関係するすべてのことを担当するバンドルを1つだけ作成します。 ブログも必要な場合は、それを担当する特定のバンドルを作成できます。
バンドルのすごいところは、プラグインのようにも機能することです(Symfonyのコア機能でさえバンドルに配置されています)。 つまり、特定の機能のすべてのコードを保持する新しいバンドルを自分で作成することも、他の誰かが作成した外部バンドルを登録することもできます。 したがって、データの操作を開始する前に、Symfony Standard Distributionがこの優れた機能を提供するため、コマンドラインで空のバンドルを生成しましょう。 これは、すべてのフォルダーを作成してバンドルをSymfonyに手動で登録する必要がないことを意味します-これはすべて自動的に行われます。
したがって、バンドルを自動的に生成するには、アプリケーションのメインフォルダー(この場合はSymfony)に移動します。
cd /var/www/Symfony
次のコマンドを実行して、NewsBundleという名前の新しいバンドルを生成します。
php app/console generate:bundle --namespace=Foo/NewsBundle --format=yml
画面の指示に従い、デフォルトのオプションを受け入れます。 このコマンドは、ベンダーFooに属するNewsBundleという名前のバンドルを生成します。 ベンダーの名前は自由に選択できますが(これは基本的にあなたを表しています)、バンドル名がBundleという単語で終わっていることを確認する必要があります。 さらに、このコマンドは、バンドルの構成形式をYAMLファイルに指定します。
バックグラウンドで、バンドルのフォルダー構造が作成され( src / Foo / NewsBundle )、バンドルがアプリケーションの残りの部分に登録されます。
エンティティ
前のチュートリアルのすべての手順を実行した場合は、データベース接続がすでに構成されているはずです。 そうでない場合は、parameters.ymlファイルを編集できます。
nano /var/www/Symfony/app/config/parameters.yml
そこで、データベース情報を指定できます。 すでにデータベースを作成している場合は、次の手順をスキップできます。 ただし、次のコマンドを使用して、Symfonyにこのファイルの情報と一致するデータベースを自動的に作成させることができます。
php app/console doctrine:database:create
ここで、データモデル(ニュースページ)を操作するには、エンティティと呼ばれるものを作成する必要があります。 これは基本的に、ニュースページに関するすべての情報を定義するPHPクラスです。 Symfonyには、これを使用するための優れたコマンドラインツールと、このデータモデルに一致する実際のデータベーステーブルを作成するためのもう1つの優れたコマンドラインツールがあります。
したがって、Newsというエンティティを生成するには、コマンドラインから次のコマンドを実行します。
php app/console doctrine:generate:entity
画面の指示に従ってください。 最初に指定する必要があるのは、ショートカット名ですが、名前です。 私たちの場合はFooNewsBundle:News になります(エンティティ名はコロンの後に続くものですが、それが属するバンドルも指定する必要があります)。 次に、構成管理のために先に進み、ymlを選択します。
これに続いて、データモデルのクラスプロパティ(テーブルの列に一致する)を追加します。 タイトル(文字列、255)、本文(テキスト)、created_date(日時)を追加しましょう。 次に、リポジトリは必要ないので、「いいえ」を選択して生成を確認します。 これでエンティティが作成されました。
それがどのように見えるかを知りたい場合は、新しく作成されたエンティティクラスファイルを調べることができます。
nano /var/www/Symfony/src/Foo/NewsBundle/Entity/News.php
次に、この新しく作成されたエンティティに基づいてニュースページを保存するデータベーステーブルをSymfonyに生成させましょう。 次のコマンドを実行します。
php app/console doctrine:schema:update --force
このコマンドは、エンティティから情報を取得し、これに基づいてテーブルを生成します。 簡単な確認が必要です: “
データの読み取り
データベースが空なので、phpmyadminまたはコマンドラインを使用して、新しいSymfonyアプリケーションを使用して読み取ることができる2つのテスト行を挿入しましょう。 後で、アプリケーションを使用して新しいコンテンツを追加する方法を説明しますが、今のところ、mysqlターミナルで次のコマンドを実行して2行を追加できます。
use symfony; INSERT INTO News (title,body,created_date) VALUES ('News title 1', 'Some body text', NOW()); INSERT INTO News (title,body,created_date) VALUES ('News title 2', 'Another body text', NOW());
ダミーコンテンツができたので、特定のニュースページに対するユーザーリクエストをSymfonyコントローラーにマッピングするルートを作成しましょう。
アプリケーションのメインルートファイルはapp/ config フォルダーにありますが、バンドルフォルダー構造にあるrouting.ymlファイルでバンドルの特定のルーティングルールを定義することもできます。 :
nano /var/www/Symfony/src/Foo/NewsBundle/Resources/config/ routing.yml
すでに存在するルールを削除し、代わりに別のルールを追加しましょう。
foo_news_show: pattern: /news/{id} defaults: { _controller: FooNewsBundle:Default:show }
このルールの名前はfoo_news_showで、ブラウザーが www.example.com/Symfony/web/app_dev.php/news/ {id} 、[X159X ] {id}