Mostrando postagens com marcador PHP. Mostrar todas as postagens
Mostrando postagens com marcador PHP. Mostrar todas as postagens

terça-feira, 27 de junho de 2017

Instalando o Composer no Ubuntu 17.04

Olá galera,

No post de hoje, vamos instalar o Composer no Ubuntu 17.04 para ficar acessível globalmente.

Abra o terminal e execute os comandos abaixo.

sudo apt-get install curl
curl -sS https://getcomposer.org/installer | php
chmod +x composer.phar
mv composer.phar /usr/local/bin/composer

Após executá-los, o comando composer estará disponível no terminal a partir de qualquer diretório. Fica aí a dica.

Um forte abraço e até a próxima.

sexta-feira, 5 de junho de 2015

Configurando uma conexão PHP com SQL Server Express 2014

Olá pessoal,

Hoje nós vamos configurar e corrigir alguns erros de conexão do PHP com SQL Server Express 2014.

Espero ter ajudado pessoas que tenham se deparado com o mesmo problema.

Um grande abraço a todos e até a próxima.

quarta-feira, 27 de maio de 2015

MS4W + ImageMagick + SQL Server Express 2014 no Windows 8.1

Olá galera,

No vídeo de hoje, nós vamos montar um ambiente para trabalhar com Geo no Windows. A instalação do MS4W é bastante simples, por isso adicionei algumas instalações extras de acordo com minha necessidade.

Os instaladores e as bibliotecas utilizadas podem ser baixados através do Google Drive.

OBS: Vale lembrar que a instalação foi realizada com os softwares que estou disponibilizando. Com outras versões, principalmente do ImageMagick, pode ser que não funcione.

Um grande abraço a todos e até a próxima.

terça-feira, 13 de janeiro de 2015

Instalar o módulo OCI8 (Oracle) no Ubuntu 14.04

1 - Instalar PHP5 e Apache 2

http://www.codegeo.com.br/2013/01/instalando-apache-2-e-php-5-no-ubuntu.html

2 - Baixar o Oracle Instant Client

Para que o módulo php-oci8 funcione, é necessário baixar o Instant Client.

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

Baixe os arquivos Instant Client Package - Basic e Instant Client Package - SDK

OBS: Faça o download dos arquivos ZIP de acordo com a versão do seu banco de dados.

3 - Preparar Instant Client

Extraia o basic e o sdk para uma pasta instantclient dentro de /opt

unzip instantclient-basic-linux.x64-XX.X.X.X.X.zip -d /opt
unzip instantclient-sdk-linux.x64-XX.X.X.X.X.zip -d /opt

Os comandos acima irão extrair os 2 arquivos ZIP e colocá-los dentro de uma pasta chamada instantclient_XX_X, sendo que o X indica a versão baixada.

Agora vamos criar alguns links simbólicos dentro da pasta.

cd /opt/instantclient_XX_X
ln -s libclntsh.so.XX.X libclntsh.so
ln -s libocci.so.XX.X libocci.so

4 - Instalar bibliotecas necessárias

sudo apt-get install libaio1 php-pear php5-dev

5 - Preparar PECL/PEAR

pear upgrade --force pear
pear upgrade
pear channel-update pear.php.net
pecl channel-update pecl.php.net

6 - Instalar PECL/PEAR

pecl install oci8

Durante a instalação, o PECL irá pedir para você localizar o Instant Client e será exibida uma mensagem como abaixo:
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :

Digite o código abaixo e em seguida pressione Enter

instantclient,/opt/instantclient_XX_X

7 - Incluir o OCI8 ao php.ini

sudo nano /etc/php5/apache2/php.ini

No final do arquivo acrescente a linha abaixo:

extension=oci8.so

Para salvar as alterações, aperte CTRL+X, digite Y e em seguida pressione Enter

8 - Reiniciar o Apache

sudo service apache2 restart

Verifique no phpinfo() se o módulo esta ativo. Caso a instalação tenha sido feita corretamente, irá aparecer uma imagem como a abaixo.

OBS: Não apague a pasta /opt/instantclient_XX_X pois o OCI8 deixará de funcionar.

domingo, 30 de novembro de 2014

Bloqueando múltiplas autenticações com o mesmo usuário no Laravel 4.2

Olá galera,

