Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Zend Framework - Plugins
Nesse tutorial irei falar sobre o uso de plugins
para quem não viu os tutoriais anteriores segue os links:
Zend_Controller_Front::getInstance() ->throwExceptions(FALSE)
->registerPlugin(new MeuPlugin())
->setControllerDirectory(BASEPATH . 'application' . DS . 'controllers' . DS)
->dispatch();
e criar a classe plugins e colocar o arquivo dentro da pasta plugins
<?php
class MeuPlugin extends Zend_Controller_Plugin_Abstract
{
// ...
}
um exemplo pratico é fazermos uma classe para validar a se o usuario esta logado no sistema ou não, com plugin se torna uma tarefa muito facil, pois não importa se tivermos uma pagina para monitorar ou 1000 o ZF ira fazer a verificação automatica sem voce ter que ficar incluindo validação script por script.
Só não quero entrar em detalhes ainda em login, porque envolve banco de dados, e eu gostaria de passar mais alguns tutoriais basicos antes para o pessoal ter um conhecimento melhor.
nesse exemplo em anexo ja inclui 2 plugins um de login outro de tratamento de erros de url se o usuario digitar uma pagina que não existe o sistema avisa sem dar erro.
mais detalhes sobre Plugins
[http://framework.zend.com/manual/en/zend.c...rd.errorhandler
OBS: Pasta Library vazia.
Proximo tutorial:
é muito simples e por outro lado é muito seguro, o esquema de autenticação do Zend é muito seguro e pratico
e como falei voce ganha muita agilidade se quer seu site inteiro protegido só incluir uma linha do plugin se nao quer basta tirar, muito mais facil que ficar incluindo validaçao de pagina em pagina, e nao é dinamico se seu site cresce e ter mais paginas você precisa incluir as validações nas paginas novas, com o Zend nao precisa mecher em nada
logo mais vou postar novos tutoriais e quando entrar no assunto de conexoes a banco de dados, vou postar um sistema de login do Zend muito show.
Fabyo, teria como você mostrar como podemos fazer um sistema de login utilizando plugin ?
Da para fazer de varias maneiras, com cookie, session, com forms ou usando extjs
com plugin ou voce gostaria só login puro sem mais nada ?
Acho que para começar poderia ser com session, um login mais simples!
e depois seria bem interessante usando extjs com plugin !! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Eu to com uma serie de tutoriais para postar na sequencia do basico ao avançado, só dei uma parada porque o forum anda muito lento e eu estava esperando eles resolverem isso
dai eu ia entrar em detalhes de conexoes com banco de dados etc...
legal!!!
bom tomara que esse problema seja resolvido logo!!! pois é ruim quando vou postar e da erro!
Olá,
Não entendi essa história de plugin de segurança....
Só o fato de "registrar" o plugin ele está funcionando?
O método routeShutdown é um método padrão ao qual é chamado sempre quando se registrar um plugin??
Atenciosamente,
Hélio
Sim só registrar o Plugin, e qualquer pagina que tentar entrar ele vai verificar se esta logado se nao tiver ele redireciona pra pagina de login
Posso estar enganado, mas quando programávamos sem frameworks, nossas super-classes com dezenas de métodos auxiliares agora são plugins?
Por exemplo: Em minha super-classe tenho métodos pra tudo: obter idioma, definir idioma, obter tema, definir tema, usar um array de sentenças de idiomas...
Enfim...
Isso pode ser usado como um plugin? Antes eu invocava o método desejado da superclasse após instanciar o objeto.E agora, sendo um plugin (se é que pode ser).
Se essas superclasses não equivalem a plugins, o que passam a ser essas bibliotecas multi funções que utilizávamos outrora?
Porque mesmo que o Framework tenha MUITOS recursos auxiliares pra diversas tarefas, sempre tem uma coisinha ou outra que nós queremos fazer do nosso jeitinho.
Pode ser usada como plugin,desde que siga a especifcação de plugins da ZendFramework (nesse caso).
Não entendi basicamente nada do que você quis dizer (sua fala está bem sem nexo amigo...).
---
Fabyo...muito bom tutorial cara!Parábens!
>
Pode ser usada como plugin,desde que siga a especifcação de plugins da ZendFramework (nesse caso).
Não entendi basicamente nada do que você quis dizer (sua fala está bem sem nexo amigo...).
---
Fabyo...muito bom tutorial cara!Parábens!
Sem nexo? Você não ter entendido tudo bem, é compreensível. Mas não há ausência de lógica gramatical no que postei.
Mas se quiser, explico parágrafo a parágrafo:
--------------------------
1º. Inicio com um comentário sobre como era a programação OOP antes dos frameworks, onde criávamos super-classes com métodos auxiliares para diiversas tarefas isoladas ou em conjunto. Ex: O próprio sistema de fórusn IPB tem sua ipsclass
2º. Cito o exemplo de minha própria super-classe e aliguns dos muitos métodos que ela contém.
3º. Questiono se essas super-classe agora, com frameworks, se denomina (ou pode ser considerada) um plugin e exmplifico como fazia antes, sem frameworks.
4º. Em contrapartida, se essas super-classes antigas, não puderem ser plugins, questiono como implementar esses diversos métodos menores comuns a todo o sistema agora, usando frameworks.
5º. Comentário dissertativo de desfecho final.
--------------------------
Melhorou?
Ola
então depende, nem tudo precisa ser plugin, por exemplo se voce tem uma ou varias funções que trata de cadastro de clientes por exemplo, voce pode deixar essas funções na classe ClientesController.php, e assim por diante
voce tbm pode criar uma classe com suas funções e chamar ela onde quiser e nem por isso precisa ser um plugin
deu pra entender +- ?
Certo.
Plugins na verdade são para "wrappers de tarefas pequenas porém inteiras" referente à uma parte específica do projeto, certo?
Infelizmente não melhorou.Bem baixo nivel o que você disse...
Um plugin da Zend seria mais ou menos uma classe com métodos prédefinidos (por uma interface/classe abstrata [a serem implementados]),onde tais métodos são chamados em algum contexto.
>
Da para fazer de varias maneiras, com cookie, session, com forms ou usando extjs
com plugin ou voce gostaria só login puro sem mais nada ?
olá,
Fabyo como você disse da para fazer de várias formas mas com sua experiência qual você acha mais seguro cookie, session ou usando extjs?!
att
Olá Fabyo e pessoal.
Bem, tenho que dizer que ta ficando muito legal isso tudo.
Bem, não consegui fazer o errorAction ser acionado, quando acesso bla/index/teste ele me retorna erro, não acredito que seja por que eu estou com o xdebug ativo, pode ser?
De qualquer forma, segue o erro
Zend_Controller_Action_Exception: Action "teste" does not exist and was not trapped in __call() in /media/backup/www/zendf/library/Zend/Controller/Action.php on line 477
Ps 1: estou rodando o código em anexo, fiquei grilado, e baixei o seu código, e somente desativei o plugin SecurityPlugin.
Ps 2: seus outros tutoriais funcionaram perfeitamente até aqui `xD
Valeu o espaço!
Ah, mais uma coisa, quando acesso o endereço http://localhost/~scorninpc/zendf/login/ da 404. Ja mudei em tudo meu .htaccess, não vai, tem alguma coisa haver com o modrewrite?
O link que você passou esta certo?
se tiver pode ser problema no mod rewrite
pow Fabyo, obrigado pela resposta. Acho que o problema era alguma configuração do userdir, tirei o projeto do ~scorninpc e passei ele direto pra raiz /var/www e funcionou, deu pra continuar o tutorial, que por sinal, ta muito bom :o
Valeu! =)
Comparando com o exemplo anterior, para incluir este plugin não foi adicionado apenas uma linha e sim duas linhas. Eu não entendo justamente a linha bastarda que não foi citada. Poderia me dizer o que ela faz, por favor?
Abraço
Fabyo
Estou estudando os teus tutorias sobre o Zend Framework e tem me ajudado bastante.
Só que estou tentando implementar um plugin, só que esta retornando o seguinte erro:
Fatal error: Class 'MeuPlugin' not found in D:\My Dropbox\zend-framework-teste\index.php on line 23
Meu código é o seguinte:
<?php
if(version_compare(phpversion(), 5) === '-1'){
die('Versão do PHP não compativel');
}
define('DS', DIRECTORY_SEPARATOR);
define('PS', PATH_SEPARATOR);
define('BASEPATH', getcwd() . DS);
set_include_path('.'
. PS . BASEPATH . 'library' . DS
. PS . BASEPATH . 'includes' . DS
. PS . BASEPATH . 'application' . DS . 'controllers' . DS . 'plugins' . DS
. PS . BASEPATH . 'application' . DS . 'models' . DS
. PS . get_include_path());
require_once('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance();
Zend_Controller_Front::getInstance()
->throwExceptions(false)
->registerPlugin(new Zend_Controller_Plugin_ErrorHandler())
->registerPlugin(new MeuPlugin())
->setControllerDirectory(BASEPATH . 'application' . DS . 'controllers' . DS)
->dispatch();
Salvei meu plugin na pasta:
application/controllers/plugins/MeuPlugin.php
Código do plugin
<?php
class MeuPlugin extends Zend_Controller_Plugin_Abstract {
public function init(){
}
}
Fico grato pela sua ajuda.Opa
antes de ver o problema, qual a versão do Zend que voce esta usando?
é que mudou algumas coisas nas ultimas versoes como por exemplo o Autoloader
>
Opa
antes de ver o problema, qual a versão do Zend que voce esta usando?
é que mudou algumas coisas nas ultimas versoes como por exemplo o Autoloader
Fabyo
Estou usando a versão 1.10 do Zend Framework.
Vou te mostrar um novo jeito, só continue usando seu set_include_path(), eu nao uso porque eu ja configuro direto no PHP.ini ok?
<?php
define('APPLICATION_PATH', realpath('.') . '/application');
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
$application = new Zend_Application($env,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()->run();
agora tudo esta no application.ini veja um exemplo:
[production]
appnamespace = Application
phpsettings.date.timezone = "America/Sao_Paulo"
resources.locale.default = pt_BR
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.error_reporting = E_ALL
global.autoloadersupresswarnings = false
autoloadernamespaces.0 = Zend_
autoloadernamespaces.1 = ZendX_
autoloadernamespaces.2 = Zend_
autoloadernamespaces.4 = Plugins_
resources.locale.default = pt_BR
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.baseUrl = BASE_PATH
resources.frontController.plugins = Plugins_Security
resources.frontController.params.displayExceptions = true
resources.frontController.noErrorHandler = 0
resources.frontController.throwerrors = true
includePaths.models = APPLICATION_PATH "/models"
;Layout
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
;Views
resources.view.encoding = "UTF-8"
resources.view.basePath = APPLICATION_PATH "/views/"
;Database
resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "localhost"
resources.db.params.username = "usuario"
resources.db.params.password = "senha"
resources.db.params.dbname = "banco"
resources.db.isDefaultTableAdapter = true
como falei é só um exemplo, procure ler o manual do Zend sobre Application, qualquer duvida posta ai
Pootz, essa questão de utilização do plugin para verificação de usuário autenticado ou não, fica bem mais fácil de programar. Estou achando só um pouco confuso pelo menos até eu ler mais a respeito, esse monte de funções e variaveis que o ZF tem, mas acredito que é questão de tempo.
Mas valeu pelos tutoriais.