2016-03-03 81 views
0

出於某種原因,$this->request->data自動轉換爲實體不起作用。我創建了一個非常基本的保存爲了測試它。CakePHP 3,非常基本的保存不工作

$users = TableRegistry::get('VendorName/Users.Users'); 
$this->request->data = ['username' => 'someting', 'password' => 'somethingelse']; 
$user = $users->newEntity($this->request->data); 
if ($users->save($user)) { } 

這是產生::

INSERT INTO users (created, modified, id) VALUES (:c0, :c1, :c2) 

我試着做$this->request->data的功能,例如SQL。 $this->request->data()

我試過明確添加實體值。例如。 $user->username = 'someting';,它在我這樣做的時候起作用。但是,當然,我不想在每一個保存功能中明確指出每個字段,那麼爲什麼$this->request->data不會自動轉換?

這是$user樣子

object(VendorName\Users\Model\Entity\User) { 

    '[new]' => true, 
    '[accessible]' => [], 
    '[dirty]' => [], 
    '[original]' => [], 
    '[virtual]' => [], 
    '[errors]' => [], 
    '[invalid]' => [], 
    '[repository]' => 'VendorName/Users.Users' 

} 
+0

你的用戶實體是什麼樣的? – Dakota

+0

編輯問題以添加該信息(因此它可以正確格式化) –

+0

您是否在'UsersTable'中有驗證規則? http://book.cakephp.org/3.0/en/orm/saving-data.html#converting-request-data-into-entities – Sevvlor

回答

2

的問題是在你的實體類有protected $_accessible = [];您所指定的是,在實體沒有字段允許被分配質量(見http://book.cakephp.org/3.0/en/orm/entities.html#mass-assignment) (VendorName\Users\Model\Entity\User)。

這聽起來像你想所有的屬性是可以分配的,所以你可能想要的是protected $_accessible = ['*' => true];

請注意,這是危險的,因爲它可以讓任何人稍微改變他們的形式,然後修改任何其他實體。更好的設置是protected $_accessible = ['id' => false, '*' => true];