Há algum tempo, precisei destruir a sessão mais antiga de um usuário caso ele efetuasse login em outra máquina ou em outro navegador. Dessa forma, queria garantir que teríamos o mesmo usuário logado somente uma única vez com a sessão mais nova.

Fiz uma implementação que acredito não ser a melhor solução mas resolveu o meu problema. Vale lembrar que a solução foi utilizando o Session Driver do tipo file.

O código abaixo foi utilizado no controller de usuário após validação dos dados de login onde foi retornado o id do usuário.

    $files = \File::allFiles(storage_path().'/sessions');
    $name = Auth::getName();

    foreach ($files as $file) {
      $session  = unserialize(\File::get($file));
      if(isset($session[$name])) {
        if($session[$name] == $usuario_id) {
          \File::delete($file);
        }
      }
    }
  

Na linha 1, são acessados todos os arquivos de sessão gerados na aplicação.

Na linha 2, é capturado o valor do identificador único da sessão.

Nas linhas 4 e 5, são capturados o conteúdo de cada arquivo da sessão e convertido para dados serializados para o formato de array.

Na linha 6, é realizada uma checagem para ver se existe algum usuário logado com aquele identificador único.

Na linha 7, é feita uma comparação entre o id do usuário retornado na consulta do login com o id da sessão já armazenada no file.

Na linha 8, é apagado o arquivo da sessão mais antiga que se encontra armazenado no diretório sessions.

OBS: Com a remoção do arquivo gerado na sessão é necessário realizar a checagem com Auth::check() e fazer o redirecionamento caso a sessão do usuário não exista mais.

Conhece outra solução ou fez de outra forma? Compartilhe conosco.

Um grande abraço a todos e até a próxima.

domingo, 12 de outubro de 2014

Validando unicidade com múltiplos campos no Laravel 4.2

Olá galera,

No post Aplicação com Laravel 4 - Models e Validations são apresentadas alguns tipos de validações, entre elas a unique. Hoje iremos demonstrar como validar a unicidade envolvendo vários campos.

Para exemplificar, vamos utilizar um model de bairro que possui uma chave estrangeira de município. Os campos do nosso model bairro: id, descricao, municipio_id. A idéia que é não tenhamos uma descrição repetida de um bairro dentro do mesmo munícipio.

    protected $table = 'bairros';

    protected $fillable = array('descricao', 'municipio_id');

    public static $rules = array(
      'descricao' => 'required|min:3|max:80|unique:bairros,descricao',
      'municipio_id' => 'required|integer'
    );
  

No código acima estão somente as regras, não há nenhuma novidade. No seguinte iremos escrever a validação.

    public static function validate($data)
    {
      $id = 'NULL';
      $municipio_id = $data['municipio_id'];

      if(Request::getMethod() == 'PUT')
        $id = $data['id'];

      self::$rules['descricao'] .= ", {$id}, id ,municipio_id, {$municipio_id}";
      return Validator::make($data, self::$rules);
    }
  

Na linha 3, é atribuído ao $id o valor NULL que será usado na inclusão.

Na linha 4, é capturado o valor do munícipio submetido pelo formulário.

Nas linha 6 e 7, é checado se o request é do tipo PUT (alteração). Se for é capturado o id do registro submetido.

Na linha 9, são adicionados os parâmetros para o unique.

Bastante simples não é verdade?

Fica aí a dica. Grande abraço

sábado, 27 de setembro de 2014

Campos customizados para autenticação com Laravel 4.2

Olá galera,

O Laravel, por padrão, utiliza os campos username e password para autenticação. Dessa forma, nós podemos utilizar o método Auth::attempt sem que seja necessário fazer nenhuma alteração.

Agora supondo que a nossa tabela utilize campos como email e senha, quais alterações precisam ser feitas para que o método Auth::attempt passe a funcionar?

A primeira delas deve ser feita no seu model de usuário, onde é implementado o método getAuthPassword com o meu atributo.

    public function getAuthPassword()
    {
       return $this->senha;
    }
  

Abaixo eu implementei um método, no controller de usuário, chamado validate que será chamado quando um formulário de login foi submetido.

    public function validate()
    {
       $user = array(
            'email' => Input::get('email'),
            'password' => Input::get('senha'),
            'ativo' => 1
        );

        if (Auth::attempt($user, false)) {
            echo 'Logado com sucesso!';
        } else {
            echo 'Não foi possível efetuar o login.';
        }
    }
  

