Skip to content

Instantly share code, notes, and snippets.

@vitorpacheco
Created March 5, 2012 15:38
Show Gist options
  • Select an option

  • Save vitorpacheco/1978868 to your computer and use it in GitHub Desktop.

Select an option

Save vitorpacheco/1978868 to your computer and use it in GitHub Desktop.
CakePHP Docs Appendices PT

Guia de Migração para a Versão 2.1

O CakePHP 2.1 é um atualização totalmente compatível com API do 2.0. Esta página apresenta as mudanças e melhorias feitas no 2.1.

AppController, AppHelper, AppModel and AppShell

Como essas classes foram removidas do núcleo do CakePHP, agora elas são obrigatórias em sua aplicação. Se você não tiver essas classes, você pode usar o seguinte durante a atualização:

// app/View/Helper/AppHelper.php
<?php
App::uses('Helper', 'View');
class AppHelper extends Helper {
}

// app/Model/AppModel.php
<?php
App::uses('Model', 'Model');
class AppModel extends Model {
}

// app/Controller/AppController.php
<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
}

// app/Console/Command/AppShell.php
<?php
App::uses('Shell', 'Console');
class AppShell extends Shell {
}

Se sua aplicação já tiver esses arquivos/classes você não precisa fazer nada. Além disso, se você estiver utilizando o PagesController do núcleo do CakePHP, você precisa copiá-lo para a pasta app/Controller também.

Arquivos .htaccess

Os arquivos .htaccess foram alterados, você deve lembrar de atulizá-los ou a atualizar o esquema de reescrita de URL re-writing para combinar com as atualizações feitas.

Models

  • O callback``beforeDelete`` será disparado antes dos callbacks beforeDelete dos behaviors. Isto o torna consistente com o resto dos eventos disparados na camada de modelo.
  • O método Model::find('threaded') agora aceita o parâmetro $options['parent'] se estiver usando outro campo como parent_id. Além disso, se o model tem o TreeBehavior e configurado com outro campo definido para o pai, o threaded irá encontrá-lo e o utilizar por padrão.
  • Parâmetros para consultas usando instruções preparadas (prepared statements) agora será parte do dump SQL.
  • Arrays de validação agora podem ser mais específicos quando um campo é obrigatório. A chave required agora aceita create e update. Esses valores farão o campo obrigatório quando criar ou atualizar.

Behaviors

TranslateBehavior

Exceções

A renderização padrão de exceções agora inclui os stack traces mais detalhados, incluindo trechos de arquivos e os argumentos para todas as funções.

Utilidade

Debugger

debug()

debug() agora utiliza :php:class:`Debugger` internamente. Isto o torna mais consistente com o Debugger, e tira proveito das melhorias feitas lá.

Set

File

Cache

Configure

App

  • :php:meth:`App::build()` agora tem a capacidade de registrar novos pacotes usando App::REGISTER. Veja :ref:`app-build-register` para mais informações.
  • As classes que não podem ser encontradas nos caminhos configurados serão pesquisados ​dentro de APP, como um caminho alternativo. Isso torna o carregamento automático dos diretórios aninhados em app/Vendedor mais fácil.

Console

Test Shell

Um novo TestShell foi adicionado. Ele reduz a digitação necessária para executar os testes unitários, e oferece uma interface baseada nos caminhos dos arquivos:

# Run the post model tests
Console/cake test app/Model/Post.php
Console/cake test app/Controller/PostsController.php

O antigo shell testsuite e sua sintaxe ainda estão disponíveis.

General

  • Arquivos gerados não contém timestamps com o dia/hora da geração.

Rotas

Router

Network

CakeRequest

  • Adicionado is('requested') e isRequested() para a detecção de requestAction.

CakeResponse

Controller

Controller

  • O :php:attr:`Controller::$uses` foi modificado, seu valor padrão agora é true em vez de false. Além disso, valores diferentes são tratados de maneira ligeiramente diferente, mas irá comportar o mesmo na maioria dos casos.

    • true Irá carregar o modelo padrão e mesclar com AppController.
    • Um array irá carregar os modelos e mesclar com AppController.
    • An empty array will not load any models other than those declared in the base class.
    • Um array vazio não vai carregar outros modelos que não os declarados na

    classe base. - false não irá carregar qualquer modelo, e não vai se fundir com a classe base também.

Componentes

