Ganti getError yang sudah usang dan getErrors

8

Saya telah melihat-lihat beberapa log dan memperhatikan bahwa getError () dan getErrors () melempar pesan-pesan usang di Joomla 3.3 (kami baru saja memperbarui). Tampaknya ini sudah tidak digunakan lagi di Joomla 2.5, tetapi saya kesulitan menemukan solusi untuk memperbarui.

Saya melihat-lihat file inti Joomla dan bahkan mereka masih menggunakan getError () dan getErrors (). Apakah ada pengganti untuk ini, atau apakah itu seperti JViewLegacy, dll. Di mana tidak ada alternatif saat ini?

Contoh di mana saya menggunakannya adalah untuk menyimpan pengguna:

if (!$user->save()) {
        $error = $user->getError();
        ...
}
DemonGyro
sumber

Jawaban:

3

Anda harus menggunakan Pengecualian PHP sebagai gantinya. Saya merasa aneh bahwa Joomla melempar pesan usang saat menggunakan JErrornamun belum digunakan di inti 3.3.6.

Bagaimanapun, di bawah ini akan menjadi contoh Pengecualian untuk permintaan basis data

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('username')))
      ->from($db->quoteName('#__user'))
      ->where($db->quoteName('username') . ' = ' . $db->quote('Lodder'));
$db->setQuery($query);

try
{
    // Try to get an object based on the results from the database
    $results = $db->loadObjectList();
    print_r($results);
}
catch (Exception $e)
{
    // Start crying cause it didn't work
    echo $e->getMessage();
}

Ini akan memunculkan kesalahan dengan mengatakan tabel tidak ada karena saya telah menggunakan #__usersebagai gantinya #__users.

Dalam kasus Anda, saya akan mencoba yang berikut:

try
{
    $user->save();
    // redirect or do something magical
}
catch (Exception $e)
{
    echo $e->getMessage();
}

$e->getMessage() tentu saja mendapatkan kesalahan, jadi di dalam tangkapan, Anda dapat memilih apa yang ingin Anda lakukan dengannya, seperti login atau hanya menampilkannya.

Lodder
sumber
Akankah $ e-> getMessage () mengembalikan pesan kesalahan yang sama dengan panggilan getError () (terlokalisasi juga)?
DemonGyro
Saya menemukan waktu untuk menerapkan perubahan yang Anda sarankan dan tidak berhasil. save () tidak melempar kesalahan yang saya harapkan sebagai pengecualian, sehingga kode tangkap tidak pernah berjalan.
DemonGyro