it-swarm-vi.com

Phương thức không tĩnh JUserHelper :: getProfile () không nên được gọi tĩnh

Tôi đã cấu trúc lại một số mã trong một thành phần cũ hơn và tôi đã gặp cảnh báo này:

Strict standards: Non-static method JUserHelper::getProfile() should not be called statically, assuming $this from incompatible context 

$ userProfile = JUserHelper :: getProfile ($ userId);

Mặc dù tôi hiểu bản chất kỹ thuật của cảnh báo, vì getProfile không được khai báo static, JUserHelper là trừu tượng, vì vậy nó không thể được khởi tạo.

Thật kỳ lạ, tất cả các phương thức khác trong lớp được định nghĩa là static. Có vẻ như một lỗi trong 2,5 đối với tôi như trong 3.x chữ ký là khác nhau.

Vì vậy, cách thích hợp để có được hồ sơ là gì?

5
Valentin Despa

Đó là một lỗi.

Điều này đã được sửa trong quá trình phát triển J3 như là một phần của bản cập nhật nền tảng vào ngày 13 tháng 7 năm 2012 c7c372.

Sự thay đổi plaform đã được thực hiện vào ngày 3 tháng 7 năm 2012 99b6ac PR1341 sau khi ban đầu nâng vật phẩm theo dõi CMS 28633.

Tín dụng cho @valentin để tăng lỗi 33717 và cung cấp bản vá chống lại J2.5.

7
Peter Wiseman

Vâng, rất có thể đó là một lỗi trong phiên bản 2.5. Hàm getProfile () - trong JUserHelper không được sử dụng ở bất kỳ đâu trong bản phân phối j Joomla 2.5, vì vậy lỗi có thể không được giám sát, tôi đoán vậy. Để sử dụng nó như được khai báo bây giờ, bạn sẽ phải phân lớp JUserHelper - lớp, điều này thực sự vô nghĩa.

4
jonasfh

Đó là một lỗi, thiếu tĩnh http://prntscr.com/3hl3t1

với bản in tại chỗ

$userProfile = JUserHelper::getProfile(42);
print_r( $userProfile );

trả lại

http://prntscr.com/3hl3x7

theo thời gian, bạn có thể sao chép chức năng và sử dụng nó như thế này

function MygetProfile($userId = 0)
{
    if ($userId == 0)
    {
        $user   = JFactory::getUser();
        $userId = $user->id;
    }

    // Get the dispatcher and load the user's plugins.
    $dispatcher = JDispatcher::getInstance();
    JPluginHelper::importPlugin('user');

    $data = new JObject;
    $data->id = $userId;

    // Trigger the data preparation event.
    $dispatcher->trigger('onContentPrepareData', array('com_users.profile', &$data));

    return $data;
}
$userProfile = MygetProfile(42);
print_r( $userProfile );
3
Dan