AuthComponent

  • :php:meth:`AuthComponent::allow()` não aceita mais allow('*') como um curinga para todas as ações. Basta usar allow(). Isso unifica a API entre allow() e deny().
  • A opção recursive foi adicionada a todos os adaptadores de autenticação. Permite controlar mais facilmente as associações armazenados na sessão.

AclComponent

  • :php:class:`AclComponent` não mais inflexiona o nome da classe usada para Acl.classname. Em vez disso utiliza o valor como é fornecido.
  • Implementações do Acl agora devem ser colocadas em Controller/Component/Acl.
  • Implementações do Acl agora devem ser movidas da pasta Component para a pasta Component/Acl. Por exemplo: se sua classe Acl se chama CustomAclComponent, e está em Controller/Component/CustomAclComponent.php. Ela deve ser movida para Controller/Component/Acl/CustomAcl.php e renomeada para CustomAcl.
  • :php:class:`DbAcl` foi movida para um arquivo separado.
  • :php:class:`IniAcl` foi movida para um arquivo separado.
  • :php:class:`AclInterface` foi movida para um arquivo separado.

Helpers

TextHelper

HtmlHelper

View

  • :php:attr:`View::$output` está obsoleto.

  • $content_for_layout está obsoleto. Use $this->fetch('content'); instead.

  • $scripts_for_layout está obsoleto. Use o seguinte:

    <?php
    echo $this->fetch('meta');
    echo $this->fetch('css');
    echo $this->fetch('script');
    

    $scripts_for_layout ainda está disponível, mas a API :ref:`view blocks <view-blocks>` API é mais flexível e extensível.

  • A sintaxe Plugin.view está agora disponível em todos os lugares. Você pode usar esta sintaxe em qualquer lugar que você fizer referência ao nome de uma view, layout ou element.

  • A opção $options['plugin'] para :php:meth:`~View::element()` está obsoleta. Em vez disso você deve utilizar Plugin.element_name.

Content type views

Duas classes de exibição foram adicionadas ao CakePHP. A :php:class:`JsonView` e a :php:class:`XmlView` permite gerar facilmente views XML e JSON. Você pode aprender mais sobre essas classes na seção :doc:`/views/json-and-xml-views`.

Estendendo as views

:php:class:`View` has a new method allowing you to wrap or 'extend' a view/element/layout with another file. See the section on :ref:`extending-views` for more information on this feature.

Temas

A classe ThemeView está obsoleta em favor da classe View. Simplesmente defina o $this->theme = 'MyTheme que o suporte a temas será habilitado, e todas as classes de View personalizadas que estendem da ThemeView deve estender de View.

Blocos de View

Blocos de View são uma maneira flexível de criar slots ou blocos em suas views. Os blocos substituem $scripts_for_layout com uma API mais robusta e flexível. Consulte a seção sobre :ref:`view-blocks` para mais informações.

Helpers

Novos callbacks

Dois novos callbacks foram adicionados aos Helpers. :php:meth:`Helper::beforeRenderFile()` e :php:meth:`Helper::afterRenderFile()` esses novos callbacks são disparados antes/depois que cada fragmento da view é renderizado. Isto inclui elements, layouts e views.

CacheHelper

  • As tags <!--nocache--> agora funcionam corretamente dentro dos elementos.

FormHelper

  • O FormHelper agora omite campos desabilitados a partir do hash dos campos protegidos. Isso torna o trabalho com :php:class:`SecurityComponent` e os inputs desabilitados mais fácil.
  • A opção between quando utilizado em conjunto com os radio inputs, agora se comporta de forma diferente. O valor do between agora é colocado entre a legenda e o primeiro input.
  • A opção hiddenField dos campos checkbox pode agora ser definida para um valor específico, como 'N' ao invés de apenas 0.
  • O atributo for para campos datetime agora reflete o primeiro campo gerado. Isso pode resultar na mudança do atributo for de acordo com os campo geradas.
  • O atributo type para :php:meth:`FormHelper::button()` pode ​​ser removido agora. O padrão ainda é 'submit'.
  • :php:meth:`FormHelper::radio()` agora permite que você desabilite todas as opções. Você pode fazer isso definindo 'disabled' => true ou 'disabled' => 'disabled' no array $attributes.

PaginatorHelper

