フレームワークからフレームワークなしへの移行[終了]


89

私は趣味として約8年間PHPで開発してきました。2009年に私はcodeigniterを採用しましたが、それ以来、単一のプロジェクトを開発することができませんでした。

純粋なPHPで作業していた場合、私が知っていた場合、またはスニペットをすばやく見つけることができた場合に、希望どおりに動作するように変更する方法を考え出そうとすると、速度が遅くなります。

私はCodeIgniter、Kohana、Symfonyを試しました。私は使いやすさを気に入っています(そして、Doctrineをデータベース作業を大幅に高速化するORMとして使用し始めました)が、プロジェクトでは純粋なPHPにかかる時間の3〜4倍の時間がかかっています。以前に純粋なPHPで解決した問題の解決策が見つからないと、私は退屈してイライラします。

フレームワークの使用からフレームワークなしのアプローチに戻った人はいますか?基本的なセキュリティフレームワークのようなものはありますか(XSSの防止、投稿されたデータのフィルタリング、データベースで使用するためのクリーニング機能の提供)?そのようなことは、フルスケールのフレームワークよりもはるかに有益だと思います。フレームワークでの作業を学ぶことで多くのことを学んだと思いますが、自分のコードで作業するほうが幸せです。


5
フレームワークを使用しない場合と比較して、フレームワークを3〜4倍の時間で使用することについてお話しした理由について詳しくお聞かせください。
ルクマン

7
CIまたは任意のフレームワークの利点の1つは、特定の開発スタイルに慣れていない開発者が保守しやすい設計パターンを強制できることです。また、大規模な環境では、ビューをロジックから分離することが不可欠です。これにより、CSSの達人が開発者の足を踏み入れずに機能を実行できるようになります。
カイルノーランド、

1
すばらしい質問です。もし選択肢がある場合は、純粋なPHPを使用します。しかし、ほとんどの場合、私が働いている人々は私にフレームワークを使用することを望んでいるので、追加の時間を彼らに請求するだけです:)私のコードは読みやすく、整然としていて安定しています。おそらく、災害が発生してすべてのコードが「あなたのカスタムフレームワーク、誰も読めない」という状態になった場合、彼らはあなたを船上に留めておかなければならないことを恐れているでしょう。
SSH

回答:


101

PHP5の現在のバージョンには、標準ライブラリの一部として探しているセキュリティフレームワークの多くが含まれています。

入力としてHTMLを受け入れる場合は、HTML Purifier取得して、filter_input_array設定のFILTER_CALLBACK行から呼び出すことをお勧めします。入力セキュリティへのホワイトリストベースのアプローチは、XSSに対する優れた(そして非常に強力な)防御の第一線になります。

私の知る限り、PHPにはクロスサイトリクエストフォージェリから保護するメカニズムはありませんが、Googleがそれを支援できると確信しています。OWASPセキュリティチートシートは、あなたがあなた自身の保護を実装する場合、それに関するセクションが含まれています。

好奇心から、スタンドアロンコンポーネントも検討することにしました。これまでに見つけたものは次のとおりです。

テンプレート:

  • PHPテンプレートの継承(通常のPHPとテンプレートの継承)
  • TWIG(Django / Jinja2 / 自動エスケープやサンドボックスを含むLiquidスタイルの構文。高速化のためにキャッシュされたPHPにコンパイルされます。)
  • Dwoo(より速く、より機能的で、PHP5に似たSmartyの後継。既存のSmartyテンプレートの互換性システムが含まれています。)

私がまだ適切に調べていないもの:

  • ルートディスパッチ(これまでにRouteMapNet_URL_Mapperのみが見つかりました。ありがとう、cweiske)
  • ORM(ただのPDOがあなたのものではない場合に備えて)

おかげで、すべての非常に良いアドバイスと私は今それらを調査し始めるつもりです!
Alex C

4
テンプレートエンジンが必要な場合は、Smarty for Dwooを交換してください。機能的には、Smartyとほとんど同じですが、CPUを溶かしません。
Phil Sturgeon

pear.php.net/package/Net_URL_Mapperはルートディスパッチャーです。
cweiske 2011年

4
フレームワークがあなたを遅くするなら、ペストのような、特にSmartyのテンプレートエンジンを避けてください。それらは意味がありますが、PHPが既に行っていることを行う、直感的でない新しい方法を作成するだけです。
夜更かし

あなたが達成しようとしていることと、なぜフレームワークがあなたを遅くするのかに依存します。
ssokolow 2011

10

私はフレームワークを信じていません...私はそれらの多くで働いてきました。

MVCフレームワークを嫌う理由:

1)コードの肥大化、私は開発を支援するプレミアムクラスを購入します。フォームクラスやSQLクラスなど。

2)MVCフレームワークは、特に依存関係マネージャーを使用している場合、簡単に移植できないと思います。

3)実際にMVCフレームワークを使用してより多くのコードを記述し、その後、認証などを処理する便利なクラスを大量に含む定型文を使用する必要がある場合は、

