2016-08-27 1 views
-2

cakePHP 프로젝트에 사용자를 등록하려고합니다. 나는 완전하게 작동 한 로그인 & 등록 튜토리얼을 완료했다. 나는 그 후 내 프로젝트에서 코드를 재사용하려고했지만 운이 없다. 로그인 부분은 훌륭하게 작동하지만 매번 등록이 실패합니다. 어떤 도움이라도 좋을 것입니다.CakePHP에서 내 사이트 사용자 등록

AdminController.php 내 등록 기능은

public function register(){ 
    $user = $this->Admin->newEntity(); 
    if($this->request->is('post')){ 
     $user = $this->Admin->patchEntity($user, $this->request->data); 
     if($this->Admin->save($user)){ 
      $this->Flash->success('You are registered'); 
      return $this->redirect(['action' => 'login']); 
     } else { 
      $this->Flash->error('You have not registered'); 
     } 
    } 
    $this->set(compact('user')); 
    $this->set('_serialize', ['user']); 
} 

내 관리/register.ctp

<br> 
<div class = "index large-4 medium-4 large-offset-4 medium-offset-4"> 
    <div class = "panel"> 
     <h2 class = "text-centre">Please Register</h2> 
     <?= $this->form->create($user); ?> 
      <?= $this ->form->input('first name'); ?> 
      <?= $this ->form->input('last name'); ?> 
      <?= $this ->form->input('date of birth', array('type' => 'date')); ?> 
      <?= $this ->form->input('email'); ?> 
      <?= $this ->form->input('password', array('type' => 'password')); ?> 
      <?= $this ->form->submit('register', array('class' => 'button')); ?> 
     <?= $this->form->end(); ?> 
    </div> 
</div> 

내가

CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`fName` varchar(255) NOT NULL, 
`lName` varchar(255) NOT NULL, 
`dOb` date NOT NULL, 
`email` varchar(255) NOT NULL, 
`password` varchar(255) NOT NULL, 
`created` datetime NOT NULL, 
`modified` datetime NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `id_UNIQUE` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

내 사용자를 등록 할 내 표는이 AdminTable입니다 .php

<?php 
namespace App\Model\Table; 

use Cake\ORM\Query; 
use Cake\ORM\RulesChecker; 
use Cake\ORM\Table; 
use Cake\Validation\Validator; 

/** 
* Admin Model 
* 
* @method \App\Model\Entity\Admin get($primaryKey, $options = []) 
* @method \App\Model\Entity\Admin newEntity($data = null, array  $options = []) 
* @method \App\Model\Entity\Admin[] newEntities(array $data, array $options = []) 
* @method \App\Model\Entity\Admin|bool  save(\Cake\Datasource\EntityInterface $entity, $options = []) 
* @method \App\Model\Entity\Admin patchEntity(\Cake\Datasource\EntityInterface $entity, array $data, array $options = []) 
* @method \App\Model\Entity\Admin[] patchEntities($entities, array $data, array $options = []) 
* @method \App\Model\Entity\Admin findOrCreate($search, callable $callback = null) 
* 
* @mixin \Cake\ORM\Behavior\TimestampBehavior 
*/ 
class AdminTable extends Table 
{ 

/** 
* Initialize method 
* 
* @param array $config The configuration for the Table. 
* @return void 
*/ 
public function initialize(array $config) 
{ 
    parent::initialize($config); 

    $this->table('admin'); 
    $this->displayField('id'); 
    $this->primaryKey('id'); 

    $this->addBehavior('Timestamp'); 
} 

/** 
* Default validation rules. 
* 
* @param \Cake\Validation\Validator $validator Validator instance. 
* @return \Cake\Validation\Validator 
*/ 
public function validationDefault(Validator $validator) 
{ 
    $validator 
     ->integer('id') 
     ->allowEmpty('id', 'create') 
     ->add('id', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

    $validator 
     ->requirePresence('fName', 'create') 
     ->notEmpty('fName'); 

    $validator 
     ->requirePresence('lName', 'create') 
     ->notEmpty('lName'); 

    $validator 
     ->date('dOb') 
     ->requirePresence('dOb', 'create') 
     ->notEmpty('dOb'); 

    $validator 
     ->email('email') 
     ->requirePresence('email', 'create') 
     ->notEmpty('email'); 

    $validator 
     ->requirePresence('password', 'create') 
     ->notEmpty('password'); 

    return $validator; 
} 

/** 
* Returns a rules checker object that will be used for validating 
* application integrity. 
* 
* @param \Cake\ORM\RulesChecker $rules The rules object to be modified. 
* @return \Cake\ORM\RulesChecker 
*/ 
public function buildRules(RulesChecker $rules) 
{ 
    $rules->add($rules->isUnique(['email'])); 
    $rules->add($rules->isUnique(['id'])); 

    return $rules; 
} 
} 

미리 살펴보고 시간을내어 미리 감사드립니다.

도움 주셔서 감사합니다. 디버깅 코드를 추가 한 후 내가 오류를 얻을 :

[ 
'fName' => [ 
    '_required' => 'This field is required' 
], 
'lName' => [ 
    '_required' => 'This field is required' 
] 
] 
+0

오류의 세부 정보를 친절하게 제공 할 수 있습니까? – Steve

+0

이 코드 때문에'$ this-> Flash-> error ('등록하지 않았습니다');'내가 얻은 유일한 오류는 ** 등록하지 않았습니다 **. 어쨌든 오류의 원인을 알 수 있습니까? – Peakapot

+0

'AdminTable.php'을 공유 할 수 있습니까? 왜냐하면 데이터를 저장하지 않을 것입니다. –

답변

-1

는 CakePHP의 내가 내가 CakePHP를 제대로 작동하는 데 필요한 엄격한 이름 지정 규칙을 본받지 것을 발견했다 책을 요리 읽기에서

를 해결했다. 내 Admin 테이블의 열 이름이 올바른 형식이 아니기 때문에 데이터를 성공적으로 전달할 수 없었습니다. 내 열 이름을 fName 형식에서 first_name 형식으로 변경합니다. 그런 다음 테이블 이름을 Admin에서 Admins으로 변경했습니다. 마지막으로 나는 bin/cake bake all admins 명령을 내 렸습니다. 이제 성공적으로 등록하고 로그인 할 수 있습니다. 모든 도움을 주셔서 감사합니다.