Testando

  • Web test runner agora exibe a versão do PHPUnit.
  • Web test runner agora mostra os testes da aplicação por padrão.
  • Fixtures podem ser criados em datasources que não seja $test.
  • Modelos carregados usando o ClassRegistry e usando outro datasource vai ter o nome de seu datasource prefixado com test_ (por exemplo, o datasource master irá tentar usar test_master no testsuite)
  • Os casos de teste são gerados com os métodos de configuração específicos.

Eventos

  • Um novo sistema de eventos genérico foi construído e que substituiu a forma como callbacks são disparados. Isso não deve representar qualquer alteração em seu código.
  • Você pode enviar seus próprios eventos e callbacks para serem anexados, útil para a comunicação entre plugins e fácil desacoplamento de suas classes.

Apêndices

Os apêndices contêm informações sobre os novos recursos introduzidos na versão 2.0 e o guia de migração da versão 1.3 para a versão 2.0.

Guia de Migração para a Versão 2.0

.. toctree::
    :maxdepth: 1

    appendices/2-0-migration-guide
    appendices/new-features-in-cakephp-2-0
    appendices/phpunit-migration-hints

Guia de Migração para a Versão 2.1

.. toctree::
    :maxdepth: 1

    appendices/2-1-migration-guide
    appendices/new-features-in-cakephp-2-1

Migrando da Versão 1.2 para 1.3

.. toctree::
    :maxdepth: 1

    appendices/migrating-from-cakephp-1-2-to-1-3
    appendices/new-features-in-cakephp-1-3

Informações Gerais

.. toctree::
    :maxdepth: 1

    appendices/cakephp-development-process
    appendices/glossary


Novas funcionalidades no CakePHP 2.1

Models

Model::saveAll(), Model::saveAssociated(), Model::validateAssociated()

Model::saveAll() e parecidos agora suportam a passagem do parâmetro fieldList para vários modelos. Exemplo:

<?php
$this->SomeModel->saveAll($data, array(
    'fieldList' => array(
        'SomeModel' => array('field_1'),
        'AssociatedModel' => array('field_2', 'field_3')
    )
));

Model::saveAll() e parecidos agora podem salvar níveis ilimitados de profundidade. Exemplo:

<?php
$data = array(
    'Article' => array('title' => 'My first article'),
    'Comment' => array(
        array('body' => 'Comment 1', 'user_id' => 1),
        array('body' => 'Save a new user as well', 'User' => array('first' => 'mad', 'last' => 'coder'))
    ),
);
$this->SomeModel->saveAll($data, array('deep' => true));

View

Blocos de View

Os blocos de view são um mecanismo que permite a inclusão de pedaços de conteúdo, ao mesmo tempo permitindo que subclasses ou elementos forneçam conteúdo personalizado para esse bloco.

Os blocos são exibidos usando o método fetch da classe :php:class:`View`. Por exemplo, o seguinte pode ser colocado em seu arquivo View/Layouts/default.ctp:

<?php echo $this->fetch('my_block'); ?>

Isto irá imprimir o conteúdo do bloco se disponível, ou uma string vazia se é indefinido.

Definir o conteúdo de um bloco pode ser feito de várias maneiras. A atribuição simples de dados pode ser feita utilizando o método assign:

<?php $this->assign('my_block', 'Hello Block'); ?>

Ou você pode utilizar isso para capturar uma seção de conteúdo mais complexo:

<?php $this->start('my_block'); ?>
    <h1>Hello Block!</h1>
    <p>This is a block of content</p>
    <p>Page title: <?php echo $title_for_layout; ?></p>
<?php $this->end(); ?>

A captura de blocos também suporta aninhamento:

<?php $this->start('my_block'); ?>
    <h1>Hello Block!</h1>
    <p>This is a block of content</p>
    <?php $this->start('second_block'); ?>
        <p>Page title: <?php echo $title_for_layout; ?></p>
    <?php $this->end(); ?>
<?php $this->end(); ?>

ThemeView

No 2.1, o uso da ThemeView é obsoleto, em preferência da utilização da classe View. ThemeView agora é uma classe stub.

Todo o código de caminhos personalizados foi movido para a classe View, ou seja, agora é possível que as classes que estendem da View suportar temas automaticamente. Considerando que antes poderíamos definir a propriedade $viewClass do Controller para Theme, agora é possível habilitar os temas apenas definindo a propriedade $theme. Exemplo:

