Tôi đang cố gắng tạo trang đăng ký 3 bước withh cakePHP
. Bước đầu tiên là OK, nó chèn dữ liệu vào db nhưng bước thứ hai không hoạt động. Ai đó có thể giúp đỡ được không?CakePHP 3 bước đăng ký
Đây là mã điều khiển của tôi:
<?php
App::uses('Controller', 'Controller');
class UsersController extends AppController {
public $name = 'Users';
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow('signup');
}
public function login(){
if($this->request->is('post')){
if($this->Auth->login()){
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash('Invalid username or password!', 'default', array('class' => 'errormsg'));
}
}
}
public function logout(){
$this->redirect($this->Auth->logout());
}
// SIGN UP ACTIONS
public function signup($step = null){
// SET STEP VARIABLE
$this->set('s', $step);
// STEP 1 - REGISTER
if(empty($step)){
if ($this->request->is('post')) {
if ($this->User->save($this->request->data)) {
$this->Session->write('regUser', $this->request->data['User']['email']);
// $this->Session->setFlash('The user has been saved, please enter other information!',
// 'default', array('class' => 'okormsg'));
$regUser = $this->User->find( 'first', array('conditions' => array(
'User.username' => $this->Session->read('regUser'))));
$id = $regUser['User']['id'];
$this->Session->write('regUserId', $id);
$this->redirect(array('personal-info'));
} else {
$this->Session->setFlash( 'There was an error, please check the fields bellow!',
'default', array('class' => 'errormsg'));
}
}
// STEP 2 - PERSONAL INFORMATION
} elseif($step == 'personal-info') {
if ($this->request->is('post')) {
$id = $this->Session->read('regUserId');
$this->User->id = $id;
if ($this->User->save($this->request->data)) {
$this->Session->setFlash('The user has been saved');
$this->redirect(array('complete'));
} else {
$this->Session->setFlash('User could not be saved. Please, try again.');
}
}
// STEP 3 - COMPLETE REGISTRATION
} elseif($step == 'complete') {
}
}
}
?>
Đây là Model:
<?php
class User extends AppModel {
public $validate = array (
'name'=>array(
'Please enter your name!'=>array(
'rule'=>'notEmpty',
'message'=>'Please enter your name!'
)
),
'surname'=>array(
'Please enter your surname!'=>array(
'rule'=>'notEmpty',
'message'=>'Please enter your surname!'
)
),
'email'=>array(
'Valid email'=>array(
'rule'=>array('email'),
'message'=>'Please enter a valid Email address!'
),
'Already exists'=>array(
'rule'=>'isUnique',
'message'=>'This Email is already registered in our database!'
)
),
'password'=>array(
'Not empty'=>array(
'rule'=>'notEmpty',
'message'=>'Please enter your password!'
),
'Match password'=>array(
'rule'=>'matchPasswords',
'message'=>'Your passwords do not match!'
)
),
'password_confirm'=>array(
'Not empty'=>array(
'rule'=>'notEmpty',
'message'=>'Please confirm your password!'
)
),
'terms'=>array(
'Agree'=>array(
'rule'=>'notEmpty',
'required'=>true,
'message'=>'You must agree to Terms and conditions!'
)
)
);
public function matchPasswords($data){
if ($data['password'] == $this->data['User']['password_confirm']){
return true;
} else {
$this->invalidate('password_confirm', 'Your passwords do not match!');
return false;
}
}
public function beforeSave(){
if(!empty($this->data['User']['password'])) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
}
if (empty($this->data['User']['username'])) {
$this->data['User']['username'] = $this->data['User']['email'];
}
return true;
}
}
?>
Và đây là quan điểm cho signup.ctp
<!-- SIGN UP STEPS -->
<!-- SIGN UP - 1 (REGISTER) -->
<?php if(empty($s)): ?>
<div id="register" class="container padded">
<div id="register">
<div class="paginate active">Register</div>
<div class="paginate">Personal Information</div>
<div class="paginate">Complete Registration</div>
<h1>User Registration</h1>
<p>Welcome to user registration! You can sign up yourself and start improving your business. User registration is FREE and once you register yourself you can select apropiate business package for your company and start advertising.<br />
<span style="color:#900">All field are required!</span></p>
<?php
echo $this->Form->create();
echo $this->Form->input('name');
echo $this->Form->input('surname');
echo $this->Form->input('email');
echo $this->Form->input('password');
echo $this->Form->input('password_confirm', array('label'=>'Password Confirmation','type'=>'password'));
echo $this->Form->input('terms', array('label'=>false, 'type'=>'checkbox'));
?> I accept <a href="#" class="link">Terms Of Use</a> <?
echo $this->Form->end('Continue Registration');
?>
</div>
</div>
<!-- SIGN UP - 2 (PERSONAL INFO) -->
<?php elseif($s == 'personal-info'): ?>
<div id="register" class="container padded">
<div id="register">
<div class="paginate">Register</div>
<div class="paginate active">Personal Information</div>
<div class="paginate">Complete Registration</div>
<h1>User Registration</h1>
<p>Welcome to user registration! You can sign up yourself and start improving your business. User registration is FREE and once you register yourself you can select apropiate business package for your company and start advertising.<br />
<span style="color:#900">All field are required!</span></p>
<?php
echo $this->Form->create();
echo $this->Form->input('phone');
echo $this->Form->input('address');
echo $this->Form->input('city');
echo $this->Form->input('ptt', array('label'=>'Postal Code'));
echo $this->Form->input('state');
echo $this->Form->input('country');
echo $this->Form->end('Complete Registration');
?>
</div>
</div>
<!-- SIGN UP - 3 (COMPLETE) -->
<?php elseif($s == 'complete'): ?>
<div id="register" class="container padded">
<div id="register">
<div class="paginate">Register</div>
<div class="paginate">Personal Information</div>
<div class="paginate active">Complete Registration</div>
<h1>User Registration</h1>
<p>Welcome to user registration! You can sign up yourself and start improving your business. User registration is FREE and once you register yourself you can select apropiate business package for your company and start advertising.<br />
<span style="color:#900">All field are required!</span></p>
</div>
</div>
<? else: ?>
<div id="register" class="container padded">
<div id="register">
Unknown page!
</div>
</div>
<? endif; ?>
Vì vậy, như tôi đã nói trên Bước đầu tiên, tất cả đều OK, nó sẽ lưu người dùng trong DB nhưng bước thứ hai tôi muốn đặt thêm thông tin và khi tôi gửi nó hiển thị thông báo Flash phiên mà người dùng không thể lưu, do đó có nghĩa là thông tin người dùng thứ hai không được lưu trong DB.
Vui lòng trợ giúp!
bạn có thể cho biết những gì không hoạt động không? sao dữ liệu không được lưu trong DB? –
Có trong bước đầu tiên nó tiết kiệm nhưng trong giây nó không tiết kiệm trong DB. –
Bạn có thể làm rõ vấn đề bạn đang gặp phải không? Bạn nói rằng bước thứ hai không hiệu quả, theo nghĩa nào là nó không hoạt động? – David