2013-05-21 22 views
6

Tôi có hai biểu mẫu trên một trang duy nhất: biểu mẫu đăng nhập và biểu mẫu đăng ký. Khi tôi gửi mẫu đăng ký, nó xác nhận cả hai: các trường biểu mẫu có trong đăng nhập và đăng ký. Làm thế nào tôi có thể xử lý nó nếu cả hai hình thức có cùng một mô hình (sử dụng mô hình)Nhiều mẫu có cùng tên mẫu trên trang duy nhất cakephp

Đăng ký hình thức

<?php echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'add'))); ?> 
<?php echo $this->Form->input('username', array('label' => false, 'div' => false, 'class' => 'reg_input'));?> 
<?php echo $this->Form->input('email', array('label' => false, 'div' => false, 'class' => 'reg_input'));?> 
<?php echo $this->Form->input('password', array('label' => false, 'div' => false, 'class' => 'reg_input'));?> 
<?php echo $this->Form->input('confirm_password', array('type' => 'password', 'label' => false, 'div' => false, 'class' => 'reg_input'));?> 
<?php echo $this->Form->submit(__('Submit', true), array ('class' => 'reg_button', 'div' => false)); 
    echo $this->Form->end();?> 

và hình thức đăng nhập dưới

<?php echo $this->Form->create('User', array('controller' => 'users', 'action' => 'login'))?> 
    <?php echo $this->Form->input('User.username',array('label'=>false,'div'=>false, 'class' => 'reg_input'));?> 
    <?php echo $this->Form->input('User.password',array('label'=>false,'div'=>false, 'class' => 'reg_input'));?> 
    <?php echo $this->Form->submit(__('Log in', true), array ('class' => 'reg_button', 'div' => false)); ?> 
    <?php echo $this->Form->end();?> 

Khi tôi gửi đăng ký thành nó xác nhận cả hai hình thức , Tôi chỉ muốn xác nhận mẫu đăng ký.

Tôi làm cách nào để xử lý?

enter image description here

+0

Tôi cũng gặp vấn đề tương tự. Bạn có tìm thấy giải pháp cho vấn đề này không? – gonzo

+0

Không tìm thấy giải pháp nào –

+0

cách giải quyết vấn đề này. Xin hãy giúp tôi –

Trả lời

0

create phương pháp vào mẫu đăng nhập của bạn thiếu 'url' chìa khóa để tạo thuộc tính hành động. Tôi đã cố gắng tạo lại điều này khi tôi đã sửa lỗi này và không thể. Có lẽ điều đó sẽ sửa chữa nó?

+0

Tôi đã thử nó nhưng không nhận được bất kỳ thành công –

2

Tôi đã đưa ra một "giải pháp" (Tôi tìm cách tiếp cận bẩn, nhưng nó hoạt động) cho một different question (rất giống với điều này). Đó là câu hỏi khác làm việc với các yếu tố và quan điểm, mặc dù. Tôi sẽ đăng toàn bộ giải pháp ở đây để xem liệu nó có giúp ai đó không (mặc dù tôi thích một người khác đi kèm với một cách tiếp cận khác).

Vì vậy, trước tiên: thay đổi tên tạo cho hai biểu mẫu.

//for the registration 
<?php echo $this->Form->create('Registration', 
     array('url' => array('controller' => 'users', 'action' => 'add'))); ?> 
//for the login 
<?php echo $this->Form->create('Login', 
     array('controller' => 'users', 'action' => 'login'))?> 

Các biểu mẫu sẽ hoạt động, xem và đăng lên các hành động tương tự, vì vậy không có hại gì.

Bước thứ hai: Tôi không có mã hành động của bạn, vì vậy tôi sẽ giải thích những gì cần phải được thực hiện trong chung

public function login() { 
    if ($this->request->is('post')) { 
     //we need to change the request->data indexes to make everything work 
     if (isset($this->request->data['Login'] /*that's the name we gave to the form*/)) { 
      $this->request->data['User'] = $this->request->data['Login']; 
      unset($this->request->data['Login']); //clean everything up so all work as it is working now 
      $this->set('formName', 'Login'); //we need to pass a reference to the view for validation display 
    } //if there's no 'Login' index, we can assume the request came the normal way 

    //your code that should work normally 
    } 
} 

điều tương tự cho việc đăng ký (chỉ cần thay đổi 'Đăng nhập' để 'Đăng ký').

Bây giờ, các hành động sẽ hoạt động bình thường, vì không có ý tưởng chúng tôi đã thay đổi tên biểu mẫu trên chế độ xem (chúng tôi đảm bảo rằng việc thay đổi các chỉ mục trong hành động). Nhưng, nếu có lỗi xác nhận, quan điểm sẽ kiểm tra chúng trong

$this->validationErrors['Model_with_errors'] 

