এমভিসি ব্যবহার করার সময় পিএইচপি-তে ত্রুটিগুলি পরিচালনা করা


12

আমি সম্প্রতি কোডিগনিটার ব্যবহার করছি, তবে আমার স্নায়ুগুলিতে যে জিনিসটি আসে তা হ'ল ত্রুটিগুলি পরিচালনা করে এবং সেগুলি ব্যবহারকারীর কাছে প্রদর্শন করা। আমি অগোছালো না হয়ে ত্রুটিগুলি পরিচালনা করতে কখনই ভাল হইনি। ব্যবহারকারীকে ত্রুটি ফিরিয়ে দেওয়ার সময় আমার প্রধান উদ্বেগ।

ফাংশন থেকে 0 বা 1 প্রত্যাবর্তন এবং তারপরে / অন্যথায় ত্রুটিগুলি পরিচালনা করার পরিবর্তে ব্যতিক্রমগুলি ব্যবহার করা এবং ব্যতিক্রমগুলি ছুঁড়ে ফেলার / ধরার পক্ষে অনুশীলন করা ভাল। সুতরাং, সমস্যাটি সম্পর্কে ব্যবহারকারীকে জানানো আরও সহজ করে তুলছে।

আমি ব্যতিক্রম থেকে দূরে যেতে ঝোঁক। কিছু বছর আগে বিশ্ববিদ্যালয়ে আমার জাভা টিউটর আমাকে বলেছিলেন যে "ব্যতিক্রমগুলি প্রোডাকশন কোডে ব্যবহার করা উচিত নয় এটি ডিবাগিংয়ের জন্য বেশি" " আমি অনুভব করি যে সে মিথ্যা কথা বলছিল।

তবে, একটি উদাহরণ, আমার কাছে এমন কোড রয়েছে যা একটি ব্যবহারকারীকে একটি ডাটাবেসে যুক্ত করে। প্রক্রিয়া চলাকালীন 1 টিরও বেশি জিনিস ভুল হতে পারে যেমন একটি ডাটাবেস ইস্যু, সদৃশ এন্ট্রি, একটি সার্ভার সমস্যা ইত্যাদি etc.

আমি এমভিসি ফ্রেমওয়ার্ক ব্যবহার করছি তা মনে রেখে, পিএইচপি-তে ত্রুটিগুলি হ্যান্ডেল করার সর্বোত্তম উপায় কী।

উত্তর:


14

ফাংশন থেকে 0 বা 1 প্রত্যাবর্তন এবং তারপরে / অন্যথায় ত্রুটিগুলি পরিচালনা করার পরিবর্তে ব্যতিক্রমগুলি ব্যবহার করা এবং ব্যতিক্রমগুলি ছুঁড়ে ফেলার / ধরার পক্ষে অনুশীলন করা ভাল। সুতরাং, সমস্যাটি সম্পর্কে ব্যবহারকারীকে জানানো আরও সহজ করে তুলছে।

না না না!

ব্যতিক্রম এবং ত্রুটিগুলি মিশ্রিত করবেন না। ব্যতিক্রমগুলি হ'ল, ব্যতিক্রমী। ত্রুটি হয় না। আপনি যখন কোনও ব্যবহারকারীকে কোনও পরিমাণের পরিমাণ প্রবেশ করতে বলেন এবং ব্যবহারকারী "হ্যালো" প্রবেশ করেন, এটি একটি ত্রুটি। এটি ব্যতিক্রম নয়: ব্যবহারকারীর কাছ থেকে অবৈধ ইনপুট দেখার ক্ষেত্রে ব্যতিক্রমী কিছুই নেই। আপনি কেন ব্যতিক্রমী ক্ষেত্রে ব্যতিক্রমগুলি ব্যবহার করতে পারবেন না, যেমন ইনপুটকে যাচাই করার সময়? অন্যান্য লোকেরা এটি ইতিমধ্যে ব্যাখ্যা করেছে এবং ইনপুট বৈধতার জন্য একটি বৈধ বিকল্প দেখিয়েছে।

