Làm cách nào để tôi đưa ra một lỗi chính xác từ bên trong một plugin?


7

Tôi thành công ngăn một số nội dung được lưu trong một số điều kiện nhất định, nhưng gặp sự cố khi xử lý thông báo lỗi cho người dùng.

Văn bản thực tế không hiển thị, nhưng có đề cập thêm về " Lưu không thành công với lỗi theo dõi: ", sau đó không có gì tiếp theo. Nó có vẻ dư thừa vì văn bản hiển thị, nhưng tôi không biết cách khuất phục nó hoặc cung cấp thông tin chính xác cho nó để nó không xuất hiện không đầy đủ cho người dùng.

public function onContentBeforeSave($context=null, $article=null, $isNew=0) {
    if($myTestFails){
        $errormsg = 'My error message while saving categories...';
        JError::raiseWarning(403, $errormsg);
        return false;
    }
}

lỗi

Thông báo lỗi của tôi trong khi lưu danh mục ...

Lưu không thành công với lỗi sau:


Phiên bản nào của Joomla?
Søren Beck Jensen

Phiên bản V3.3 - mã được sao chép từ plugin nội dung của Joomla
GDP

Câu trả lời:


5

Do "return false", bạn được đưa trở lại mô hình, do đó thông báo "Lưu không thành công với lỗi sau:" được hiển thị.

Nếu bạn không muốn quay lại mô hình, bạn có thể chuyển hướng người dùng quay lại biểu mẫu của bạn trực tiếp thay vì nhập mô hình, sau đó là bộ điều khiển và cuối cùng là dạng xem của bạn.

Nhưng vì bạn đi xa khỏi mô hình và bộ điều khiển, có một số thứ bạn cần tự chăm sóc, ví dụ như lưu những gì người dùng đã nhập vào biểu mẫu của bạn để tự động hiển thị dưới dạng sau khi chuyển hướng, điều này giúp người dùng không phải điền vào mẫu một lần nữa.

public function onContentBeforeSave($context=null, $article=null, $isNew=0) {
    if($myTestFails){
        $errormsg = 'My error message while saving categories...';
        $app = JFactory::getApplication();
        $app->setUserState(your-form-context-here, your-form-data-here);
        $app->enqueueMessage($errormsg);
        $app->redirect(JRoute::_(URL-to-your-form, false));
    }
}

Bạn có thể xem các hàm save () trong các thư viện / legacy / controller / form.php và library / legacy / model / admin.php. Có thông tin hữu ích ở đó.


Tôi thích điều này, nhưng vì đây là một sự kiện plugin, nó không phải là dạng "của tôi", vì vậy tôi không kiểm soát được nơi bạn tham chiếu bất kỳ thông tin "biểu mẫu" nào.
GDP

3

Bạn có lẽ nên ném một ngoại lệ.

JError không được dùng nữa trong Joomla 3.0

throw new Exception(JText::_('COM_MYCOMP_ERROR_MESSAGE_NOT_FOUND'), 403);

Bạn đã đúng về phương pháp đưa ra lỗi nhưng tôi vẫn không nghĩ rằng điều này thực sự sẽ trả lời câu hỏi của @ GDP
Lodder

Joomla sử dụng phương pháp tôi đã sử dụng trong plugin nội dung của họ, vì vậy đó là điểm khởi đầu của tôi. Tò mò về tác động của một ngoại lệ từ plugin nội dung có thể là gì. (PC mới ngày hôm nay, vì vậy không thể dùng thử trong một hoặc hai ngày).
GDP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.