<?php
App::uses('Controller', 'Controller');

class AppController extends Controller {
    public $theme = 'Example';
}

Todas as classes de View que estendem ThemeView no 2.0, agora deve simplesmente estender View.

JsonView

Uma nova classe de view que facilita a saída de conteúdo JSON.

Anteriormente, era necessário criar um layout para o conteúdo JSON (APP/View/Layouts/json/default.ctp) e uma view para cada método que retorna JSON. Isto não é mais necessário com a :php:class:`JsonView`.

A :php:class:`JsonView` é usada como qualquer outra classe de views, definindo-a no controller. Exemplo:

<?php
App::uses('Controller', 'Controller');

class AppController extends Controller {
    public $viewClass = 'Json';
}

Uma vez que você tenha configurado o controller, você precisa identificar o conteúdo que deve ser serializado como JSON, definindo a variável da view _serialize. Exemplo:

<?php
$this->set(compact('users', 'posts', 'tags'));
$this->set('_serialize', array('users', 'posts'));

O exemplo acima deve resultar em somente as variáveis users e posts serializadas, assim:

{"users": [...], "posts": [...]}

Não há mais necessidade de criar arquivos de views ctp`, para exibir conteúdo Json.

Uma maior personalização da saída pode ser alcançada estendendo a classe :php:class:`JsonView` com sua própria classe se necessário.

O exemplo a seguir envolve o resultado com {results: ... }:

<?php
App::uses('JsonView', 'View');
class ResultsJsonView extends JsonView {
    public function render($view = null, $layout = null) {
        $result = parent::render($view, $layout);
        if (isset($this->viewVars['_serialize'])) {
            return json_encode(array('results' => json_decode($result)));
        }
        return $result;
    }
}

XmlView

Much like the :php:class:`JsonView`, the :php:class:`XmlView` requires you to set the _serialize view variable in order to indicate what information should be serialized into XML for output.

<?php $this->set(compact('users', 'posts', 'tags')); $this->set('_serialize', array('users', 'posts'));

The above example would result in only the users and posts variables being serialized for the XML output, like so:

<response><users>...</users><posts>...</posts></response>

Note that the XmlView adds a response node to wrap all serialized content.

Conditional View Rendering

Several new methods were added to :php:class:`CakeRequest` to ease the task of setting correct HTTP headers to foster HTTP caching. You can now define our caching strategy using the expiration or validation HTTP cache model, or combine both. Now there are specific methods in :php:class:`CakeRequest` to fine-tune Cache-Control directives, set the entity tag (Etag), set the Last-Modified time and much more.

When those methods are combined with having the :php:class:`RequestHandlerComponent` enabled in your controller, the component will automatically decide if the response is already cached in the client and will send a 304 Not Modified status code before rendering the view. Skipping the view rendering process saves CPU cycles and memory.:

<?php
class ArticlesController extends AppController {
    public $components = array('RequestHandler');

    public function view($id) {
        $article = $this->Article->read(null, $id);
        $this->response->modified($article['Article']['modified']);
        $this->set(compact('article'));
    }
}

In the above example the view will not be rendered if the client sent the header If-Modified-Since, and the response will have a 304 status.

Helpers

To allow easier use outside of the View layer, methods from :php:class:`TimeHelper`, :php:class:`TextHelper`, and :php:class:`NumberHelper` helpers have been extracted to :php:class:`CakeTime`, :php:class:`String`, and :php:class:`CakeNumber` classes respectively.

To use the new utility classes:

<?php
class AppController extends Controller {

    public function log($msg) {
        $msg .= String::truncate($msg, 100);
        parent::log($msg);
    }
}

You can override the default class to use by creating a new class in your APP/Utility folder, e.g.: Utility/MyAwesomeStringClass.php, and specify it in engine key:

<?php
// Utility/MyAwesomeStringClass.php
class MyAwesomeStringClass extends String {
    // my truncate is better than yours
    public function static truncate($text, $length = 100, $options = array()) {
        return null;
    }
}

// Controller/AppController.php
class AppController extends Controller {
    public $helpers = array(
        'Text' => array(
            'engine' => 'MyAwesomeStringClass',
            ),
        );
}

HtmlHelper

A nova função :php:meth:`HtmlHelper::media()` foi adicionada para a geração de HTML5 do elemento de áudio/vídeo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment