Symfony2を使用してゼロからeコマースポータルを作成する

それはすべて、家具の販売用のWebポータルを考案したという事実から始まりました。 これは家具やインテリアアイテムを販売するためのWebポータルであり、私自身も将来のポータルの一部として実装しなければならない多くのアイデアを持っています。 これらのアイデアはすべてオンラインストアに似ていましたが、通常のストアのフレームワークにはあまり適合しませんでした。 たとえば、実際のアパートの美しいインテリアに商品を表示する必要があります。これは興味深いものであり、最も重要なことは買い手にとって便利です。 したがって、私たちのサイトでは、構造を形成するカードとインテリアと商品を別々にする必要があります。 もう1つの問題があります。ポータル自体には独自の倉庫とロジスティクスがなく、情報を集約するだけです:パートナーからの販売を収集、分析、美しく表示、生成します。 そのため、異なるサプライヤーを入力したり、異なる配送条件を表示したりする必要があります。 そのため、私たちの前に疑問が生じました。ポータルをゼロから作成するために何を使用できるのか、同時に選択したソリューションをカスタマイズする際に大きな柔軟性があります。 それで、私たちは何を得ました。



ランプの選択

まず、共通の技術スタックを選択しました。 ここでは簡単でした。結局のところ、Webポータルのテクノロジーの最も一般的な選択はLAMP(Linux、Apache、MySQL、PHP)です。 高価で長いので、車輪を再発明し、すべてをゼロから書きたくはありませんでした。 ライブラリ/フレームワーク、おそらくCMS / Eコマースシステムを使用して、できるだけ早くポータルを作成する必要がありました。 LAMPテクノロジーが最も一般的である場合、多数の異なるオープンソースソリューションを見つけることができ、それらからポータルの「基礎」に適したものを選択できることを意味します。



すぐに使えるEコマースシステム

PHPとそれに関連するすべてのものを選択するとすぐに、トピックで既に完了しているものを調べ始めました。 もちろん、すぐに既製の電子商取引システム、例えばMagentoの人気の高まりについて考え始めました。 このシステムをカスタマイズして実装するMagentoパートナーがいくつか見つかりました。 彼らは、パフォーマンスの最適化を含むすべての要件に対してMagentoを「短縮」するのにどれくらいのコストがかかるか、おおよその見積もりをするように依頼しました。 私たちの計算では、作業コストと短期的なサポートの観点から、純粋なPHPですべてをゼロから作成する場合よりもさらに高価になることが示されました。 他のEコマースソリューションを見ました:osCommerce、ZenCart、PrestoShop。 ここでは状況はほぼ同じで、さらに悪いことかもしれません。 したがって、検索の開始点に戻りました。



フレームワークとライブラリ

次に、より一般的なソリューションであるフレームワークとライブラリに目を向けることにしました。 Zend 1.11、Symfony 2、Yiiの3つの最も一般的なフレームワークを選択することにしました。 ここでは、より技術的なアプローチで選択しました:PHP 5.3の完全なサポートが必要でしたが、フレームワークコード自体がPHP 5.3の記述スタイル、つまり可能な限りOOPを想定していると、後からサポートする必要があるため望ましいでしょう。 Zendはすぐに放棄されました。 彼は非常に怪物であり、私たちは彼の機能の約20パーセントを必要とします。 さらに、予想される2.0は、主要な開発者のサイトでのアイデアの形でした。 Yiiは当時まだ新鮮で(2011年秋)、これらの「ホットケーキ」が何に満ちているかを知っています(時間が示すように、PHP 5.3を完全にサポートするYii 2.0のバージョンはまだ書かれています)。 そして、リスクを冒さず、最も既製で安定した製品であるSymfony 2を使用することにしました。



ORMソリューション

そこで、プラットフォームとフレームワークの両方を選択しました:LAMP + Symfony2。 また、ポータル内のデータのストレージと表示のレベルに関する問題を解決する必要がありました。 自分専用の何かを書くことはおそらく良いでしょう-これはより速く、より少ないコードで動作します。 しかし、私たちの主な問題は、製品を製造したことであり、明確で一定した仕様がなかったことです。 エンティティ、その関係、およびビジネスロジックの改善(読み取り:頻繁な変更)には、迅速に変更でき、多くの回帰バグを取得することを恐れない、ある種の柔軟なソリューションが必要でした。 この場合、私たちはよく打たれた道を行きました。 現在、さまざまなORMソリューションの人気が高まっています。 テクノロジースタックやアプリケーションドメインに依存しません。 したがって、いくつかの審議の後、ORM Doctrine 2を選択しました。さらに、Symfony 2の標準モジュールとして含まれています。さらに、ポータルで作業するときのデータ量の増加とエンティティ間の関係により、非リレーショナルDBMSの使用に進むことがわかりました。たとえば、MongoDB、および選択したORM-Doctrineを使用すると、これも実装されます。



