質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • PHP

    19872questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CakePHP

    2266questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

管理パネルにおける例外処理の実装方法

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 550

amakusa

score 168

お疲れ様です。
現在僕はお悩み掲示板のようなサービスの管理パネルを作っているのですが、
例外処理を実装しなきゃいけないよというアドバイスをいただきました。

しかし、例外処理が”具体的にどこに必要なのか”がまったくわかりません。
何かの処理に対して行うものであるという認識はあるのですが、どういう処理に対して例外処理(try~catch文)を入れればよいのでしょうか。

調べたりしてもよくわかりませんでしたのでどなたかご助言をお願い致します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

例外処理が”具体的にどこに必要なのか”
エラーが発生する可能性がある処理に必要です。

一般的には、異なるシステムが接してデータを受け渡す、
広い意味でのインターフェイスのような場所で使います。

結論から言うと、IO、DBまわりなどに必要なことが多いです。


例外処理が必要なのは、入出力やDBアクセスの異常で、
データ(ベース)全体、アプリ全体が異常にならないためです。

PHPから見て、UI層との入出力とDB層との入出力、それぞれに必要です。
入出力をチェックするのは、たとえると出入り口で手荷物検査をするのと同じです。

ロジックの処理はPGが自分で書くから、そもそもエラーが出ないようにします。

しかし、入力部分はユーザが操作するのでエラーになる場合があるし、
DBやAPIへのリクエストなども先方の都合でエラーになる場合があります。

だから例外処理を含むエラー処理を実装する必要があります。


ご質問の管理パネルは典型的なインターフェイスだと言えます。
入力が多いでしょうし、設定はDBに書き込むでしょう。

具体的にはフォームの入力やDBのトランザクション、
ファイルのアップロードとダウンロードなど、
そういうデータの出入り口でエラー処理します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

例外処理ですが、有名どころですと0による除算があります。まあ今回は多分関係ないですが…。

おそらくそのサービスですとDBを使用しているかと思いますが、最低限DBへの登録が失敗した時なんかは例外処理としてぶっ飛ばす必要があるかと思います。

ただPHPはJAVAのように勝手にthrowしてくれないので、throw new exceptionを使って自力でエラーをキャッチしてthrowする必要があります。(古い知識なので今はどうなのかわかりませんが…)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/03 20:20

    丁寧にありがとうございます!
    僕のサービスの管理パネルではDBに入っているものの例えば表示・非表示の切り替えをrequestで変更したり、getで表示したりしています。
    なのでそこらへんに対して行うとよいのですかね?

    キャンセル

  • 2015/08/03 20:23

    cakePHPとのことなので、おそらくDBへの登録はsaveで行っているかと思いますが、
    try {
    if (save(ほにゃらら)) {
    // 成功した時の処理
    } else {
    throw new Exception(e);
    }
    } catch(e) {
    // エラー処理
    }
    みたいな感じですかね…。

    キャンセル

  • 2015/08/03 20:56

    成功したときの処理というものを書いていない場合にはどうしたらいいんでしょうか?
    空白にしておいていいですかね?
    あと
    http://book.cakephp.org/2.0/ja/development/exceptions.html
    これを見てふと思ったのですが、cakephpだとtry catch文は使わずにifで済ませていいのですかね?
    質問が多くてすみません。

    キャンセル

  • 2015/08/03 22:05

    LLman様が例外処理について詳しく解説してくださっているので、そちらを参考になさるとよいかと思います(逃

    失敗した時の処理だけ欲しければ、
    if (!save(ほにゃらら)) {
    // 失敗時の処理
    }
    とすればよいかと思います。

    ちなみにcakeに限らず、phpは例外を自答的に捕捉してくれません。

    http://php.net/manual/ja/language.exceptions.php

    どうみても自力で投げてます…。
    というわけで結局if文が必要になるわけですね(汗

    キャンセル

+1

運用上の例外処理ことかもしれません。

管理者の権限で強引にデータを変更する行為を例外処理と言ったりします。

例えば質問サイトであれば、通常投稿の削除は投稿者本人が望んでも、回答者がいるので削除はできない運用になっていたとします。ところが投稿内容に個人情報などの不適切な表現などがあり、削除するのが望ましいと判断された場合、DBを直接変更するのではなく、管理者画面で指定した投稿の非表示を指示できるなどの機能です。

たぶんこの意味でつかわれたのではないとおもいますが、一応のため。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19872questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CakePHP

    2266questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。