এর অর্থ হ'ল ব্যবহারকারী আপনার ব্যতিক্রমগুলি সম্পর্কে চিন্তা করে না এবং ব্যতিক্রমগুলি প্রদর্শন করা বন্ধুত্বপূর্ণ এবং বিপজ্জনক উভয়ই । উদাহরণস্বরূপ, এসকিউএল কোয়েরি কার্যকর করার সময় একটি ব্যতিক্রম প্রায়শই ক্যোয়ারীটি প্রকাশ করে। আপনি কি নিশ্চিত যে সকলকে এই বার্তাটি দেখানোর জন্য কোনও ঝুঁকি নিতে চান?

1 টিরও বেশি জিনিস ভুল হতে পারে যেমন একটি ডাটাবেস ইস্যু, সদৃশ এন্ট্রি, একটি সার্ভার ইস্যু ইত্যাদি registration

ভুল। একজন ব্যবহারকারী হিসাবে আমার আপনার ডাটাবেসের সমস্যাগুলি, ডুপ্লিকেট এন্ট্রি ইত্যাদি জানতে হবে না really আমি সত্যিই আপনার সমস্যাগুলির বিষয়ে চিন্তা করি না । আমি কি কি করতে জানতে হবে যে আমি একটি ব্যবহারকারী নাম যা ইতিমধ্যে অস্তিত্ব প্রবেশ করানো হয়নি। যেমন ইতিমধ্যে বলা হয়েছে, আমার কাছ থেকে একটি ভুল ইনপুট অবশ্যই একটি ত্রুটি ট্রিগার করতে হবে, ব্যতিক্রম নয়।

কিভাবে এই ত্রুটি আউটপুট? ইহা পারিপার্শ্বিক অবস্থা উপর নির্ভর করে। ইতিমধ্যে ব্যবহৃত ব্যবহারকারীর ব্যবহারের জন্য, আমি ফর্মটি জমা দেওয়ার আগে, ব্যবহারকারীর নামটি ইতিমধ্যে ব্যবহার করা হয়েছে এমনটি বলার আগে, ব্যবহারকারীর নামটির কাছে একটি ছোট লাল পতাকা দেখতে চাই see কোনও জাভাস্ক্রিপ্ট না থাকলে, জমা দেওয়ার পরে একই পতাকাটি অবশ্যই উপস্থিত হবে।

একটি এজেএক্স-সক্ষম ত্রুটির একটি উদাহরণ

অন্যান্য ত্রুটিগুলির জন্য, আপনি একটি ত্রুটিযুক্ত একটি পূর্ণ পৃষ্ঠা প্রদর্শন করবেন বা ব্যবহারকারীকে কিছু ভুল হয়েছে তা জানানোর জন্য অন্য কোনও উপায় বেছে নেবেন (উদাহরণস্বরূপ একটি বার্তা যা প্রদর্শিত হবে, তারপরে পৃষ্ঠার শীর্ষে বিবর্ণ হয়ে যাবে)। প্রশ্নটি তখন প্রোগ্রামিংয়ের চেয়ে ব্যবহারকারীর অভিজ্ঞতার সাথে সম্পর্কিত ।

প্রোগ্রামার দৃষ্টিকোণ থেকে, ত্রুটির ধরণের উপর নির্ভর করে, আপনি এটিকে বিভিন্ন উপায়ে প্রচার করবেন। উদাহরণস্বরূপ, ইতিমধ্যে নেওয়া একটি ব্যবহারকারীর ব্যবহারের ক্ষেত্রে, AJAX অনুরোধটি http://example.com/?ajax=1&user-exists=JohnJSON অবজেক্টটি প্রত্যাখ্যান করে:

  • ব্যবহারকারী ইতিমধ্যে বিদ্যমান,
  • ব্যবহারকারীকে দেখাতে ত্রুটি বার্তা।

