2014-02-13 2 views
2

Начнем с упрощенной версии мой код:CakePHP вызов функции члена Save() на не-объект

Модель: Sku.php

class Sku extends AppModel { 

} 

контроллер: SkusController. PHP

class SkusController extends AppController { 

    public function admin_add() { 

     $this->layout = 'admin'; 

     if($this->request->is('post')) { 
      if($this->Sku->save($this->request->data)) { 
       // Do stuff 
      } 
      else // Do stuff 
     } 

    } 

} 

Просмотр: SKUs> admin_add.ctp

<?php echo $this->Form->create('Sku', array('type'=>'file')); ?> 
<?php echo $this->Form->input('Sku.item_no')); ?> 
<?php echo $this->Form->input('Sku.size'); ?> 
<?php echo $this->Form->input('Sku.color'); ?> 
<button type="submit">Save SKU</button> 
<?php echo $this->Form->end(); ?> 

Когда я отправить форму, я получаю ошибку вызов функции члена Save() на не-объект. В начале моего файла контроллера, если я добавляю следующее, все работает нормально, а новая строка вставляется в таблицу skus.

public $uses = 'Sku'; 

Если я использовал все соответствующие соглашения об именовании я не должен быть в состоянии опустить предыдущую строку? Кроме того, если я изменил все имена файлов и классов на Test в соответствии с теми же соглашениями об именах, он будет работать без переменной $ uses. Это заставляет меня думать, что у меня есть какой-то конфликт в другом месте моего кода. Любые предложения относительно того, почему это может происходить или где искать потенциальную проблему?

Заранее благодарен!

+1

Вы надеваете»следовать соглашению об именах. Проверка http://inflector.cakephp.org/ – lp1051

ответ

0

Редактировать: Похоже, что отклонение от инфлектора превращает множественное число в единственное число: http://dogmatic69.com/inflector/Skus. Таким образом, либо вам нужно использовать $ uses, либо добавить правило в инфлектор. See the inflector configuration.

Вы не используете массив или логическое значение для свойства Controller :: $ uses.

public $uses = 'Sku'; 

Должно быть:

public $uses = array('Sku'); 

На самом деле вы не должны ее определять, если контроллер и модель соответствует конвенции.

Прочитайте http://api.cakephp.org/2.4/class-Controller.html# $ справки о использует

$uses массив, содержащий имена классов моделей этого контроллера использует.

Пример: public $uses = array('Product', 'Post', 'Comment');

Может быть установлено несколько значений, чтобы выразить различные варианты:

  • верно Используйте название модели по умолчанию изменяемые.
  • array() Использовать только модели, определенные в родительском классе.
  • false Не используйте модели вообще, не сливайте их с родительским классом.
  • array ('Post', 'Comment') Используйте только модели Post и Comment. Модели также будут объединены с родительским классом.

Значение по умолчанию - true.

+0

$ uses не обязательно должен быть массивом, если контроллер не использует несколько моделей. Кроме того, я заявил, что я использую соответствующие соглашения, поэтому зачем мне даже включать $ uses. Ваш ответ уже был рассмотрен в вопросе. – dicey127

+0

Похоже, что инфлектор не может превратить множественное число в единственное: http://dogmatic69.com/inflector/Skus – burzum

+1

, который его решает, спасибо! – dicey127

1

Попробуйте следующий код, я думаю, он будет работать

Модель: Sku.php

class Sku extends AppModel { 
    var $name = 'Sku'; 
} 
Смежные вопросы