合計で興味深い一連のテクノロジーが得られました。



LAMP + Symfony 2 + Doctrine 2。



これらの技術の組み合わせの暗黙の利点は、選択した技術が非常に新鮮で有望であるため、従業員が将来チームで働くよう動機づけることが非常に簡単だったことです。 もちろん、LAMPを除きます。



symfony

次に、Symfonyを使用してWebポータルを作成する詳細についてもう少し説明します。 このトピックについては、 「Symfony 2:便利なライブラリとバンドル」の投稿で既に十分に開示されています。 ちなみに、この投稿を見たとき、作業のほとんどすべてを既に使用していることがわかりました。 私たちの選択が一致することは素晴らしいことです。 それでも、使用したバンドル(プラグイン)と、この選択の理由を簡単にリストしたいと思います。



SonataMediaBundle-写真、ビデオ、swfオブジェクト-360 、パノラマの操作に使用します。 メディアコンテンツを使用する必要がある場合は、強くお勧めします。 バンドルは簡単にカスタマイズおよびカスタマイズできます。 ここで、コードと同じサーバーにコンテンツを保存します。 このバンドルにより、Amazonまたは他のクラウドに簡単に切り替えることができます。 そして、わずか数時間でこれを行うことが可能になります。 画像のみを使用する場合は、gd、imagickなどの標準PHPモジュールのラッパーが必要になります。 ImagineとAvalancheImagineBundleを使用しました。 もちろん、他のこともできますが、この種の優れたPHPライブラリをいくつ知っていますか?



FOSUserBundle-最初は、ユーザーとの作業を開始する簡単な方法として使用しました。 多くの人は、単純な承認などのタスクには大きすぎると言うでしょう。 一部の人々が必要とするよりも少し柔軟性が高いと言います。 このバンドルは、Loginzaサービスと組み合わせて使用​​されます。 一般的なユーザーは、多くの場合、vkontakteまたはfacebook(たとえば、twitter)を介してログインします。



FOSRestBundle-積極的に使用し始めたところです。 私たちが必要とする形式の管理者は、RESTに完全に適合すると言えます。 ここでは、「更新」、「削除」などの標準操作と、さまざまなデータ形式での出力の両方が行われます。



KnpMenuBundle-すべてのナビゲーションコード(メニュー、ブレッドクラム)を簡単に置き換えました。 すべてのPHPプログラマーが自分で似たようなことを書いたと思います。 バイクでダウン! シンプルなメニューを提供してください!



TwigBundle-テンプレートが好きなので、PHPで書くのは好きではありません。もちろん、Smartyは好きではありません。 はい、Smarty 3があることを知っています。 ただし、smarty.php.netからスローされたのは無駄ではありませんでした。



SwiftMailerは私たちにとってライブラリが重すぎます。 私たちの計画には、より簡単でシンプルなものへの移行が含まれています。 利点のうち、Symfony2の優れた統合。



FOQElasticaBundle-スフィンクスが嫌い。 冗談。 現在、検索が難しいコンテンツの量はありません。 そのため、Elasticaの方が優れたソリューションになると判断しました。 すべてのCRUD操作のデフォルトの自動更新インデックス。 速くて安い。



ポータルの作成と開発に携わった同僚は、今私を理解するでしょう-仕事は終わりません。 そして今、リソースの技術開発に関する多くのタスクと計画がありますが、投資家の素晴らしいアイデアをすべて数えているわけではありません。 現在最も重要なタスクは、データの検索とキャッシュの構成、パフォーマンスの最適化、静的コンテンツのストレージの適切なサーバーへの転送です。 これについて、十分な時間がある場合は、後で別途書きます。



この記事が、成功して技術的に有能な新しいポータルを計画している、またはすでに作成している人にとって興味深いものになることを願っています。



All Articles