Note que o segredo está no campo da senha. A chave que eu utilizo no array tem que ser exatamente password. Os demais parâmetros terão que ser o nome dos nossos campos na tabela de usuários. Inclusive podem ser passados vários atributos para serem validados como foi o caso do ativo.

Fica aí a dica. Grande abraço

domingo, 7 de setembro de 2014

Trabalhando com mutators no Laravel 4.2

Olá galera,

O Eloquent fornece um forma de modificar os atributos do model. Para exemplificar seu uso, vamos analisar o UsuariosController.php da série Autenticação e ACL com Laravel 4.1.

Nos métodos que salvam e atualizam os dados do usuário, o hash da senha é feito manualmente antes de salvá-la no banco de dados.

$input['password'] = Hash::make(Input::get('password'));

Utilizando mutator, nós podemos remover essa "transformação" e criar um método no model Usuario.php.

    public function setPasswordAttribute($value) {
    $this->attributes['password'] = Hash::make($value);
    }
  

A partir de agora quando for atualizar ou inserir uma senha no banco o hash dela será feito automaticamente.

Vale lembrar que o nome do método deve seguir o padrão setNomedoatributoAttribute

Fica aí a dica. Grande abraço

segunda-feira, 1 de setembro de 2014

Exibindo menu de acordo com o perfil

Olá galera,

Após receber inúmeras solicitações, vou mostrar como exibir somente itens do menu que o usuário tem permissão.

Recomendo que você dê uma olhada nos comentários do post Autenticação e ACL com Laravel 4.1 - Final para saber do que estamos falando.

