2015-08-04 19 views
8

CakePHP 3 ile yeni yapıyorum. Tüm kullanıcıları veritabanından almak için bir işlev çağırdığım bir denetleyici ve model oluşturdum. Ancak aşağıdaki kodu çalıştırdığımda, aşağıdaki hata iletisini alıyorum "Boolean'da" numaralı üye işlevine çağrı yap ".Boolean'da bir üye işlevinin çağrılması ve düzeltmenin nasıl yapılacağı

Bu hata ne anlama geliyor ve bunu nasıl düzeltebilirim?

User.php (model)

namespace App\Model\Entity; 
use Cake\ORM\Entity; 

class User extends Entity { 

    public function get_all_users() { 
     // find users and return to controller 
     return $this->User->find('all'); 
    } 
} 

UsersController.php (kontrol)

namespace App\Controller; 
use App\Controller\AppController; 

class UsersController extends AppController { 

    public function index() { 
     // get all users from model 
     $this->set('users', $this->User->get_all_users()); 
    } 
} 
+4

Bu, $ foo = false; Açıkçası imkansız olan $ foo-> someMethod() '. true/false nesneler değildir ve açık bir şekilde yöntemleri yoktur. –

+0

Ama bu boole takımı mıydı? Çünkü get_all_users(), sonuçlar null olduğunda bile her zaman bir dizi verecektir. – CodeWhisperer

+0

Bu, bir Kullanıcı nesnesini henüz gerçeklemediğiniz anlamına gelmiyor mu? Yani kod, bu işlevin olduğunu bilmiyor. –

cevap

13

Genel olarak, bu hatanın bir kontrol varolmayan özelliği kullanıldığında .

Denetleyici adıyla eşleşen tabloların, loaded/set to a property manually olması gerekmez, ancak başlangıçta bile bulunmazlar, erişmeye çalışarak erişmeye çalışırlar, denetleyicilerin sihirli alıcı yönteminin çağrılmasına neden olur, wich, ait olan tablo sınıfını tembel yükleme için kullanılır denetleyiciye ve false hatayla döner ve işte burada olur, bir boole üzerinde bir yöntemi çağırırsınız. Senin durumunda

https://github.com/cakephp/.../blob/3.0.10/src/Controller/Controller.php#L339 sorun User (varlıklar için, tekil) beklenen Users (çoğul, tablolar için), dolayısıyla hiçbir eşleştirme tablosu sınıfı bulunabilir uymuyor olmasıdır.

sonra

$this->Users 

aracılığıyla erişmek gerekir yerine bir tablo sınıfında gitmeli Size özel yöntem, UsersTable sınıf, Sen için olmadıkça, kişiler (verilerini sorgulamak yok dokümanları yeniden okumasını isteyebilirsiniz örnek tembel yükleme), bir veri kümesini temsil eder!

İlgili konular