4)ほとんどのフレームワークは、1つまたは2つのデータベースのみをネイティブで提供します。

私は認証とテキストエディターとmadoo +電子メールクラスのようなsqlフレームワークでフォームフレームワークを見つけることをお勧めします...

アプリケーションの90%は常にフォーム、SQL、およびAjaxクラスです-残りは必要なときに取得できます

私はミニマリストであり、自分のアプリケーションに何も実行しないコードがあるという考えに苦労しています...必要な場合に備えて、それが私にとってうまくいきません。


「私はプレミアムクラスを購入します」という文言について:そのようなクラスをどこから購入し、どのような目的で使用しますか?ありがとう。
dotancohen 2015

同意する。また、多くのフレームワークでかなりのパフォーマンスヒットがあります。
developerbmw

8

多くの経験があるため、お気に入りのライブラリを独自に用意し、それらを手で選択して、独自のシンプルなフレームワークを作成する必要があります。フレームワークまたはフレームワークなし(およびどのフレームワークか)は、手元のプロジェクトの種類に依存し、すべてに対応できるグローブはありません。ですから、既存のフレームワークが遅くなっていると感じたら、しばらく時間をかけて、ニーズに応じて機能するフレームワークを考え出すことを強くお勧めします。


8

PHPを趣味として使用しているというあなたの声明、および「ゆっくりとそこに着く」というプロファイル声明に基づいて、これは学習曲線の問題のように思われます。a)フレームワークが課す構造内でどのように作業するかを理解し、b)フレームワークが可能にする効率から利益を得ることができない、深い経験と幅広い経験がないようです。

私はそれに固執することをお勧めします。ビデオチュートリアルで最初に戻ります。あなたがそれを理解するまで、他の人々のコードを見つけて読んでください。プロジェクトを最初から構築します-簡単に始めて、機能を追加します。フォーラムをフォローして、返信を読む前に自分で質問に答えようとします。

私はさまざまなプラットフォームで約20年間プロフェッショナルなプログラミングをしてきましたが、それでもCIに慣れるまでにはしばらく時間がかかりました。しかし今は、定量化可能なパフォーマンスの問題を明らかにするのに十分な規模のサイトがない限り(自分のプロジェクトの場合)、純粋なPHPに戻ることはありません(Twitterと考えてください)。


私もフレームワークが好きかどうかに関わらず、まだ境界線にいます。私は間違いなくOPの要点を理解していますが、あなたもそうです...フレームワークを学ぶことは、まったく新しい言語を学ぶようなものです。フレームワークの物事のやり方を理解する必要があります。しかし、私が苦労しているもう1つのことは、物事をどのようにすべきかという私の哲学がフレームワークのそれと異なる場合です。私はまだ自分に合うものを見つけようとしています。(.NET MVC3を待つことができません)
mpen

まだ、他のフレームワークを知らないので、一般的に話すことはできません。しかし、フレームワークを使用することは、オールオアナッシングの命題ではありません。たとえば、CIのキャッシュライブラリ(ページ、データベース)は不十分であり、容易に拡張できないことに気づきました。だから私はサードパーティのキャッシュライブラリ(Phil Sturgeonのもの)を使っており、それにとても満足しています。
coolgeek

それに固執することのもう一つの重要な利点は、その後他のフレームワークを学ぶことが比較的簡単になることです。これが、特定のフレームワーク(CIなど)を指定した求人のリストを頻繁に見る理由ですが、同様のフレームワーク(Zend、Symfonyなど)での経験が考慮されると述べています。
-coolgeek

2

Zend Frameworkはそのために本当に優れています。必要なだけ使用できます。そのすべてがphpでコード化され、オープンソース化されているため、ハックして独自のものにすることができます。異なるコンポーネントは、他のフレームワークほど相互に依存していません。

Zendのコンポーネントを使用して、問題なく簡単なフレームワークを構築できます。

要チェック


3
彼はフレームワークから離れようとしています。
WarmWaffles

1
@WarmWaffles。WichがZFの一部の使用について話した理由です。Surellyは、その男がすべてのために車輪を再発明することを期待していません。
Iznogood

2
Iznogoodは非常に良い点を持っています。ZFは単なるフレームワークではありません。パッケージは多くの一般的なタスクを実行するのに非常に役立つことがわかりましたが、MVCパターンやDBアクセスメソッドなど、実際には何でも使用することを強制するものは何もありません。もちろん、Pearモジュールをそのまま使用することもできます。
ボブ・バデリー2010

2
それもフレームワークを遊ばしているのは、ライブラリーです。しかし、彼は使いやすいものを探していて、前回Zendの名前空間が雑然としていて、タイプするのが面倒だったことを確認しました。@Bob_Baddeley PEARはよい提案です
WarmWaffles

@WarmWafflesまあ、私は彼自身それぞれにね。たぶん、今すぐZendを1.10.xで再確認して、1.8とはかなり異なる可能性があります。
Iznogood