Và đó 'Model_with_errors' (trong trường hợp này 'Người dùng') sẽ không được hiển thị trong các hình thức tương ứng vì chúng tôi đã đã đổi tên. Vì vậy, chúng tôi cũng cần chỉnh sửa chế độ xem. Oh! Tôi giả sử cả hai dạng này đều có dạng xem là index.ctp, nhưng nếu chúng ở trên các tệp riêng biệt (nếu bạn đang sử dụng phần tử hoặc tương tự), tôi khuyên bạn nên thêm dòng mã cho tất cả các tệp

//preferably in the first line of the view/element (index.ctp in this example) 
if (!empty($this->validationErrors['User']) && isset($formName)) { 
    $this->validationErrors[$formName] = $this->validationErrors['User']; 
} 

Với điều đó, chúng tôi sao chép xác thực mô hình của Người dùng thành biểu mẫu giả mạo và chỉ có biểu mẫu đó. Lưu ý rằng nếu bạn có biểu mẫu thứ ba trong chế độ xem đó cho cùng một mô hình và bạn sử dụng $this->form->create('User') điển hình thì lỗi xác thực cũng sẽ hiển thị cho mô hình đó trừ khi bạn thay đổi tên biểu mẫu cho cái thứ ba đó.

Thực hiện việc đó và chỉ xác thực biểu mẫu có tên chính xác.

Tôi thấy đây là một cách tiếp cận lộn xộn vì nó liên quan đến thay đổi chế độ xem bộ điều khiển. Tôi nghĩ tất cả mọi thứ nên được thực hiện bởi bộ điều khiển, và xem không nên chớp mắt về vấn đề xác nhận ... Vấn đề với chức năng render của Controller.php cần phải được thay thế ... Nó có thể được thực hiện trong AppController, nhưng đối với mỗi lần cập nhật Cakephp, bạn sẽ phải cẩn thận khi sao chép hàm render mới của Controller.php sang hàm thay thế nó trong AppController. Tuy nhiên, lợi thế của phương pháp đó là "tính năng" sẽ có sẵn cho mọi biểu mẫu mà không phải lo lắng về việc thay đổi chế độ xem.

Vâng, dù sao cũng không thể duy trì được, tốt hơn là nên để nó một mình nếu nó chỉ dành cho trường hợp này ... Nếu có ai quan tâm đến cách xử lý điều này chỉ ở phía bộ điều khiển, bình luận và tôi ' sẽ đăng nó.

+0

+1 Làm việc cho tôi .. – Rohan210

+0

@Nunser, tôi đã thử giải pháp này nhưng tôi đã thiếu lỗi bảng đăng nhập. – Garry

+0

mà không cần xem mã của bạn, nguyên nhân có thể xảy ra nhất là bạn không thay đổi tên của dữ liệu đã gửi trở lại bảng gốc mà nó được cho là. Mã tôi viết cho bộ điều khiển là nơi điều đó xảy ra, bạn cần truyền dữ liệu đến từ 'form-> create ('Login')' cho người dùng (như trong ví dụ tôi đưa vào câu trả lời). Nếu bạn nói nó là như vậy, sau đó tôi cần mã để gỡ lỗi nhiều hơn, hoặc mở một câu hỏi mới hoặc tạo một cuộc trò chuyện và mời :) (Tôi không đảm bảo thời gian tôi đã có sẵn, mặc dù: S) – Nunser

1

Bạn có thể sao chép mô hình của mình và thay đổi tên của mình và xác định $ useTable làm tên bảng giống nhau.

Ví dụ:

class Registration extends AppModel { 

public $useTable = 'users'; 

Bạn xác định hành động trong form-> tạo như Nunser cho hình thức đăng nhập của bạn

<?php 
    echo $this->Form->create('User',array(
     'url' => array(
      'controller' => 'Users', 
      'action' => 'login', 
      'user' => true 
     ), 
     'inputDefaults' => array(
      'div' => false, 
      'label' => false 
     ), 
     'novalidate'=>true, 
    )); 
?> 

và mẫu đăng ký của bạn

<?php 
    echo $this->Form->create('Registration',array(
     'url' => array(
      'controller' => 'Users', 
      'action' => 'validation_registration', 
      'user' => false 
     ), 
     'inputDefaults' => array(
      'div' => false, 
      'label' => false 
     ), 
     'novalidate'=>true, 
    )); 
?> 

Trong điều khiển của bạn xác định một phương pháp xác nhận đăng ký và xác định quan trọng nhất là render

public function validation_registration(){ 
    $this->loadModel('Registration'); 

      if($this->request->is('post')){ 

       if($this->Registration->save($this->request->data)){ 

        --- code --- 
       }else{ 
        --- code --- 
       } 
      } 

      $this->render('user_login'); 
} 

Xin lỗi vì tiếng anh của tôi! Chúc một ngày tốt lành ! : D

Các vấn đề liên quan