CakePHP - Как да използвате формата за вход като елемент

Уча CakePHP. Опитвам се да разработя система за влизане, но вместо да използвам login.ctp като потребител/изглед, бих искал да мога да го използвам като елемент, защото имам формата за влизане в много други страници. Как мога да декларирам в моя users_controller, че моята функция login() ще използва само елемента. Казах това, защото използвах $this->render('/elements/login') и свърши работа. Моят елемент login.ctp обаче беше в моето оформление default.ctp, така че имах две форми за влизане. Единият беше елементът, а другият като моето съдържание в моето оформление default.ctp.

Благодаря!


person ZéSá    schedule 21.06.2011    source източник


Отговори (2)


Оформленията са за „по-голямо“ маркиране на страница: заглавна и мета информация, включва, „долни колонтитули“ като вашите анализи. Указателите за общо съдържание отиват по средата - така че няма нужда да маркирате нещо толкова специфично като формуляр в оформление, освен ако наистина не искате да включите този формуляр на всяка страница, която използва това оформление.

Звучи сякаш сте извикали $this->render() според вас? $this->render() е метод на контролер. $this->element е методът за изглед.

Или сте извикали $this->element('/elements/login'); от във вашия изглед login.ctp? Това би означавало, че контролерът изобрази изгледа по подразбиране login.ctp, който извика елемента login.ctp.

И така видяхте две. Да поправя:

За да върнете нещо различно от изгледа по подразбиране, свързан с действие (като вашия фрагмент за вход), извикайте $this->render('name/of/whatever'); като последния ред на метода на контролера. Той ще върне посочения от вас изглед; set ще прехвърли всякакви променливи към него, точно като обикновено извикване на изглед и ако искате да станете фантастични, укажете оформлението като ajax и гледайте как магията започва като $this->render('/elements/login', 'ajax') .

Ако трябва да извикате няколко елемента в един изглед файл, използвайте метода $this->element('/fancy/nav/whatever'); можете също да ги поставите в оформления според случая (навигация и т.н.)

HTH. :)

person OpenSorceress    schedule 21.06.2011
comment
Еха! Страхотно обяснение! Извиквах елемента от моя контролер, затова имах съобщения за грешка. Така че трябва да извикам моя елемент от моя поглед. Твърде късно е и съм уморен, но утре ще проверя дали наистина разбрах вашето обяснение. Благодаря ти много! - person ZéSá; 21.06.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>
person AKKAweb    schedule 21.06.2011
comment
Можете ли да публикувате точната процедура за извикване на login.ctp в папката на елемента. - person Anandhan; 09.08.2011