وضع Zend_Form العمل - يمكن أن تعمل ث / تطبيق زند بنيت في الدليل؟

StackOverflow https://stackoverflow.com/questions/1640738

سؤال

ويجري بناؤه طلبي في دليل فرعي من الملقم المحلي بلدي، ويبدو أن شيئا من هذا القبيل:

http://localhost/application/

والمشكلة هي أنني عندما تعيين الإجراء النموذج إلى "/ شكل / حفظ"، شكل الطرق المؤدية إلى "مضيف / شكل / حفظ"، التي لا وجود لها.

إذا أنا وضعت إجراءات النموذج ل"/ تطبيق / شكل / انقاذ"، أحصل على خطأ، لأن زند يستخدم إدخال URL في Front_Controller لاختيار وحدات، وتحكم، وتطبيقات لاستخدامها في الطلبات.

هل هناك طريقة بسيطة لديك BASE_URL تحليل من الطلبات؟ يعمل على كل شيء آخر باستثناء أشكال لسبب ما.

وسيكون بديل آخر يكون لها BASE_URL المضافة لكافة الإجراءات النموذج بحيث التطبيق الخاص بك يمكن أن تعمل في بيئات مختلفة، ثم بعد ذلك تحليل من عند استلام العمل قبل وحدة تحكم.

هل هناك طريقة بسيطة لتعيين متغير أن تفعل شيئا من هذا القبيل، بنيت بالفعل إلى زند؟ إذا لم يكن كذلك، ما هو الحل؟

وأنا لا يمكن أن يبدو للعثور على أي شيء التصدي لهذه القضية في أي مكان.

هل كانت مفيدة؟

المحلول

وهو سبب المشكلة بما في ذلك الخط المائل الأولي في العمل. عند تعيين ارتباط مع وصلة الجذر النسبي، وهو ما يعادل وضع وصلة المطلق، عندما مرساة الوجهة تحت اسم المجال نفسه. ( "/ شكل / حفظ" ما يعادل " HTTP: // المضيف المحلي / شكل / حفظ ").

في قضيتك، فإنه يبدو وكأنه كنت بحاجة إلى إضافة URL قاعدة إلى النموذج، إذا كنت ترغب في إرسال البيانات إلى وحدة تحكم مختلفة / عمل. كنت تستخدم Zend_Form (أليس كذلك؟)، والحل الأكثر أناقة سيكون لفئة فرعية Zend_Form، overridding طريقة setAction() من أجل إلحاقها URL الأساسي الخاص بك إلى كل عمل قمت بتعيين.

class My_Form extends Zend_Form
{
    ...
    public function setAction($action)
    {
        $baseAction = rtrim($this->_getBaseUrl(),'/') . $action;  // Will remove a slash from the end of the base URL, so form actions start with a slash.

        parent::setAction($baseAction);
    }

    private function _getBaseUrl()
    {
        // Retrive your base url from somewhere (config might be a good place).
    }        
}

والآن كلما قمت بإنشاء نموذج جديد من My_Form وندعو My_Form::setAction() سيكون لديك URL الأساسي الخاص بك شملت تلقائيا.

وآمل أن يساعد هذا.

نصائح أخرى

هل يمكن أن مجرد ترك العمل فارغا ومعالجة بيانات النموذج في العمل نفسه.

وأنا جديدة في إطار زند لذلك أنا لا أعرف إذا كان هذا هو أفضل حل، لكنه يعمل بشكل جيد بالنسبة لي.

ولقد استخدمت البرمجية التالية لضبط العمل:

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top