দ্বিতীয় পয়েন্টটি গুরুত্বপূর্ণ: আপনি নিশ্চিত হতে চান যে জাভাস্ক্রিপ্ট অক্ষম করে ফর্মটি জমা দেওয়ার সময় এবং জাভাস্ক্রিপ্ট সক্ষম হওয়া দ্বারা সদৃশ ব্যবহারকারীর নাম টাইপ করার সময় একই বার্তা উভয়ই উপস্থিত রয়েছে। আপনি সার্ভার-সাইড সোর্স কোড এবং জাভাস্ক্রিপ্টে ত্রুটি বার্তার টেক্সটটি নকল করতে চান না!

এটি আসলে স্ট্যাক এক্সচেঞ্জ ওয়েবসাইটগুলির দ্বারা ব্যবহৃত কৌশল। উদাহরণস্বরূপ যদি আমি আমার নিজের উত্তরটিকে উজ্জীবিত করার চেষ্টা করি তবে এজাহার প্রতিক্রিয়ায় প্রদর্শন করতে ত্রুটি রয়েছে:

{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.",
"Refresh":false}

আপনি অন্য কোনও পন্থাও চয়ন করতে পারেন, এবং ফর্মটি পূরণের আগে এইচটিএমএল পৃষ্ঠায় ত্রুটিগুলি প্রিসেট করতে পারেন। পেশাদাররা: আপনাকে এজেএক্স প্রতিক্রিয়াতে ত্রুটি বার্তা প্রেরণ করতে হবে না। কনস: অ্যাক্সেসযোগ্যতার কি? সিএসএস ছাড়াই পৃষ্ঠাটি ব্রাউজ করার চেষ্টা করুন এবং আপনি সমস্ত সম্ভাব্য ত্রুটিগুলি উপস্থিত দেখবেন।


আমি প্রতিক্রিয়া প্রশংসা করি। ঠিক এটাই নিয়ে আমি লড়াই করছি। বিশেষত ব্যবহারকারীর অভিজ্ঞতার নিরিখে রিপোর্টিং ত্রুটিগুলির বিষয়ে আপনার কি কোনও সংস্থান আছে?
জেমস জেফারি 21

ঠিক আছে, যেমন আমি বলেছিলাম, এটি সত্যই ত্রুটির উপর নির্ভর করে এবং ব্যবহারকারীকে ত্রুটিগুলির প্রতিবেদনটি ব্যবহারকারী ইন্টারফেসের সাথে দৃ strongly়ভাবে লিঙ্কযুক্ত। আমি ত্রুটিগুলি প্রতিবেদন করার দুটি প্রধান উপায়ও হাইলাইট করেছি: আঁটসাঁট ইন্টিগ্রেশন (একটি ভুল মান সহ ইনপুটটির কাছে একটি এজেএক্স-সক্ষম লাল পতাকা) এবং পূর্ণ পৃষ্ঠা ত্রুটিগুলি, আরও গুরুতর ক্ষেত্রে ব্যবহৃত হয় much এটি কি আপনার প্রশ্নের উত্তর দেয় না?
আর্সেনি মরজেনকো

2
এটি আরও বেশি ব্যবহারকারীর অভিজ্ঞতার সমস্যা হওয়ার জন্য এবং প্রযুক্তিগত হিসাবে না হওয়ার জন্য +1
চার্লস স্প্রেবেরি

2
বুলশিট, মাইনমা শুধু বুলশিট ত্রুটি কোডগুলি তাই 80 এবং 90 এর দশকের। ব্যতিক্রমগুলি হ'ল ভুল ইনপুট (উদাহরণস্বরূপ ভ্যালিডেশন এক্সসেপশন) এর মতো বিশেষ পরিস্থিতিগুলি হ্যান্ডেল করার অনেক বেশি পরিষ্কার উপায়। আপনাকে ব্যবহারকারীর কাছে প্রতিটি ব্যতিক্রম প্রদর্শন করতে বাধ্য করা হবে না। আমি আপনার ভাল উত্তর দেখেছি।
ফ্যালকন