Tomando como base os códigos da série Autenticação e ACL com Laravel 4.1, abra o arquivo app/macros.php e adicione a macro abaixo.

    HTML::macro('mountMenu', function() {
      $menu = null;
      $cache = Cache::get('actions' . Auth::user()->id);
      $index = preg_grep('/index|\*/', $cache);

      $links = array(
        'veiculo' => 'Veículos',
        'usuario' => 'Usuários',
        'perfil' => 'Perfis',
      );

      foreach($links as $key => $value) {
        foreach($index as $i) {
          if($key == current(explode('.', $i)) || $i == '*')
            $menu .= '
  • ' . link_to($key, $value) . '
  • '; } } return $menu; });

    Já no arquivo app/views/partials/_navigation.blade.php, remova as tags 'li' que contém os links do menu e adicione {{ HTML::mountMenu() }}

    Explicando a macro que gera o menu.

    Linha 3: Recuperando as permissões do usuário logado

    Linha 4: Retorno as entradas do array de acordo com o padrão que pode ser o 'index' ou '*'

    Linhas 6 a 10: Array de itens do menu com chave e valor, sendo que a chave é minha rota e o valor é o label a ser exibido.

    Linhas 12 a 14: Percorro os dois arrays comparando se as chaves são iguais

    Linha 15: Concateno os itens de menu que atendem a minha condição

    Bastante simples não é verdade? Fica aí a dica.

    Um grande abraço e até a próxima.

    terça-feira, 6 de maio de 2014

    Corrigindo conflito do yield do Laravel 3.2 com PHP 5.5

    Olá galera,

    O PHP 5.5 trouxe algumas novidades das quais podemos destacar o suporte ao generators. Com isso, o yield passou a se tornar uma palavra reservada e gerou um conflito com o Laravel 3.2.

    Quem quiser saber mais informações sobre o yield, pode clicar aqui.

    Voltando a correção do conflito, encontrei-a no próprio GitHub do Laravel. Apesar de estar claro quais alterações devem ser feitas, vou replicá-las aqui no blog por segurança.

    O trabalho consiste em adicionar "_" (underline ou underscore) antes do yield.

    OBS: Conforme já citei em outros posts, recomendo que qualquer alteração seja devidamente comentada e documentada para evitar problemas futuros.

    Arquivo: laravel/blade.php linha 364.

    * The Blade @yield statement is a shortcut to the Section::_yield method.

    Arquivo: laravel/blade.php linha 373.

    return preg_replace($pattern, '$1<?php echo \\Laravel\\Section::_yield$2; ?>', $value);

    Arquivo: laravel/documentation/views/templating.md linha 47.

    <?php echo Section::_yield('scripts'); ?>

    Arquivo: laravel/helpers.php linha 563.

    function _yield($section)

    Arquivo: laravel/helpers.php linha 565.

    return Section::_yield($section);

    Arquivo: laravel/section.php linha 72.

    return static::_yield(static::stop());

    Arquivo: laravel/section.php linha 131.

    public static function _yield($section)

    Arquivo: laravel/tests/cases/blade.test.php linha 81.

    $this->assertEquals("<?php echo \\Laravel\\Section::_yield('something'); ?>", Blade::compile_string($blade));

    Espero ter ajudado as pessoas que encontraram o mesmo problema.

    Um abraço e até próxima.

    quinta-feira, 1 de maio de 2014

    Habilitando o php5-mcrypt no Ubuntu 14.04

    Olá galera,

    Montei meu ambiente de desenvolvimento no Ubuntu 14.04. Para minha surpresa, após executar o sudo apt-get install php5-mcrypt, a extensão foi instalada conforme a imagem abaixo mas não estava habilitada.

    Vamos corrigir o problema criando um link simbólico no diretório /etc/php5/apache2/conf.d.

    cd /etc/php5/apache2/conf.d
    sudo ln -s ../../mods-available/mcrypt.ini /etc/php5/apache2/conf.d/20-mcrypt.ini

    Após executar os comandos acima e darmos um ls -l teremos a imagem abaixo.

    sudo php5enmod mcrypt

    Reinicie o Apache para que a configuração tenha efeito.

    sudo service apache2 restart

    Espero que a dica tenha sido útil.

    Um grande abraço a todos e até a próxima.

    sábado, 26 de abril de 2014

    Setando o locale no Laravel 4

    Olá galera,

    Estou utilizando o Carbon que é uma API para trabalhar com Datetime e vem junto com o Laravel 4. Para quem nunca ouviu falar, pode ver mais detalhes aqui.

    {{ Carbon::now()->formatLocalized('Brasília %d de %B de %Y') }}

    O código acima exibe o dia atual formatado. Ex: Brasília 07 de April de 2014. O problema aqui é o mês em inglês. Há várias formas de resolver o problema, inclusive criando arrays com os meses em português e etc. Adotaremos uma solução mais elegante.

    No meu Ubuntu, abri o terminal e digitei locale -a. Foi exibida uma lista de locales disponíveis e entre eles, o que vou utilizar: pt_BR.utf8.

    OBS: Caso não seja exibido o locale do Brasil, é bem provável que não esteja instalado. Para fazer a instalação, abra o terminal e digite

    Abra o arquivo app/filters.php e dentro de App::before, adicione setlocale (LC_ALL, 'pt_BR.utf8');. O resultado final deve ficar como abaixo.

      App::before(function($request)
      {
        setlocale (LC_ALL, 'pt_BR.utf8');
      });
      

    Agora o resultado exibido será Brasília 07 de abril de 2014.

    Um grande abraço e até a próxima.

    quarta-feira, 19 de março de 2014

    NicEdit com Laravel 4

    Olá galera,

    Nesse vídeo tutorial vamos aprender como integrar o editor NicEdit com o Laravel 4. Apesar da sua última versão datar do ano de 2012, eu o escolhi pela simplicidade e pelo seu tamanho. Fiz algumas alterações na versão original para atender as minhas necessidades. Dessa forma, recomendo que você faça o download da versão utilizada no vídeo tutorial clicando aqui.

    Os arquivos que foram alterados podem ser baixados aqui. Fiquem a vontade para enviar dúvidas ou sugestões.

    Um grande abraço a todos e até a próxima.

    sexta-feira, 14 de março de 2014

    Populando combo com Ajax no Laravel 4

    Olá galera,

    Esse vídeo tutorial é para atender uma solicitação do nosso amigo Carlo Caetano. Para exemplificar o pedido, vamos utilizar Estados e Municípios em combos. Como nos vídeos anteriores, recomendo que a visualização do vídeo seja feita em alta resolução, de preferência em HD, por conta dos códigos exibidos.

    Os arquivos do projeto base podem ser baixados aqui.

    Os arquivos que foram alterados e criados podem ser baixados aqui. Fiquem a vontade para enviar dúvidas ou sugestões.

    Um grande abraço a todos e até a próxima.

    domingo, 9 de março de 2014

    Customizando mensagens de erro no Laravel 4.1

    Olá galera,

    Hoje vamos customizar as mensagens de erro que são exibidas pelo Laravel. Por padrão, as mensagens exibidas são algo como Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException ou Whoops, looks like something went wrong. quando o debug está setado como false.

    Para realizar a alteração, abra o arquivo global.php, que se encontra dentro de app/start, e pesquise pela linha App::error(function(Exception $exception, $code).

    Troque-o pelo código abaixo.

        App::error(function($exception, $code)
        {
          switch ($code)
          {
            case 403:
              return Response::view('errors.message', array('error' => '403 - Acesso proibido'), 403);
    
            case 404:
              return Response::view('errors.message', array('error' => '404 - Página não encontrada'), 404);
    
            case 500:
              return Response::view('errors.message', array('error' => '500 - Erro interno do servidor'), 500);
    
            default:
              return Response::view('errors.message', array('error' => 'Erro código - ' . $code), $code);
          }
        });
      

    O código é bem autoexplicativo. Estamos pegando o código de resposta e passando uma mensagem para a view message.blade.php que deve ser criada dentro do diretório app/views/errors.

    Dentro do arquivo message.blade.php, adicione o código abaixo.

        @extends(((Auth::check()) ? 'layouts.master' : 'layouts.autentication'))
    
        @section('content')
          
    {{ $error }}
    @stop

    No meu caso estou checando se o usuário está logado e setando um layout correspondente. Esse é somente um exemplo de como customizar as messagens de erro. Faça as adequações de acordo com seu projeto.

    Espero que a dica seja de grande utilidade.

    Um grande abraço e até a próxima.

    segunda-feira, 24 de fevereiro de 2014

    Autenticação e ACL com Laravel 4.1 - Final

    Olá galera,

    Nesse último vídeo, vamos adicionar o filtro de ACL a nossa aplicação. Como nos vídeos anteriores, recomendo que a visualização do vídeo seja feita em alta resolução, de preferência em HD, por conta dos códigos exibidos.

    Os arquivos que foram gerados podem ser baixados aqui. Fiquem a vontade para enviar dúvidas ou sugestões.

    Um grande abraço a todos e até a próxima.

    quinta-feira, 20 de fevereiro de 2014

    Autenticação e ACL com Laravel 4.1 - Parte 4

    Olá galera,

    Nesse quarto vídeo, vamos adicionar o cadastro de perfis a nossa aplicação. Como nos vídeos anteriores, recomendo que a visualização do vídeo seja feita em alta resolução, de preferência em HD, por conta dos códigos exibidos.

    Os arquivos que foram gerados podem ser baixados aqui. Fiquem a vontade para enviar dúvidas ou sugestões.

    Um grande abraço a todos e até a próxima.

    domingo, 16 de fevereiro de 2014

    Autenticação e ACL com Laravel 4.1 - Parte 3

    Olá galera,

    Nesse terceiro vídeo, vamos adicionar o cadastro de usuários a nossa aplicação. Como nos vídeos anteriores, recomendo que a visualização do vídeo seja feita em alta resolução, de preferência em HD, por conta dos códigos exibidos.

    Os arquivos que foram gerados podem ser baixados aqui. Fiquem a vontade para enviar dúvidas ou sugestões.

    Um grande abraço a todos e até a próxima.

    segunda-feira, 10 de fevereiro de 2014

    Autenticação e ACL com Laravel 4.1 - Parte 2

    Olá galera,

    Nesse segundo vídeo, vamos adicionar o login e logout a nossa aplicação. Como nos vídeos anteriores, recomendo que a visualização do vídeo seja feita em alta resolução, de preferência em HD, por conta dos códigos exibidos.

    Os arquivos que foram gerados podem ser baixados aqui. Fiquem a vontade para enviar dúvidas ou sugestões.

    Um grande abraço a todos e até a próxima.

    quinta-feira, 6 de fevereiro de 2014

    Autenticação e ACL com Laravel 4.1 - Parte 1

    Olá galera,

    Hoje daremos início a uma série de vídeos tutoriais onde abordaremos sobre autenticação e ACL com Laravel 4.

    Antes de iniciarmos, será necessário que você faça o download do código que iremos utilizar clicando aqui.

    Nesse primeiro vídeo, vamos mostrar a aplicação sendo acessada sem nenhum controle. Somente nos próximos vídeos, adicionaremos um login, uma senha e perfis de usuários. Vamos seguir também o modelo de dados conforme a figura abaixo.

    Recomendo que a visualização do vídeo seja feita em alta resolução, de preferência em HD, por conta dos códigos exibidos.

    Um grande abraço a todos e até a próxima.