2012-08-07 27 views
5

तो मैं एक ऐसी ही सवाल पहले पूछा और मैं अब केवल अधिक उलझन में हूँ, इसलिए मैं इसे एक अलग तरह से पूछेंगे ...php फ़ंक्शन से HTML वापस करने का सबसे अच्छा तरीका?

मुझे क्या करना कोशिश कर रहा हूँ सार है मेरी php और बिट्स डाल एचटीएमएल का, मेरे सत्यापनकर्ता में त्रुटि संदेश के रूप में उपयोग किया जाता है, उन कार्यों में जो HTML पर उस स्थान पर लौटते हैं जहां उन्हें पृष्ठ में आवश्यकता होती है।

क्या मैं अभी है:

<section> 
<?php 
if($errMsg) 
{ 
    errMsg(); 
} 
?> 
</section> 

<?php 
function errMsg() 
{ 
     ?> 
     <section> 
      <p>O crap! There was an error</p> 
     </section> 
     <?php 
} 
?> 

लेकिन मेरे जैसा कि पहले उल्लेख प्रश्न में, मैं यह कर बताया गया था इस तरह से एक 'गंदा हैक' और इस तरह की स्थितियों में इसके बेहतर रिटर्न का प्रयोग है। लेकिन वापसी का उपयोग करने के लिए मुझे सभी लौटने वाले एचटीएमएल को एक var में असाइन करना होगा और ऐसा करने के लिए मुझे HTML को स्ट्रिंग में रखना होगा। ऐसा करने के लिए आवश्यक कोट्स की बट संख्या में दर्द की वजह से मैं एक स्ट्रिंग में एचटीएमएल की दो से अधिक पंक्तियों को डालने से बचाना चाहूंगा।

तो मुझे लगता है कि मैं या तो हेरेडोक सिंटैक्स या ob_start/ob_get_clean फ़ंक्शंस का उपयोग करता हूं। मैं क्या जानना चाहता हूं।

1 क्या मुझे इस तरह के कोड को सारणी देने के साथ परेशान करने की भी आवश्यकता है?
2 यदि हां, तो ऐसा करने का सबसे अच्छा तरीका किस तरह से है? और/या
3 क्या मुझे सिर्फ वेब विकास पर छोड़ देना चाहिए और पिज्जा डिलीवरी पर वापस जाना चाहिए? : - \

उत्तर

4

मैं कोई HTML नहीं लौटाऊंगा। बस फ़ंक्शन से त्रुटि संदेश वापस करें और फिर HTML को एक और उचित स्थान पर बनाएं। उदाहरण के लिए टेम्पलेट के अंदर।

4
  1. हां निश्चित रूप से, आपके पास ऐसा करने के तरीके के साथ कोई लचीलापन नहीं है।
  2. आपको अपने सभी एचटीएमएल को अपने PHP से आदर्श रूप से अलग करना चाहिए, कम से कम फ़ंक्शंस - एकमात्र जगह जो इसे दूरस्थ रूप से स्वीकार्य है, वह केवल एक दृश्य के भीतर है जो फ़ंक्शंस के आउटपुट को प्रदर्शित करने के लिए PHP का उपयोग करती है।
  3. पिज्जा! बस मजाक कर रहे हैं, लेकिन पर्याप्त पिज्जा कभी नहीं हो सकता है !?

Zend फ्रेमवर्क http://framework.zend.com/manual/en/zend.application.quick-start.html वे त्रुटि संदेश जो एक त्रुटि हैंडलर है, जो तब अपने स्वयं के दृश्य का उपयोग करता त्रुटि रेंडर करने के लिए पकड़ा नहीं कर रहे हैं आगे पर एक नजर डालें।

या एक रूपरेखा ओ डब्ल्यू /:

try{ 
    //do work here and throw exception on error 
} 
catch (Exception $e) 
{ 
    //do error logging/display error 
    //or preferably load another class which handles your error and produces output 
} 
+0

कृपया मेरी नोबनेस को क्षमा करें, लेकिन जब आप मेरे PHP से अपने सभी HTML को अलग कहते हैं, तो क्या आप अलग-अलग भाषाओं को अलग-अलग फाइलों में रखते हैं? अविभाज्य जावास्क्रिप्ट की तरह? क्योंकि अभी, मेरे सभी .php फ़ाइलों के बारे में सिर्फ वेबपेज हैं जो डिक्टिप के ऊपर लिखे गए PHP के साथ हैं। –

+0

फ़ाइल के शीर्ष पर ठीक है, लेकिन मैं एचटीएमएल को सीधे PHP के साथ मिश्रित नहीं करता, यानी <<< ईओएफ या एचटीएमएल जोड़ने के लिए PHP टैग बंद करने से पुन: डिज़ाइन होने पर परेशानी की मांग हो रही है। अपने कोडिंग के समय खुद से सोचें - क्या यह मेरी वेबसाइट को दोबारा डिजाइन करने के लिए मेरी जिंदगी मुश्किल कर देगा? आपके उदाहरण दिए गए संभावित उत्तर एक स्पष्ट हां है ;-) – williamvicary

+0

