Marcio Trindade

Cake on Rails

Como a maioria já deve saber em Janeiro foi lançada a versão estável do cakePHP 1.2. Depois deste lançamento eu procurei dentro do github por cakePHP e acabei encontrando o projeto do Joel Moss onde ele havia importado importado o SVN para GIT. Então não tive mais dúvidas, fiz um fork do projeto e comecei as minhas modificações sobre o mesmo. O que mudei não foi muita coisa, vou tentar explicar o que foi feito aqui em baixo.

Actions

Removi o método view das actions defaults e adicionei duas novas ações: show e destroy

libs/routers.php
<?php
var $__named = array(
  'Action' => 'index|show|add|create|edit|update|remove|del|delete|destroy|view|item',
  'Year'   => '[12][0-9]{3}',
  'Month'  => '0[1-9]|1[012]',
  'Day'    => '0[1-9]|[12][0-9]|3[01]',
  'ID'     => '[0-9]+',
  'UUID'   => '[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}'
);

var $__resourceMap = array(
  array('action' => 'index',   'method' => 'GET',    'id' => false),
  array('action' => 'show',    'method' => 'GET',    'id' => true),
  array('action' => 'add',     'method' => 'POST',   'id' => false),
  array('action' => 'edit',    'method' => 'PUT',    'id' => true),
  array('action' => 'delete',  'method' => 'DELETE', 'id' => true),
  array('action' => 'destroy', 'method' => 'DELETE', 'id' => true),
  array('action' => 'edit',    'method' => 'POST',   'id' => true)
);
?>

Separando controllers

Agora quando você acessar a url como admin/users ao invés de chamar a ação admin_index de controllers/users_controllers.php será chamado o método index dentro de controllers/admin/users_controller.php além do fato de que já incluirá o arquivo controller/admin/admin_controller.php caso exista.

Com isso o que muda é que os controllers do admim, ou outros prefixos, ficam completamente separados dos controllers do site, tornando assim mais fácil pra se trabalhar orientado a objetos.

Helpers

Aproveitei para alterar mais 3 coisinhas que me incomodavam sempre.

Truncate

O método truncate do helper text passa a ter o parâmetro exact como false.

libs/view/helpers/text.php
<?php
  function truncate($text, $length = 100, $ending = '...', $exact = false, $considerHtml = false) {...}
?>
example_truncate.php
<?php
  $example = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
  echo $text->truncate($example, 15);
  // Lorem ipsum...
?>

Link

O método link do helper html passa a ter o parâmetro escapeTitle como false.

libs/view/helpers/html.php
<?php
  function link($title, $url = null, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = false) {...}
?>
link_example.php
<?php
  echo $html->link("<strong>Link</strong> com html", array("action" => "index"));
  // <a href="/"><strong>Link</strong> com html</a>
?>

Image

O método image do helper html passa a aceitar uma opção extra com o nome de size, que quando passado já atribui os valores para width e height.

libs/view/helpers/html.php
<?php
  ...
  if (isset($options["size"])) {
    $tmp = explode("x", $options["size"]);
    if ($tmp[0]) {
      $options["width"] = $tmp[0];
    }
    if ($tmp[1]) {
      $options["height"] = $tmp[1];
    }
    unset($options["size"]);
  }
  ...
?>
image_example.php
<?php
  echo $html->image("logo.jpg", array("size" => "20x10"));
  // <img src="logo.jpg" width="20" height="10" alt="" />
?>