2015-02-13 4 views
0

Я использую CakePHP 3.xКогда мы используем Element? Когда мы используем Helper? Когда мы используем View Cells? в CakePHP 3

Я пытаюсь скрыть тему themeforest в плагин CakePHP.

Midway, я решаю, следует ли обходить портлет в ячейку помощника, элемента или представления.

портлета HTML код выглядит примерно так:

   <!-- BEGIN SAMPLE FORM PORTLET--> 
       <div class="portlet box yellow"> 
        <div class="portlet-title"> 
         <div class="caption"> 
          <i class="fa fa-gift"></i> More Form Samples 
         </div> 
         <div class="tools"> 
          <a href="" class="collapse"> 
          </a> 
          <a href="#portlet-config" data-toggle="modal" class="config"> 
          </a> 
          <a href="" class="reload"> 
          </a> 
          <a href="" class="remove"> 
          </a> 
         </div> 
        </div> 
        <div class="portlet-body"> 
         <h4>Inline Form</h4> 
         <form class="form-inline" role="form"> 
          <div class="form-group"> 
           <label class="sr-only" for="exampleInputEmail2">Email address</label> 
           <input type="email" class="form-control" id="exampleInputEmail2" placeholder="Enter email"> 
          </div> 
          <div class="form-group"> 
           <label class="sr-only" for="exampleInputPassword2">Password</label> 
           <input type="password" class="form-control" id="exampleInputPassword2" placeholder="Password"> 
          </div> 
          <div class="checkbox"> 
           <label> 
           <input type="checkbox"> Remember me </label> 
          </div> 
          <button type="submit" class="btn btn-default">Sign in</button> 
         </form> 
         <hr> 
         <h4>Inline Form With Icons</h4> 
         <form class="form-inline" role="form"> 
          <div class="form-group"> 
           <label class="sr-only" for="exampleInputEmail22">Email address</label> 
           <div class="input-icon"> 
            <i class="fa fa-envelope"></i> 
            <input type="email" class="form-control" id="exampleInputEmail22" placeholder="Enter email"> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="sr-only" for="exampleInputPassword42">Password</label> 
           <div class="input-icon"> 
            <i class="fa fa-user"></i> 
            <input type="password" class="form-control" id="exampleInputPassword42" placeholder="Password"> 
           </div> 
          </div> 
          <div class="checkbox"> 
           <label> 
           <input type="checkbox"> Remember me </label> 
          </div> 
          <button type="submit" class="btn btn-default">Sign in</button> 
         </form> 
         <hr> 
         <h4>Horizontal Form</h4> 
         <form class="form-horizontal" role="form"> 
          <div class="form-group"> 
           <label for="inputEmail1" class="col-md-2 control-label">Email</label> 
           <div class="col-md-4"> 
            <input type="email" class="form-control" id="inputEmail1" placeholder="Email"> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label for="inputPassword12" class="col-md-2 control-label">Password</label> 
           <div class="col-md-4"> 
            <input type="password" class="form-control" id="inputPassword12" placeholder="Password"> 
           </div> 
          </div> 
          <div class="form-group"> 
           <div class="col-md-offset-2 col-md-4"> 
            <div class="checkbox"> 
             <label> 
             <input type="checkbox"> Remember me </label> 
            </div> 
           </div> 
          </div> 
          <div class="form-group"> 
           <div class="col-md-offset-2 col-md-10"> 
            <button type="submit" class="btn blue">Sign in</button> 
           </div> 
          </div> 
         </form> 
         <hr> 
         <h4>Horizontal Form With Icons</h4> 
         <form class="form-horizontal" role="form"> 
          <div class="form-group"> 
           <label for="inputEmail12" class="col-md-2 control-label">Email</label> 
           <div class="col-md-4"> 
            <div class="input-icon"> 
             <i class="fa fa-envelope"></i> 
             <input type="email" class="form-control" id="inputEmail12" placeholder="Email"> 
            </div> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label for="inputPassword1" class="col-md-2 control-label">Password</label> 
           <div class="col-md-4"> 
            <div class="input-icon right"> 
             <i class="fa fa-user"></i> 
             <input type="password" class="form-control" id="inputPassword1" placeholder="Password"> 
            </div> 
            <div class="help-block"> 
             with right aligned icon 
            </div> 
           </div> 
          </div> 
          <div class="form-group"> 
           <div class="col-md-offset-2 col-md-4"> 
            <div class="checkbox"> 
             <label> 
             <input type="checkbox"> Remember me </label> 
            </div> 
           </div> 
          </div> 
          <div class="form-group"> 
           <div class="col-md-offset-2 col-md-10"> 
            <button type="submit" class="btn green">Sign in</button> 
           </div> 
          </div> 
         </form> 
         <hr> 
         <h4>Column Sizing</h4> 
         <form role="form"> 
          <div class="row"> 
           <div class="col-md-2"> 
            <input type="text" class="form-control" placeholder=".col-md-2"> 
           </div> 
           <div class="col-md-3"> 
            <input type="text" class="form-control" placeholder=".col-md-3"> 
           </div> 
           <div class="col-md-4"> 
            <input type="text" class="form-control" placeholder=".col-md-4"> 
           </div> 
           <div class="col-md-3"> 
            <input type="text" class="form-control" placeholder=".col-md-2"> 
           </div> 
          </div> 
         </form> 
        </div> 
       </div> 
       <!-- END SAMPLE FORM PORTLET--> 

