CakePHP - Как использовать форму входа в качестве элемента - PullRequest
0 голосов
/ 21 июня 2011

Я изучаю CakePHP.Я пытаюсь разработать систему входа в систему, но вместо того, чтобы использовать login.ctp в качестве пользователя / представления, я хотел бы использовать его в качестве элемента, потому что у меня есть форма входа на многих других страницах.Как я могу объявить в своем users_controller, что моя функция login () будет использовать только элемент.Я сказал это, потому что я использовал $ this-> render ('/ elements / login'), и это сработало.Тем не менее, мой элемент login.ctp был в моем макете default.ctp, поэтому у меня было две формы входа.Одним из них был элемент, а другим - мой контент в макете default.ctp.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Макеты предназначены для «большей» разметки страницы: заголовок и метаинформация, включая «нижний колонтитул», например, аналитику.Общие указатели содержимого идут посередине - поэтому нет необходимости отмечать что-либо столь же специфичное, как форму в макете, если вы действительно не хотите включать эту форму на каждую страницу, которая использует этот макет.

Звучит так, как будто выВы назвали $ this-> render () по вашему мнению?$ this-> render () - это метод контроллера.$ this-> element - это метод представления.

Или вы вызвали $ this-> element ('/ elements / login');из вашего login.ctp view ?Это означало бы, что контроллер отображал представление login.ctp по умолчанию, которое вызывало элемент login.ctp.

И, таким образом, вы видели два.Чтобы исправить:

Чтобы вернуть что-то отличное от представления по умолчанию, связанного с действием (например, ваш логин), вызовите $ this-> render ('name / of / what');как последняя строка метода контроллера.Он вернет вид, который вы укажете;set передаст ему любые переменные, как при обычном вызове view, и, если вы хотите стать модным, укажите макет как ajax и наблюдайте за магическим началом, как $ this-> render ('/ elements / login', 'ajax').

Если вам нужно вызвать несколько элементов в одном файле представления, используйте метод $ this-> element ('/ fancy / nav / what');вы также можете разместить их в макетах по мере необходимости (навигация и т. д.)

HTH.:)

1 голос
/ 21 июня 2011

Я сделал то же самое с моим проектом, и это то, что я сделал.

По сути, я создал новый loginElement.ctp и поместил его в папку element.Я создаю новые наборы HTML-кода, которые будут соответствовать макету, в котором я хотел бы использовать этот элемент, и loginElement.ctp <form затем отправит данные в login action в users_controller.

Если выкогда я вернусь домой позже, я могу опубликовать свой точный код здесь.

=================================== РЕДАКТИРОВАТЬ =========================================

Это коды, которые я использовал:

Прежде всего, вы заметите, что action в форме входа указывает на /login.

У меня есть этонастроить в моем /config/routes.php файле как таковом

Router::connect('/login', array('controller' => 'users', 'action' => 'login'));

Тогда остальные коды будут ниже

/views/elements/thinlogin.ctp

<div id="login">                
    <form method="post" action="/login" accept-charset="utf-8" class="formBox">
      <fieldset>
            <input type="hidden" name="_method" value="POST" />
        <div class="form-col">
            <label for="username" class="lab">Username/Email</label>
            <input name="data[User][username]" type="text" id="UserUsername" class="input">
        </div>
        <div class="form-col form-col-right">
            <label for="password" class="lab">Password</label>
            <input type="password" name="data[User][password]" id="UserPassword" class="input">
        </div>
        <div class="form-col form-col-submit"> 
          <input name="" value="Login" class="submit" type="submit">
        </div>     
        <div class="form-col form-col-check">
          <label><input name="remember" class="checkbox" type="checkbox">Remember me on this computer</label>
        </div>            
      </fieldset>
    </form>
</div>

/views/pages/home.ctp

<div id="home_top_right_top">
        <?php
        if (!$this->Session->check('Auth.User.id'))
        {
            echo $this->element('login/thinlogin');
        }else{
            echo $this->element('login/loggedin');
        }
        ?>        
</div>
...