2012-10-16 12 views
8

nowatorskiego użytkownika CakePHP. Nie udało mi się znaleźć rozwiązania tego problemu.CakePHP 2.x: Osadzanie formularza logowania jako elementu za pomocą wtyczki UserDC i komponentu Security

Chciałbym umieścić formularz logowania jako element istniejącej strony. Używam wtyczki użytkownika CakeDC. Celem jest osadzenie formularza logowania na stronie, a następnie, po zalogowaniu, aktualizacja niektórych treści na stronie bez odświeżania strony. Zanim zaczniemy się martwić o AJAX i SecurityComponent, chciałbym przynajmniej uzyskać formularz osadzony na innej stronie jako element.

Na początek próbowałem prostować kopie i wklejać zawartość "/Views/Users/login.ctp" do elementu. To dało mi ostrzeżenie "niezdefiniowanej zmiennej" Model $ "", więc zakodowałem model jako "Users.User" (ponieważ założyłem, że notacja dostępu do modelu wewnątrz wtyczki to "plugin.model", tak jak napisano w podręcznika) Nie powiodło się to z komunikatem o błędzie: Nie można znaleźć Users.usersController.

Tak więc dostosowałem formularz, aby pobrać model "User" jako model zamiast modelu $, a żądanie zostało teraz zaciemnione Jeśli wyłączyłem komponent bezpieczeństwa, mogę zalogować się z powodzeniem.Nie jest to rozwiązanie dość satysfakcjonujące (to znaczy, mógłbym zdecydować, aby nie zatwierdzić formularza lub zdefiniować "login" jako odblokowane działanie, ale jeśli to zrobię, to mogę też nie mieć włączonych zabezpieczeń logowania, prawda?).

Tutaj jest kod dla app/Plugin/Users/Widok/Elementy/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> 

Poniżej znajduje się kod dla widoku, który jest wywołanie element:

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

Jeśli I skopiuj i wklej kod elementu do widoku (powiedzmy, w apps/Plugin/Users/View/Users/login.ctp), działa niezależnie od tego, czy włączono lub wyłączono zabezpieczenia, więc podejrzewam, że niektóre z małpowaniem z formularzem lub wezwaniami bezpieczeństwa są w porządku.

Wszelkie pomysły i pomoc będą mile widziane.

Odpowiedz

0

Myślę, że problem polega na tym, że elementy są zasadniczo głupimi widokami - nie są przeznaczone do poznawania modeli. Musisz przekazać dane w sobie.

Zwykle umieszczam $this->set("authUser", $this->Auth->user()); w moim AppController po ustawieniu auth, to pozwala mi sprawdzić dane aktualnie zalogowanego użytkownika w dowolnym miejscu, w tym elementy.

Można również przekazać dane bezpośrednio tak:

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

Również nie jestem rzucić jasne tam swoim brzmieniem, ale logowania powinien być odblokowany działania, w przeciwnym razie, w jaki sposób użytkownicy najpierw zalogować ?

Powiązane problemy