आपके उत्तर के लिए धन्यवाद। अब अगर बंद टैग का उपयोग कर PHP में PHP को मिलाकर एक बुरा विचार है। आप PHP से HTML तक कुछ भी कैसे आउटपुट करेंगे? उदाहरण के लिए, यदि कोई त्रुटि सर्वर से किसी त्रुटि के साथ वापस आ गई है, तो आप इनपुट फ़ील्ड में उपयोगकर्ता के इनपुट को मूल्य = "" का उपयोग किए बिना कैसे रखेंगे? –

4

1: आप की जरूरत नहीं है, लेकिन आप अगर यह ठीक से किया है सकते हैं।

2: ऐसा करने के लिए, मैं इसे इस तरह दिखता है सुझाव है कि आप अपने PHP त्रुटि समारोह में EOF उपयोग करने के लिए,:

function errMsg() 
{ 
     $error = <<<EOF 
<section> 
<p>O crap! There was an error</p> 
</section> 
EOF; 
} 
+3

इसे ईओएफ नहीं कहा जाता है, इसे [हेरेडोक] (http://www.php.net/heredoc) कहा जाता है। – vascowhite

+0

आप सही हैं, लेकिन सभी ईओएफ के साथ समझते हैं;) – PoulsQ

+5

यह एक बड़ी धारणा है। – vascowhite

2

तुम बस ऐसा कर सकता है:

<?php if($errMgs){ ?> 
<section> 
    <p><?php echo errMsg(); ?></p> 
</section> 
<?php } ?> 

आम तौर पर, मैं PHP के माध्यम से एचटीएमएल को गूंजने के लिए अपना सर्वश्रेष्ठ प्रयास नहीं करता हूं। क्यूं कर? क्योंकि अगर किसी डिज़ाइनर को मेरे कोड पर काम करने की ज़रूरत है, तो मैं नहीं चाहता कि वह एचटीएमएल के कार्यों के बारे में चिंतित हो।

2

एचटीएमएल कोड को एक अलग फ़ाइल, error.php में ले जाएं।इसके बाद आप आउटपुट को कैप्चर करें:

function errMsg() 
{ 
    ob_start(); 
    include '/path/to/error.php'; 
    return ob_get_clean(); 
} 

// ... 

echo errMsg(); 
2

सबसे पहले, मैं उपर्युक्त पदों से सहमत हूं। प्रारूपित न करें, केवल फ़ंक्शन को नंगे त्रुटि संदेश लौटाएं और यदि आपको इसे उचित रूप से प्रारूपित करने की आवश्यकता है, जहां आप इसे प्रदर्शित करना चाहते हैं।

दूसरा, मुझे हमेशा लगता है कि यह त्रुटि को चालू करने और संदेशों को त्वरित रूप से चालू और बंद करने में सक्षम होने के लिए उपयोगी है। मेरी कोड के बहुमत वस्तु केंद्रित है और मैं एक बार में केवल एक वस्तु से पॉपिंग संदेश रखना चाहते हैं कर सकते हैं, मैं सामान्य रूप से मेरी कक्षाओं में कुछ इस तरह है:

class userObject 
{ 
    public $history;// = historyObject; 
    public $userName; 
    public $userRelation; 
    public $userCode; 
    private $mySQLAccessData; 
    private $isDebug=false; 

    public function makeHistoryObject($KPI, $KPIType) 
    { 
     if($this->isDebug){echo "Having a go at creating ".$this->userName.".<br>";} 
     $this->history = new historyObject($this->userCode, $KPI, $KPIType); 
    } 
} 

मैं एक private तत्व पर्ची जिसमें मैं डिफ़ॉल्ट रूप से false के रूप में छोड़ दें। अगर मुझे डीबग करने या परिवर्तन करने की ज़रूरत है, तो मैंने इसे true पर सेट किया है और मेरी सभी त्रुटि/लॉगिंग संदेशों को स्क्रीन पर अच्छी तरह से प्रदर्शित किया गया है। मुझे पता है कि यह सीधे आपके प्रश्न का उत्तर नहीं दे रहा है, लेकिन मुझे लगता है कि यह है इसलिए आसान है जब आप शुरू करते हैं तो यह आपके लिए लायक हो सकता है। यह निश्चित रूप से टिप्पणी कर रहा है और फिर संभावित दर्जनों संदेशों को असम्बद्ध करता है। आप इन आउटपुट को बिना किसी चिंता के ऑब्जेक्ट में छोड़ सकते हैं और उन्हें आवश्यक सभी विवरण प्रदर्शित कर सकते हैं।

0

आप कुछ बिंदु पर हो सकता है त्रुटियों की संख्या है, तो इस

<?php 
$errors = array(); 

if (!$item = getItem($id)) { 
    addError("No item $id"); 
} 

if (!updateUser($user, $id)) { 
    addError("Can not update user"); 
} 

if (!updateItemPicture($id, $picture)) { 
    addError("Can not add picture to $id"); 
} 

function addError($error) { 
    global $errors; $errors []= $error; 
} 

function hasErrors() { 
    global $errors; return count($errors); 
} 

function printErrors() { 
    if (!hasErrors()) return; 

    print "<ul class='errors'><li>" . join("</li><li>", $errors) . "</li></ul"; 
} 


printErrors(); 
?> 

इस मामले में आप वस्तु उन्मुख तरह से उपयोग नहीं कर रहे है की तरह है। और यह मानते हुए कि सभी त्रुटियां घातक नहीं हैं और try {} catch() {} ब्लॉक में पकड़ी गई हैं।

संबंधित मुद्दे