Как отправить данные формы контроллера на другую модель? - PullRequest
1 голос
/ 02 мая 2011

Я создаю представление для регистрации и отправляю данные на контроллер

//app::import('Model','Myprofile');
Class MembersController extends AppController {
    var $name = 'Members';
    var $helpers = array('Form', 'Session');
    var $uses = array('Myprofile'); //

    function register() {
        //$myprofile = new Myprofile();
        if (!empty($this - > data)) {
            $this - > Member - > create();
            if ($this - > Member - > save(($this - > data['Member']['username']), ($this - > data['Member']['password'])) && $this - > Myprofile - > save(($this - > data['Myprofile']['name']), ($this - > data['MyProfile']['address']), ($this - > data['Myprofile']['phonenumber']))) {
                $this - > redirect('index');
            }
        } else {

            $this - > Session - > setFlash('failed');
        }

    }

Я хочу отправить контроллер данных формы контроллера в Myprofile Модель Я пытаюсь использовать

$use = array('Myprofile');

Я получил

Undefined property: MembersController::$Member

когда я использую

//app::import('Model','Myprofile');
//$myprofile = new Myprofile()

я получил

Undefined property: MembersController::$Myprofile

Я не знаю правильный путь или нет Есть также другой способ исправить мою проблему Спасибо за любыесовет

Ответы [ 5 ]

1 голос
/ 02 мая 2011

Массив $ Использования даст вам доступ только к тем моделям, которые вы в нем указали.

Если вы закомментировали использование $, у вас все равно будет доступ к модели $ this-> Member по умолчанию, так каквы находитесь в контроллере Members.

Как только вы добавите другую модель в массив $ использовании, вы должны также не забыть включить свою исходную модель.

Я также обнаружил, что в некоторых случаяхочень полезно убедиться, что когда вы делаете что-то подобное, вы должны указать модель по умолчанию FIRST

var $uses = array( 'Member', 'Myprofile' );

В противном случае вы можете получить неожиданные результаты от таких действий, как $ this-> постраничной ()

0 голосов
/ 24 марта 2012

Вы можете вызывать любые открытые методы связанных моделей обычным способом.например,

In Profile.php

function someMethod( $param = null ) {
    // some definition
}

От MembersController.php

function register ( ) {
    $this->Member->Profile->someMethod( $my_data_to_pass );    // if related
    /* if not related 
    $this->loadModel('Profile');
    $this->Profile->someMethod($my_data_to_pass);
    */
}

В качестве примечания, если вы столкнулись с этой ситуацией, чтобы сделать URL более понятнымиПожалуйста, посмотрите в маршрутизатор (http://book.cakephp.org/2.0/en/core-utility-libraries/router.html)

0 голосов
/ 02 мая 2011

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

Если MyProfile связан с Member, вы можете получить к нему доступ через

$this->Member->MyProfile; //depends on associations

Вы также можете использовать App:import

App:import('Model', array('Myprofile')); //loads the class
$myProfile = new MyProfile();
// OR
MyProfile::staticMethod();
0 голосов
/ 02 мая 2011

попробуйте использовать $this->loadModel('Myprofile'); в своих действиях.

и вы уверены, что ваша модель называется «Myprofile»?

Вы можете даже отладить его, чтобы увидеть, вернет ли он значение true или false. это поможет вам определить, правильно ли была запущена модель.

0 голосов
/ 02 мая 2011

Вы должны добавить обе модели в массив $uses:

var $uses = array('Myprofile', 'Member');
...