2
এবং কেবলমাত্র আপনি এটি জানেন না: আপনি কোন ব্যতিক্রম ব্যবহারকারীর সামনে উপস্থাপন করতে চান এবং কোনটি উপস্থাপন করতে চান না তা নিয়ন্ত্রণ করতে পারেন। সুতরাং এটি আসলে কোনও যুক্তি নয়।
ফ্যালকন

13

ফাংশন থেকে 0 বা 1 প্রত্যাবর্তন এবং তারপরে / অন্যথায় ত্রুটিগুলি পরিচালনা করার পরিবর্তে ব্যতিক্রমগুলি ব্যবহার করা এবং ব্যতিক্রমগুলি ছুঁড়ে ফেলার / ধরার পক্ষে অনুশীলন করা ভাল। সুতরাং, সমস্যাটি সম্পর্কে ব্যবহারকারীকে জানানো আরও সহজ করে তুলছে।

হ্যা হ্যা হ্যা!

আপনি যদি পরিষ্কার কোড পেতে চান তবে আপনার প্রায় ব্যতিক্রমী ব্যতিক্রমগুলি ব্যবহার করা উচিত এবং ত্রুটি কোডগুলি ব্যবহার করে বিরক্ত করবেন না। ত্রুটি কোডগুলি অর্থহীন। এগুলি প্রায়শই কিছু সংখ্যক ধ্রুবকের সাথে আবদ্ধ থাকে যা বেশি তথ্য প্রকাশ করে না। এটি আপনার কোডটি অপঠনযোগ্য করে তুলতে পারে এবং ত্রুটির পাশাপাশি ডেটা প্রচার করাও তারা শক্ত করে তুলবে।

ব্যতিক্রমগুলি অবশ্য ক্লাস এবং এতে আপনার পছন্দের কোনও তথ্য থাকতে পারে। সুতরাং ব্যবহারকারী একটি ভুল ক্ষেত্রের জন্য 'abc' এর মতো একটি ভুল ইনপুট প্রবেশ করিয়েছে। একটি ত্রুটি কোডের সাহায্যে আপনি প্রচুর বুদবুদ না করে ত্রুটিটির হ্যান্ডলারের কাছে এই তথ্যটি প্রচার করতে পারবেন না। ব্যতিক্রমগুলি বিনামূল্যে সরবরাহ করে। এছাড়াও, ব্যতিক্রমগুলি আপনাকে কার্যকরী পদ্ধতিতে এবং পদ্ধতিতে অর্থবোধক রিটার্ন মান রাখতে দেয় যখন এখনও মার্জিতভাবে ব্যর্থ হওয়ার উপায় থাকে। আরও ভাল, আপনি যেখানে তাদের পরিচালনা করতে চান সেখানে ব্যতিক্রমগুলি সরাসরি প্রচার করা হয়! স্প্যাগেটি কোডের পরিমাণটি কল্পনা করুন আপনার উপরের হ্যান্ডলারের এক বা দুটি স্তরকে অর্থবহ ডেটা সহ একটি ত্রুটি কোড প্রচার করতে হবে।

এছাড়াও, ব্যতিক্রমগুলি ত্রুটি কোডগুলি করার চেয়ে অনেক বেশি শব্দার্থকভাবে প্রকাশ করে। ত্রুটি কোডগুলি স্প্যাগেটি কোডে নেতৃত্ব দেয় যেখানে ব্যতিক্রম হ্যান্ডলিং পরিষ্কার কোডের দিকে নিয়ে যায়।