2

私はあなたの気持ちを正確に知っています。私は4〜5年前にPHPで始めて(Delphiから来ました、笑)、純粋なphpで始めました。私が持っていたのは、すべてのテーブルフィールドを読み取ってフォームを作成する「CMSパネルのような」ものでした。PHPフレームワークの知識に何らかの形で到達した後、私は最初にCakePHPを試してみましたが、好きではありませんでした。その後、私の意見でYiiに入ると、かなり直感的で使いやすいです(Giiジェネレーターを使用すると、かなりロックされます)。Symfony、ZF2、Laravel、Yii2-Beta、およびRADのいくつかのフレームワークを試してみましたが、それでもフレームワークの前のように十分に速く感じていませんでした。

私は自分のフレームワークを開発したことに気づきました(当然のことながら、いつか目が覚めて「新しいフレームワークを作成する」と言ったのは、その時に起こりました)。私はそれが悪い悪い悪い習慣であり、「ホイールの再発明」の動きであることを知っていますが、今ではプロジェクトをはるかに速く(PHPのみよりも)開発しています。

コードは完全なMESSなので、約1か月前にフレームワークの再構築を開始しました。今ではcomposerを使用し、phpフレームワーク間に存在する一般的なルールに従っているMVCです。

なぜ私は改革しているのですか?誰かが私のプロジェクトを修復する必要がある場合、それは別の世界のものではないからです。

だから私はあなたを理解しています。

私のアドバイスは、ツールを準備し(フレームワーク、プリセットアプリ、またはその他の名前を付ける人)、使いやすいように使用しながら、いくつかの一般的なルールに従っています(MVCと同様に、「モジュール化が簡単」なことです)壊れた場合は交換できます。


1

基本的なセキュリティのために、スーパーグローバルラップするカスタムフィルターメソッドを使用します。その構文には慣れる必要がありますが、PHPのfilter_var()APIよりも簡単であり、サニタイズを簡単に行えません。

 $_GET->text("inputvar") or $_POST->name["field"]

また、インライン$ _REQUEST-> sql()のエスケープも許可されていました。ただし、データベース作業では、パラメーター化されたSQL、または選択したDAL / ORMを使用し続けます。


これは間違いなく賢い解決策ですが、フィルターAPIが面倒だと思う理由がわかりません。どちらかと言えば、filter_input_array()が優れていると思います。(主に、特定の要求タイプのすべての入力を合理的に宣言的な方法で1か所で簡単に定義できるためです。そのようなことの利点を過小評価しないでください。)
ssokolow

@ssokolow:確かに、filter_input_array()は、一気に実行するのに便利です。ただし、filter_ *関数にはすでに柔軟性がありすぎており、あまりにも多くのパラメーターが適していません。だからこそ、人々はそれを避けていると思います(技術的には優れたソリューションですが)。
マリオ

たぶん。問題の一部は、多くの人々がまだPHP4の本を棚に置いている世界に最近到着したことに加えて、あまり宣伝されておらず、公式ドキュメントは十分に明確ではなく、W3Schoolsのドキュメントだと思いますGoogleの上位の結果を共有する傾向があるものは、十分に包括的ではありません。
ssokolow

1

私はToroPHPの 1日の調査を行いましたが、それは非常に素晴らしいものでした。RESTfulアプリケーションを対象としたミニマリストフレームワークです。これにより、フレームワークの肥大化に対処する必要なく、サーバー側のコードをモジュール式に保つことができます。


1

何があなたを困らせているのかはわかりませんが、codeigniterは素晴らしいフレームワークです。素晴らしいドキュメントがあり、多くの人がcodeigniterを使用しているので、ドキュメント、フォーラム、またはstackoverflowですべてのヘルプを見つけることができます。 Codeigniter、CakePHP、Zend、Spring 3.0、Ruby on Railsなど)、codeigniterが最高のドキュメントを持っていると言わなければなりません。codeigiterには自動的に処理されるものがたくさんあり、セキュリティについて心配する必要はありません。コアPHPでの作業は、車輪を再発明するようなものです。最も重要なことは、コアからフレームワークに移行するには、慣れれば多くの労力が必要になり、愛するようになるということです。また、Ruby on Railsも、その詳細を知った上で優れたフレームワークになります。倍の速度を持っています。


2
私がこれを投稿して、実際にしばらくの間純粋なPHPで作業してから2年が経ちましたが、それ以来PHPに戻ってきました。私の現在の推奨設定は、CI、データベース用のphpActiveRecord、テンプレート化用のTwigです。
Alex C

うん、phpActiveRecordは見栄えがいい。Laravelを試したことがありますか?(laravel.com)CI、phpActiveRecord、Twigのすべてがデフォルトで組み込まれていることがわかります。私自身、CakePHPの開発者でしたが、最近Laravelに熱心に取り組んでいます。
Simon East
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.