2016-07-05 3 views
7

私は自分のWebアプリケーションを開発しています。 私は、コードのこの部分を持っている:ユーザーがログインしたときにビジネスロジックとして分類されたSESSION変数の値をチェックしていますか?

<?php 
if($_SESSION['add'] == 1) 
echo '<input type="button" name="add" id="add" value="Add" onclick="add()" >'; 
if($_SESSION['edit'] == 1) 
echo '<input type="button" name="edit" id="edit" value="Edit" onclick="edit()">'; 
?> 

基本的に、私は、そのユーザーが変更を行い、レコードを追加する権限があるかどうかを示すセッション変数を設定します。だから彼らはホームページに行くとき、私はこのコードを使用して私の追加と編集ボタンを表示するかどうかを決定するために使用します。

このコードは論理/プレゼンテーションの分離ルールを破っていますか?もしそうなら、私はどのように分離を達成できますか?

私はウェブフレームワークを使用していません。

+2

add()およびedit()が単なるjavascript関数である場合、ユーザーはアクセス権がなくても呼び出すことができます。 –

+0

どうすればこの問題を解決できますか? –

答えて

10

Viewの条件は完全に良好ですが、ビューは単独のソースからデータを取得しようとしないでください。これはその役割ではなく、コントローラー(またはアプリケーションアーキテクチャーに関係なくプレゼンター)のデータにのみ作用します。とeditaddモードの間で切り替えると、あなたのビューはの背後にある論理を知ってはいけません。ご注文の際にはをどうすればいいのかを知る必要があります。あなたのケースでは、コントローラーは$_SESSIONをチェックして、表示を追加または編集してその表示を表示(つまりaction_mode = edit|add)すると、どのモードを決定してダムを実行する必要があります。

PS:コードブロック(1行でさえも)を常に{,}括弧内に入れることを習慣にすることをお勧めします。

+0

あなたの答えを理解するのに困っています、ごめんなさい。 –

+2

@Connor一言で言えば、データの特定のソースである '$ _SESSION'からビュー論理を切り離したいとします。 '$ _SESSION'以外の何かが特定の編集モードを決定する他の状況があるかもしれませんが、あなたはその決定を' $ _SESSION'変数に直接結びつけたくありません。 – deceze

関連する問題