

ビューファイルに入力され、Postされた値をControllerファイルの `$id`
に入れたいのですが、恥ずかしながら返り値の書き方が分からず、質問させて頂いてます。  
この `$id` にフォームに入力された値を入れたいです。

＜やりたい事＞  
ビューファイル＝個人情報変更フォーム入力 → 個人情報更新

[code]

    public function profile()
        {
            $this->request->data('username');
            $this->request->data('pass');
            $this->request->data('email');
            ///return　
    
            if (!$id) 
            {
               throw new NotFoundException(__('Invalid user'));
            }
            $user = $this->Post->findById($id);
            if(!$user)
            {
               throw new NotFoundException(__('Invalid user'));
            }
            if($this->request->is(array('post','put')))
            {
                $this->post->id = $id;
                if($this->post->save($this->request->data))
                {
                    $this->Flash->seccess(__('Your information could be updated'));
                    return $this->redirect(array('action'=>'edit'));
                }
                    $this->Flash->error(__('Unable to update your information'));
            }
            if(!$this->request->data)
            {
                $this->request->data = $post;
            }
          }  
    
[/code]

**ビューファイル**

[code]

    <?php
    echo $this->Form->create('users',array('action'=>'profile'));
    echo $this->Form->input('username',['username']);
    echo $this->Form->input('pass',['password']);
    echo $this->Form->input('email',['email']);
    echo $this->Form->end('Save');  
    ?>
    
[/code]

**UserModel ファイル**

[code]

    class User extends AppModel {
        public function getActivationHash() 
        {
            if (!isset($this->id)) {
                return false;
            } else {
                return Security::hash($this->field('modified'), 'md5', true);
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2019-06-05T03:30:15.260
55539
2019-06-05T06:39:21.923
2019-06-05T06:39:21.923
3060
34463
question
php cakephp
返り値の設定方法が分かりません。


CakePHP 2.x として回答します。

FormHelperによって、生成されるフィールドは `FormHelper::create`
の第一引数（この場合、`users`）に準じたname属性が付与されます。

この質問のコードの場合、以下のようなinputタグがレンダリングされます。  
（簡略化のためinputタグとname属性のみを記します。

[code]

    <input name="data[users][username]">
    <input name="data[users][pass]">
    <input name="data[users][email]">
    
[/code]

これによりPOSTされるデータは以下のような構造となります。

[code]

    [
        'users' => [
            'username' => '...',
            'pass' => '...',
            'email' => '...',
        ],
    ]
    
[/code]

これをコントローラー側で取り出すには、requestの`data`メソッドを使用します。

[code]

    $data = $this->request->data('users');
    // $data は、次のようなデータ構造 ['username' => '...', 'pass' => '...', 'email' => '...',]
    
    $email = $this->request->data('users.email');
    // $email は、フォームのemailの入力値
    
[/code]

参考:  
POST データにアクセス | リクエストとレスポンスオブジェクト - 2.x  
<https://book.cakephp.org/2.0/ja/controllers/request-response.html#post>

補足として、ビューファイルにおいて、 `$this->Form->create('users')` としていますが、これはCakePHP
2.xの規約から外れた指定です。  
規約に添うのであれば、（保存先はおそらくUserモデルでしょうから） `$this->Form->create('User')` とするべきです。  
この場合、Post値の取り出しは以下のようになります。

[code]

    $data = $this->request->data('User');
    $email = $this->request->data('User.email');
    
[/code]


CC BY-SA 4.0
2019-06-05T05:13:56.797
55543
2019-06-05T05:13:56.797
2668
55539
answer