0

私はアイテムを持っています。目標は、ユーザーがアイテムを作成するときです アイテムを保存するときに電子メール アドレスを入力するよう求めます ユーザーが既に存在するかどうかを確認します 存在しない場合はバックグラウンドで一連のデフォルト値を使用して新しいユーザーを作成しますユーザーがアクティブ化したい場合、ユーザーはカムバックしてプロファイルを完了することができます。モデルでそれを行うにはどうすればよいですか。保存する唯一の方法は、オブジェクトパラメータでそれを行う方法を配列に渡すことです。

App::uses('User', 'Model');
class Item extends AppModel{
   public function save($data = null, $validate = true, $fieldList = array()) {
   $user = User::getUserbyEmail($data['Item']['email_address']);
   if($user){
      $user = new User();
      $user->firstName = "Bob";
      $user->save();  /// this save does not work
   }
   //get user Id and call parent save
   .........
}

class User extends AppModel {
   public $firtName;
   private $created;
   private $status = 0; //0 is in active
   $private $password;

   public function  __construct($id = false, $table = null, $ds = null) {
     parent::__construct($id, $table, $ds);
     $this->created = date("Y-m-d H:i:s");
     $this->setPassword($password);
  }

  public function setPassword($value){
     $this->password = mysecret_algorithm(standard_password);
  } 

 ..bunch of setter and getter here

}

私は Cakephp を使用していますが、コントローラーでこれを実行したくありません。複数の場所にアイテムを追加する機能があるためです。モデルで実行すると、すべてのコントローラーが $this->Item->save(); を呼び出すだけで済みます。

4

1 に答える 1

1

あなたのコードでは、目的はUser::getUserbyEmail何ですか?

ユーザーの保存については、次のことを試してください。

class Item extends AppModel{
   public function save($data = null, $validate = true, $fieldList = array()) {
       $user = User::getUserbyEmail($data['Item']['email_address']);
       if (!$user){
           $user = new User(); // EDIT: forgot this part
           $user->create();
           $user->set($userData);
           $user->save();  /// this save does not work
       }
   }
   //get user Id and call parent save
   .........
}

$userData上記の連想配列は、配列キーがユーザーデータベーステーブルのフィールドの名前である必要があります。

$userData = array(
    'firstname' => 'Bob'
);

この場合、コードは検証に合格する必要があることに注意してください。

于 2012-05-05T09:07:53.850 に答える