Выглядят так: enter image description here

Мой вопрос, как мы знаем, когда мы должны использовать элемент? Когда мы будем использовать Помощника? и Когда следует использовать View Cells?

И в каком случае следует использовать для вышеуказанного? Я склоняюсь к Помощнику.

ответ

4

Элемент

Используйте его, когда вам нужно повторить связанные презентации вещи, как правило, HTML, много. Например, у меня есть проект, в котором три таблицы используют записи таблицы адресов. Часть формы всех этих трех, которая содержит данные адреса, является элементом.

Helper

Используйте его, чтобы инкапсулировать вид Logik, не ставьте HTML в нем, если это возможно, или другие представления, связанные вещи. Например пусть это сделать что-то и в зависимости от результата вы можете использовать элемент этого типа результата для визуализации данных: return $this->_view->render('items/' . $type . '_item');

Если вы посмотрите на основных помощников для примера HtmlHelper вы увидите свойство $_defaultConfig:

protected $_defaultConfig = [ 
    'templates' => [ 
    'meta' => '<meta{{attrs}}/>', 
    'metalink' => '<link href="{{url}}"{{attrs}}/>', 
    /*...*/ 

Это строки шаблонов, которые используются для генерации вывода HTML. Это отделяет разметку довольно красиво от фактического кода, который ее генерирует. Взгляните также на FormHelper, он использует виджеты для более сложного вывода.

Так что это отлично работает с элементом, таким как куски разметки. Правилом большого пальца я бы сказал, если ваша разметка больше, чем то, что вы видите, сделайте ее элементом и вызовите ее из помощника или сделайте ее виджетом.

Просмотр Клетки

Think зрения клеток как «Mini MVC» стеками, которые имеют вид и может загружать несколько моделей. Они IMHO похожи на директивы AngularJS, если вы знакомы с ними. See this article for an example. Я действительно предлагаю вам прочитать его, он подробно объяснит их и их варианты использования.

Я еще не много сделал с ними, но они могут быть использованы для замены запросов requestAction(), например. Вы не будете «загрязнять» ваш контроллер методами, которые не предназначены для доступа по запросу.

Взятый из связанной статьи выше:

Один из самых плохо используемых функций CakePHP является View :: requestAction(). Разработчики часто используют это во всех своих приложениях, вызывая ошибки , когда вам нужно выяснить, находитесь ли вы в веб-запросе или запросе внутреннего действия, регуляторах загромождения. Вам также необходимо вызвать новый запрос CakePHP, который может добавить некоторые ненужные служебные данные.

Отказ

выше отражает мой личный взгляд на эти вещи, нет конечной и окончательное правило, как вы должны использовать эти три вещи. Цель - всегда чистый и повторно используемый код и правильное разделение проблем. Как вы архивируете это до вас, у вас есть инструменты. :)

+0

«Используйте его, чтобы инкапсулировать представление logik, не помещайте в него HTML, если это возможно, или другие вещи, связанные с презентацией». И все же FormHelper содержит разметку HTML. а также HTMLHelper. Как это объяснить? Что касается вышеприведенного случая, где я хочу упростить использование разметки httml-портлета? Должен ли я создать помощника, который использует FormHelper и HTMLHelper? –

+0

Нет, посмотрите на код FormHelper, например. Он использует строки шаблонов и виджеты, и таким образом отделяет разметку от кода. Я никогда не говорил, что не ставил HTML в них, но хотел не помещать туда огромные куски. Просто посмотрите на код помощников, которые вы назвали, и вы поймете, что я имею в виду. – burzum

+0

Я решил выбрать «Помощник» и разбить портлет на шаблоны так же, как вы предлагали. Это хорошая идея? –

Смежные вопросы