তদ্ব্যতীত, স্থিতি কোডগুলি পরীক্ষা করা ভুলে যাওয়া সহজ। জাভার মতো ভাষায় আপনাকে ব্যতিক্রমগুলি পরিচালনা করতে বাধ্য করা হয় (এমন কিছু যা উদাহরণস্বরূপ সি # মিস করে)।

আমি এমভিসি ফ্রেমওয়ার্ক ব্যবহার করছি তা মনে রেখে, পিএইচপি-তে ত্রুটিগুলি হ্যান্ডেল করার সর্বোত্তম উপায় কী।

ব্যতিক্রমগুলি ব্যবহার করুন এবং আপনার নিয়ন্ত্রণকারীগুলিতে এগুলি পরিচালনা করুন।


আমি আপনার সাথে খুব একমত !! পর্যাপ্ত ব্যতিক্রমগুলি অন্যান্য ভাষার মতো এন পিএইচপি হিসাবে প্রয়োগ করা হয় না, এটা জেনে রাখা ভাল যে অনেক লোক তাদেরকে নিযুক্ত করছে ...
ডেভিড কনডে

6
আমি সম্মত হই যে বেশিরভাগ ক্ষেত্রে ত্রুটি কোডগুলি মোটামুটি অর্থহীন। তবে, ব্যতিক্রমী উইলি নিলি নিক্ষেপ করা অত্যন্ত খারাপ! ব্যতিক্রম কেবল ব্যতিক্রমী পরিস্থিতিতে সংরক্ষণ করা উচিত। ব্যতিক্রমগুলি অপ্রত্যাশিত প্রোগ্রাম প্রবাহের কারণ ঘটায়, কোড অনুসরণ করা কঠিন করে তুলতে পারে (এবং তাই বজায় রাখতে পারে) এবং পিএইচপি-তে তারা আইএফ / তেন / ইএলএসইয়ের তুলনায় বরং একটি গুরুত্বপূর্ণ পারফরম্যান্স জরিমানা বহন করে। আমি সাফল্যের সত্য সত্য, ব্যর্থতার পক্ষে মিথ্যা, এবং কেবল কিছু বাদ দিয়ে কিছু ভুল করে যায় এমন পদ্ধতিগুলিকে পছন্দ করি।
গর্ডনএম

6

এই সহজ সামান্য বর্গ বিবেচনা করুন:

class FunkyFile {               

    private $path;
    private $contents = null;

    public function __construct($path) { 
        $this->setPath($path); 
    }

    private function setPath($path) {
        if( !is_file($path) || !is_readable($path) ) 
            throw new \InvalidArgumentException("Hm, that's not a valid file!");

        $this->path = realpath($path);
        return $this; 
    }

    public function getContents() {
        if( is_null($this->contents) ) {
            $this->contents = @file_get_contents( $this->path );
            if($this->contents === false) 
                throw new \Exception("Hm, I can't read the file, for some reason!");                                 
        }

        return $this->contents;            
    }

}

এটি ব্যতিক্রমগুলির পুরোপুরি সূক্ষ্ম ব্যবহার। FunkyFile'sদৃষ্টিকোণ থেকে , উপায়টি যদি অবৈধ হয় বা file_get_contentsব্যর্থ হয় তবে সিটিউটেশনটির প্রতিকারের জন্য একেবারে কিছুই করা যায় না । সত্যিই ব্যতিক্রমী পরিস্থিতি;)

তবে আপনার ব্যবহারকারীর জানার কি কোনও মূল্য আছে যে আপনি আপনার কোডের কোথাও কোনও ভুল ফাইলের পথে হোঁচট খাচ্ছেন? উদাহরণ স্বরূপ:

class Welcome extends Controller {

    public function index() {

        /**
         * Ah, let's show user this file she asked for
         */                 
        try {
            $file = new File("HelloWorld.txt");
            $contents = $file->getContents();   
            echo $contents;
        } catch(\Exception $e) {
            log($e->getMessage());

            echo "Sorry, I'm having a bad day!"; 
        }                           
    }        
}

আপনার খারাপ দিন কাটানো লোকদের বলার অপেক্ষা রাখে আপনার বিকল্পগুলি হ'ল:

  1. পিছু হট

    আপনার কাছে তথ্য পাওয়ার অন্য উপায় আছে? উপরের আমার সাধারণ উদাহরণে এটি সম্ভবত বলে মনে হচ্ছে না তবে একটি মাস্টার / স্লেভ ডাটাবেস স্কিমা বিবেচনা করুন। মাস্টার প্রতিক্রিয়া জানাতে ব্যর্থ হতে পারে তবে সম্ভবত, সম্ভবত ক্রীতদাস এখনও বাইরে আছে (বা বিপরীতে)।

  2. এটা কি ব্যবহারকারীর দোষ?

    ব্যবহারকারী ত্রুটিযুক্ত ইনপুট জমা দিয়েছিল? ঠিক আছে, এটি সম্পর্কে তাকে বলুন। আপনি হয় একটি ত্রুটি বার্তা বার্ক করতে পারেন, বা সুন্দর হতে পারেন এবং একটি ফর্মের সাথে ত্রুটি বার্তাটি সঙ্গে রাখতে পারেন যাতে সে সঠিক পথে টাইপ করতে পারে।

  3. এটা কি তোমার দোষ?

    আর তুমি দ্বারা, আমি বলতে চাইছি যে কিছু এর না ব্যবহারকারী, যাতে আপনি থেকে রেঞ্জ কিছু, একটি ভুল ফাইল পাথ টাইপ আপনার সার্ভার টেরা যাচ্ছে। কড়া কথায় বলতে গেলে এটি 503 এইচটিটিপি ত্রুটির জন্য সময় হয়েছে , পাশাপাশি, পরিষেবাটি অনুপলব্ধ। সিআই এর একটি show_404()ফাংশন রয়েছে, আপনি সহজেই তৈরি করতে পারেন show_503()

পরামর্শের কথা, আপনার দুষ্ট ব্যতিক্রমগুলি বিবেচনায় নেওয়া উচিত। কোডআইগনিটার কোডের একটি অগোছালো অংশ এবং আপনি কখনই জানেন না কখন কখন ব্যতিক্রম পপ আপ হয়। একইভাবে, আপনি নিজের ব্যতিক্রমগুলি সম্পর্কে ভুলে যেতে পারেন, এবং সবচেয়ে নিরাপদ বিকল্পটি হ'ল সমস্ত ব্যতিক্রম হ্যান্ডলারকে ধরা কার্যকর করা। পিএইচপি-তে আপনি সেট- এক্সসেপশন_হ্যান্ডলার দিয়ে এটি করতে পারেন :

function FunkyExceptionHandler($exception) {
    if(ENVIRONMENT == "production") {
        log($e->getMessage());
        show_503();
    } else {
        echo "Uncaught exception: " , $exception->getMessage(), "\n";
    }   
}

set_exception_handler("FunkyExceptionHandler");

এবং আপনি set_error_handler এর মাধ্যমে দুর্বৃত্ত ত্রুটিগুলির যত্নও নিতে পারেন । আপনি হয় ব্যতিক্রম হিসাবে একই হ্যান্ডলার লিখতে পারেন, বা বিকল্পভাবে সমস্ত ত্রুটি রূপান্তর করতে ErrorExceptionএবং আপনার ব্যতিক্রম হ্যান্ডলারটি তাদের সাথে ডিল করতে দিন:

function FunkyErrorHandler($errno, $errstr, $errfile, $errline) {
    // will be caught by FunkyExceptionHandler if not handled
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}

set_error_handler("FunkyErrorHandler");

এটি সত্যিই তথ্যবহুল ছিল, চিয়ার্স!
জেমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.