A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

1.2. Um exemplo de site PHP

Para demonstrar como é difícil escrever um site sem um framework, aqui nós vamos escrever um site muito simples, composto por três páginas HTML: Home , Login e Logout . Para este exemplo, não usaremos nenhuma estrutura e tentaremos usar apenas PHP "puro".

Não fique confuso - escrever um site com framework também pode ser difícil, mas com um framework, você fará isso de maneira consistente e segura.

1.2.1. Home Page

Quando você escreve um site em PHP, você coloca seu código em um arquivo com a extensão .php . Este arquivo é chamado um script PHP *.

Primeiro, vamos implementar a página Home do site. Para fazer isso, você deve criar o arquivo index.php no seu Apache ou no seu diretório raiz e coloque o seguinte código:

Para entender o código abaixo, você precisa ter alguma experiência com PHP. Se você não tem experiência com PHP, caso tenha duvidas ou necessite de algum tutorial de PHP, recomendamos w3schools.com.

<?php 
// index.php
session_start();

// If user is logged in, retrieve identity from session.
$identity = null;
if (isset($_SESSION['identity'])) {
    $identity = $_SESSION['identity'];
}
?>

<!DOCTYPE html>
<html>
    <head>
        <title>Home page</title>
    </head>
    <body>
        <h1>Home</h1>
        <?php if ($identity==null): ?>
        <a href="login.php">Sign in</a>
        <?php else: ?>
        <strong>Welcome, <?= $identity ?></strong> <a href="logout.php">Sign out</a>
        <?php endif; ?>
        
        <p>
            This is a simple website to demonstrate the advantages of a PHP framework
            and disadvantages of "pure" PHP.
        </p>
    </body>
</html>

Se você agora digitar "http: //localhost/index.php" no seu navegador (como Google Chrome ou Firefox), deve ver a página como abaixo:

Home page Home page

1.2.2. Login Page

Em seguida, vamos implementar a página Login . Essa página teria um formulário com os campos E-mail e Senha . Depois que o usuário envia o formulário, ele será autenticado e vamos salvar os seus dados na na sessão do PHP. O Código ficaria:

<?php 
// login.php
session_start();

// If user is logged in, redirect him to index.php
if (isset($_SESSION['identity'])) {
    header('Location: index.php');
    exit;
}

// Check if form is submitted.
$submitted = false;
if ($_SERVER['REQUEST_METHOD']=='POST') {
    
    $submitted = true;
    
    // Extract form data.
    $email = $_POST['email'];
    $password = $_POST['password'];
    
    // Authenticate user.
    $authenticated = false;
    if ($email=='admin@example.com' && $password=='Secur1ty') {
        $authenticated = true;
        
        // Save identity to session.
        $_SESSION['identity'] = $email;
        
        // Redirect the user to index.php.
        header('Location: index.php');
        exit;
    }
}
?>

<!DOCTYPE html>
<html>
    <head>
        <title>Login page</title>
    </head>
    <body>
        <h1>Sign in</h1>
        <?php if ($submitted && !$authenticated): ?>
            <div class="alert">
                Invalid credentials.
            </div>
        <?php endif; ?>
        <form name="login-form" action="/login.php" method="POST">
            <label for="email">E-mail</label>
            <input type="text" name="email">
            <br>
            <label for="password">Password</label>
            <input type="password" name="password">
            <br>
            <input type="submit" name="submit" value="Sign In">
        </form>
    </body>
</html>

Se você abrir o URL "http: //localhost/login.php" em seu navegador, você vai ver algo como:

Login page Login page

Para efetuar login, use o admin@example.com e Secur1ty como seu E-mail e senha, respectivamente.

1.2.3. Logout Page

E finalmente, vamos implementar a página Logout que irá limpar os dados do usuário e da sessão:

<?php 
// logout.php
session_start();

unset($_SESSION['identity']);
header('Location: index.php');
exit;

O código completo deste site pode ser encontrado em Pure PHP exemplo está incluso com este livro.

1.2.4. Revisando o Código

Os scripts acima não são apenas um exemplo típico de um site PHP "puro". É também um exemplo de como você não deve escrever seus sites (mesmo sites simples). O que há de errado nisso?

  1. Os scripts index.php e login.php tendem a juntar o código em um único arquivo. Você não tem nenhuma separação, o que torna o seu código muito complexo. Intuitivamente, você entende que seria porém é mais conveniente dividir o código responsável pela autenticação do usuário e o código responsável pela apresentação (renderização HTML).

  2. As URLs das suas páginas parecem feias (por exemplo, "http: //localhost/index.php"). Nós seria melhor esconder essa extensão .php em tudo. E o que acontece quando um usuário da web tenta visitar uma página que não existe? Não seria melhor redirecionar o usuário para uma página de erro nesse caso.

  3. E se este site aumentar de tamanho? Como você vai organizar o seu código? Um script PHP por página da web? E se você quiser reutilizar alguns dos seus scripts PHP em outros sites sem alterações? Intuitivamente Você pode entender que seria útil organizar o código em algum tipo de módulos reutilizáveis.

  4. Os scripts index.php e login.php contêm HTML comum. Por que copiamos e colamos este layout comum em todos os scripts PHP? Não seria melhor reutilizar o mesmo layout padrão em todos (ou quase todas) as páginas.

  1. O script login.php tem problemas de segurança, porque não implementamos nenhuma validação do ​​POST. A sessão do PHP também está sujeita a ataques hackers. E o script login.php PHP está localizado no diretório raiz do documento, o que não é muito seguro (seria melhor colocá-lo em um local não acessível para usuários da web). O index.php também é inseguro, porque nós não filtramos a saída do PHP (ele está sujeito a ataques XSS).

  2. Esses scripts não usam classes PHP. Encapsulando funcionalidade em classes em teoria faria o código bem estruturado e fácil de dar suporte.

  3. Nesses scripts, você precisa escrever sua própria implementação de autenticação do usuário (e assim por diante). Em vez de reinventamos a roda por que não usar uma biblioteca bem projetada para isso?

Os problemas acima são facilmente resolvidos quando você escreve um site dentro de um framework (como o Zend Framework 3):

  1. No ZF3, você usa o padrão de projeto Model-View-Controller , dividindo seu código PHP em models (o código responsável pela autenticação), views (o código responsável pela renderização de HTML) e controllers (o código responsável por recuperar as variáveis ​​do POST).

  2. O sistema de rotas do ZF3 permite deixar as URLS mais profissionais ocultando a extensões .php. Todas as URLS seguem regras estritas. Se um usuário tentar ver uma página não existente, ele será automaticamente redirecionado para uma página de erro padrão.

  3. No ZF3, você pode usar o conceito de module . Isso permite convenientemente separar seus models, views and controllers em unidade autônoma (module) e reutilize facilmente essa unidade em outro projeto.

  4. No ZF3, você pode definir um modelo padrão para visualização layout e reutilizá-lo em todas (ou na maioria) páginas da web.

  5. O ZF3 fornece vários recursos de segurança, como filters e validators, criptografia algoritmos e assim por diante. Em um site da ZF3, apenas o index.php é acessível para usuários da web, todos os outros scripts PHP estão localizados fora do diretório raiz de documentos do Apache.

  6. Em um site da ZF3, você coloca seu código em classes, o que o torna bem organizado.

  7. O ZF3 fornece muitos componentes que você pode usar em seu site: existem componentes para autenticação, um componente para trabalhar com formulários e assim por diante.

Agora você pode ter alguma idéia das vantagens do Zend Framework 3 e do que ele pode fazer por você. Na próxima seções, descreveremos o ZF3 em mais detalhes.


Top