2012-10-16 28 views
8

người dùng CakePHP mới ở đây. Tôi đã không thể tìm ra giải pháp cho vấn đề này.CakePHP 2.x: Nhúng biểu mẫu đăng nhập làm thành phần sử dụng plugin Người dùng và thành phần Bảo mật của CakeDC

Tôi muốn nhúng biểu mẫu đăng nhập làm thành phần trong trang hiện tại. Tôi đang sử dụng plugin người dùng CakeDC. Mục đích là để nhúng biểu mẫu đăng nhập vào trang và sau đó, khi họ đăng nhập, hãy cập nhật một số nội dung trên trang mà không làm mới trang. Trước khi chúng ta lo lắng về AJAX và SecurityComponent, tôi muốn ít nhất có được biểu mẫu được nhúng trên một số trang khác như một phần tử.

Để bắt đầu, tôi đã cố gắng sao thẳng và sao chép nội dung của '/Views/Users/login.ctp' vào phần tử. Điều này đã cho tôi một cảnh báo về 'biến không xác định' $ Model '', vì vậy tôi đã mã hóa mô hình thành 'Users.User' (vì tôi giả định rằng ký pháp truy cập một mô hình bên trong một plugin là 'plugin.model' như họ đã nói trong Điều này không thành công với thông báo lỗi Lỗi: Người dùng.usersController không thể tìm thấy.

Vì vậy, tôi đã điều chỉnh biểu mẫu để lấy 'Người dùng' làm mô hình thay vì mô hình $ và yêu cầu hiện được bôi đen Nếu tôi vô hiệu hóa thành phần bảo mật, tôi có thể đăng nhập thành công. Đây không phải là giải pháp thỏa đáng (ý tôi là, tôi có thể chọn không xác thực biểu mẫu hoặc xác định 'đăng nhập' như một hành động được mở khóa, nhưng nếu tôi làm như vậy, sau đó tôi cũng có thể không có bảo mật được kích hoạt để đăng nhập, phải không?).

Đây là mã cho ứng dụng/Plugin/Users/Xem/Elements/login.ctp:

<div class="users index"> 
<h2><?php echo __d('users', 'Login'); ?></h2> 
<fieldset> 
    <?php 
     echo $this->Form->create('User', array(
      'action' => 'login', 
      'id' => 'LoginForm')); 
     echo $this->Form->input('User.email', array(
      'label' => __d('users', 'Email'))); 
     echo $this->Form->input('User.password', array(
      'label' => __d('users', 'Password'))); 

     echo '<p>' . __d('users', 'Remember Me') . $this->Form->checkbox('remember_me') . '</p>'; 
     echo '<p>' . $this->Html->link(__d('users', 'I forgot my password'), array('action' => 'reset_password')) . '</p>'; 

     echo $this->Form->end(__d('users', 'Submit')); 
    ?> 
</fieldset> 

Tiếp theo là các mã cho Xem mà đang kêu gọi các yếu tố:

<div id="loginform"> 
<?php echo $this->element('Users.login'); ?> 
</div> 

Nếu tôi sao chép và dán mã phần tử vào một dạng xem (ví dụ, trong apps/Plugin/Users/View/Users/login.ctp), nó hoạt động bất kể An ninh được bật hay tắt, vì vậy tôi nghi ngờ một số con khỉ xung quanh với biểu mẫu hoặc các cuộc gọi bảo mật là theo thứ tự.

Bất kỳ ý tưởng hoặc trợ giúp nào sẽ được đánh giá cao.

Trả lời

0

Tôi nghĩ rằng vấn đề là các yếu tố cơ bản là quan điểm câm - họ không có nghĩa là để biết về các mô hình. Bạn sẽ phải tự truyền dữ liệu.

Tôi thường đặt $this->set("authUser", $this->Auth->user()); trong AppController sau khi thiết lập auth, điều này cho phép tôi kiểm tra dữ liệu trên người dùng hiện đã đăng nhập ở bất kỳ đâu, kể cả các phần tử.

Bạn cũng có thể truyền dữ liệu trực tiếp như vậy:

<?php echo $this->element("Users.login", array("user"=>$user));?>

Ngoài ra, tôi sẽ không bỏ rõ ràng về cách diễn đạt của bạn ở đó, nhưng đăng nhập phải là một hành động mở khóa, nếu không như thế nào sẽ sử dụng đầu tiên đăng nhập vào ?

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