2012-08-12 29 views
5

मुझे पता है कि इस विषय के बारे में कुछ अन्य विषय हैं, लेकिन उनमें से कोई भी मेरी आवश्यकताओं के अनुरूप नहीं लगता है।केकेपीएचपी नियंत्रक ऊर्फ

मैं क्या है

  • example.com/log/
  • LogsController.php

मैं LogsController बजाय LogController (बहुवचन) क्योंकि CakePHP आप में नियंत्रकों करना चाहती है बहुवचन।

लेकिन जैसा कि आप जानते/नोटिस कर सकते हैं, example.com/log/ यूआरएल में गायब होने की वजह से कभी भी LogsController का उपयोग नहीं करेगा।

अब, मैं /log/* को /logs/* पर रीडायरेक्ट करना चाहता हूं। निम्न कोड के साथ पूरी तरह से ठीक काम करता है:

Router::connect ('/log/*', array('controller'=>'logs')); 

लेकिन, जब मैं example.com/log/actions/foo/bar तक पहुँचने का प्रयास यह काम करने के लिए प्रतीत नहीं होता। तो कुछ गूगलिंग के बाद मुझे यह मिला:

Router::connect ('/log/:action/*', array('controller'=>'logs')); 

अच्छा काम करता है। लेकिन अब जब मैं फिर से example.com/log/ का उपयोग करने की कोशिश कर रहा हूँ, यह कहते हैं

Error: LogController could not be found.

प्रश्न तो मेरे सवाल है, कैसे मैं अपने यूआरएल के लिए उपनाम सेट कर सकता हूं ताकि /log/ का उपयोग करेगा का उपयोग करने की कोशिश करने के बजाय LogsController

मेरे पास कुछ और नियंत्रक हैं जहां मैं इसे बदलना चाहता हूं, जैसे flight => FlightsController, profile => ProfilesController


this question पर एक नज़र डालें। यह एक ही विषय के बारे में है, लेकिन थोड़ा अलग है। यह आपको किसी तरह से मदद कर सकता है।

+0

इसे पढ़ें http://stackoverflow.com/questions/9959152/define-a-singular-rule-in-the-bootstrap-for-inflector – cgTag

+0

केवल केक को बताना आसान है कि "उड़ान" एकवचन और बहुवचन दोनों है । – cgTag

उत्तर

10

ठीक है, आईआरसी पर कुछ अन्य लोगों की मदद से और इस तरह की चीजें। मैंने निम्नलिखित पाया।

Router::connect('/flight/:action/*', array('controller'=>'flights')); 
Router::connect('/flight/*', array('controller'=>'flights')); 

का एक संयोजन काम कर देता है। मैंने पहले यह कोशिश की, लेकिन एक अन्य क्रम में, जैसे:

Router::connect('/flight/*', array('controller'=>'flights')); 
Router::connect('/flight/:action/*', array('controller'=>'flights')); 

जो काम नहीं करता है।

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

-1

आप बस इसे निम्न का उपयोग कर सकते हैं:

class LogsController extends AppController 
{ 
public $name = 'Log'; 
..... YOUR REMAINING CODE ...... 
} 

आपके रूटर connnect कोड ही रहेगा। कृपया पूछें कि क्या यह आपके लिए काम नहीं करता है।

+0

मैंने कोशिश की, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। मैंने फ्लाइट कंट्रोलर में 'फ्लाइट' में $ नाम बदल दिया, लेकिन जब मैं example.com/flight तक पहुंचने का प्रयास करता हूं तो यह कहता है कि FlightController गुम है। – Jelmer

+1

नहीं, नाम चर PHP4 के साथ पिछड़ा संगतता के लिए है। रूटिंग पर इसका कोई प्रभाव नहीं पड़ेगा क्योंकि कंट्रोलर लोड होने के बाद "लोड" किया जाता है। – cgTag

1

सही दृष्टिकोण को रूट करने के साथ ऐसा करने के लिए निम्नानुसार है।

Router::connect('/flight', array('controller'=>'flights','action'=>'index')); 
Router::connect('/flight/:action/*', array('controller'=>'flights')); 

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

0

मेरे पास यह सब कुछ अलग है। बहुवचन अक्सर चीजों के साथ जाने का अधिक सटीक तरीका होता है लेकिन अवसरों में जब बहुवचन केवल सादा गलत होता है, तो मैं इन्फलेक्टर क्लास (/ lib/केक/उपयोगिता/इन्फलेक्टर) में अपवाद जोड़ता हूं।

आपके उदाहरण में मैं uninflected शब्दों की इस सूची में log जोड़ दूंगा। इसका मतलब है कि सिस्टम चौड़ा केक 'एस' संलग्न नहीं करेगा। आप अपने LogController अपने विचार Log दृश्य फ़ोल्डर आदि में बैठकर होगा ...

संपादित

मैं एक बहुत neater तरीका का सामना करना पड़ा से यह करने के लिए app/config/bootstrap.php

Inflector::rules(
    'plural', 
    array(
     'uninflected' => array('log') 
    ) 
); 
भीतर

यह log को बिना किसी चयनित सूची में कोर के भीतर फ़ाइलों को बदलने के लिए आसान संस्करण अद्यतन करने की अनुमति देगा।

+0

लेकिन इसका मतलब है कि मैं कोर में फाइलों को संपादित करूँगा। जो मैं नहीं चाहता। क्योंकि मैं एक बटन पर एक क्लिक के साथ केक अद्यतन करने में सक्षम होना चाहता हूँ। तो शायद मुझे कक्षा का विस्तार करना है, लेकिन यह वास्तव में दर्द होगा। मुझे लगता है कि इसके लिए कुछ अच्छे तरीके हैं। जब मैं समय लेता हूं तो मैं इसका शोध करूंगा :) सोच के लिए टीएनएक्स – Jelmer