Indo de uma estrutura para nenhuma estrutura [fechado]

89

Venho desenvolvendo em PHP há cerca de 8 anos como hobby. Em 2009, peguei o codeigniter e desde então não consegui desenvolver um único projeto.

Acho que fico mais lento tentando descobrir como modificá-lo para funcionar da maneira que desejo, quando se estivesse trabalhando em PHP puro, eu saberia ou seria capaz de encontrar rapidamente um snippet para.

Eu tentei CodeIgniter, Kohana e Symfony. Adoro a facilidade de uso (e também comecei a usar a doutrina como um ORM, o que acelerou enormemente meu trabalho de banco de dados), mas acho que os projetos estão me levando de 3 a 4 vezes mais tempo que em PHP puro. Fico entediado e frustrado quando não consigo encontrar uma solução para um problema que já resolvi em puro PHP.

Alguém voltou do uso de frameworks para uma abordagem sem framework? Existe algo como uma estrutura de segurança básica (evitar XSS, filtrar dados postados, fornecer uma função de limpeza para uso com bancos de dados)? Acho que algo assim me beneficiaria muito mais do que uma estrutura completa. Acho que aprender a trabalhar com frameworks me ensinou muito, mas ficaria mais feliz trabalhando com meu próprio código.

Alex C
fonte
5
Eu adoraria ouvir mais sobre por que você disse sobre o uso do framework em 3-4 vezes do tempo em comparação com o no-framework ... você se importa em elaborar mais sobre isso?
Lukman,
7
Um dos benefícios do CI, ou de qualquer estrutura, é que ele força você a um padrão de design que é mais fácil para desenvolvedores não acostumados com seu estilo de desenvolvimento específico manter. Além disso, em ambientes maiores, separar as visualizações da lógica é essencial para que seus gurus de CSS possam fazer suas coisas sem pisar nos pés dos desenvolvedores.
Kyle Noland
1
Ótima pergunta, se eu tiver escolha, uso PHP puro. Mas na maioria das vezes, as pessoas para quem trabalho querem que eu use um framework, então eu apenas cobro delas as horas extras :) Eu sinto que meu próprio código é legível, bem organizado e estável. Talvez eles temam ter que mantê-lo a bordo se ocorrer um desastre e todo o código estiver em um estado "sua-estrutura-personalizada-que-ninguém-mais-pode-ler".
SSH Em

Respostas:

101

As versões atuais do PHP5 incluem muito da estrutura de segurança que você está procurando como parte da biblioteca padrão.

Se você está aceitando HTML como entrada, recomendo pegar o HTML Purifier e chamá-lo por meio de uma linha FILTER_CALLBACK em sua configuração filter_input_array. Sua abordagem baseada em lista branca para segurança de entrada é uma excelente (e muito poderosa) primeira linha de defesa contra XSS.

Pelo que eu posso dizer, o PHP não vem com um mecanismo de proteção contra falsificação de solicitação entre sites , mas tenho certeza que o Google pode ajudá-lo com isso. As planilhas de segurança OWASP incluem uma seção sobre ele se você deseja implementar sua própria proteção.

Por curiosidade, decidi também começar a olhar para componentes autônomos e aqui está o que descobri até agora:

Modelagem:

  • Herança de modelo de PHP (PHP regular mais herança de modelo)
  • TWIG ( sintaxe no estilo Django / Jinja2 / Liquid, incluindo autoescape e sandboxing. Compila para PHP em cache para maior velocidade.)
  • Dwoo (Um sucessor mais rápido e cheio de recursos do PHP5 do Smarty . Inclui um sistema de compatibilidade para os modelos existentes do Smarty.)

Coisas que ainda não examinei direito:

ssokolow
fonte
Obrigado, todos conselhos muito bons e vou começar a olhar para eles agora!
Alex C de
4
Troque Smarty por Dwoo se você precisar de um motor de templates. Em termos de recursos, é quase idêntico ao Smarty, mas não derrete CPUs.
Phil Sturgeon,
pear.php.net/package/Net_URL_Mapper é um distribuidor de rotas.
cweiske
4
Se os frameworks deixam você lento, então evite os motores de templates, o Smarty em particular, como a praga. Eles têm boas intenções, mas apenas criam uma maneira nova e não intuitiva de fazer algo que o PHP já faz.
Night Owl
Depende do que você está tentando realizar e do motivo pelo qual a estrutura apenas o retarda.
ssokolow
10

Não acredito em frameworks ... Já trabalhei em muitos deles.

Razões para odiar frameworks MVC:

1) Code bloat, eu compro classes premium que me auxiliam no desenvolvimento. Como classes de formulário ou classes SQL.

2) Eu acredito que os frameworks MVC não são facilmente portáveis, especialmente ao usar gerenciadores de dependência.

3) Eu acredito que você realmente escreve mais código com um framework MVC do que se você tivesse que usar um clichê com uma tonelada de classes úteis que lidam com autenticação etc.

4) A maioria dos frameworks também atendem a apenas um ou dois bancos de dados nativamente.

Eu sugeriria encontrar um framework de formulário com autenticação e editor de texto e um framework sql como madoo + uma classe de email ...

90% da sua aplicação são sempre formulários, CLASSES sql e ajax - o resto pode ser adquirido quando necessário

Eu sou minimalista e luto com a ideia de ter um código em meu aplicativo que não está fazendo nada ... apenas no caso de eu precisar, não funciona para mim.

Jugger
fonte
Em relação à afirmação "Eu compro classes premium": de onde você compra essas classes e para que fins? Obrigado.
dotancohen
Concordo. Também há um impacto considerável no desempenho com muitos frameworks.
developerbmw
8

Com tanta experiência atrás de você, você deve ter seu próprio conjunto de bibliotecas favoritas, selecioná-las manualmente e criar sua própria estrutura simples. Estrutura ou nenhuma estrutura (e qual delas) depende do tipo de projeto em mãos, nenhuma luva serve para todos. Então, eu sugiro fortemente que, se você sentir que as estruturas existentes estão deixando você mais lento, gaste algum tempo e crie uma estrutura que funcione de acordo com suas necessidades.

Sabeen Malik
fonte
8

Com base na sua declaração de que está usando o PHP como hobby, bem como na declaração do seu perfil "Lentamente chegando lá", isso parece um problema de curva de aprendizado. Você não parece ter a profundidade e a amplitude de experiência para a) entender como trabalhar dentro da estrutura que a estrutura impõe e b) você não consegue se beneficiar das eficiências que a estrutura permite.

Recomendo que você continue com ele. Volte ao início com os tutoriais em vídeo. Encontre e leia o código de outras pessoas até entendê-lo. Construa seus projetos de baixo para cima - comece com simplicidade e adicione funcionalidades. Siga os fóruns, tentando responder às perguntas você mesmo antes de ler as respostas.

Tenho programado profissionalmente há quase 20 anos, em uma variedade de plataformas, e ainda demorei um pouco para me sentir confortável com a CI. Mas agora que estou, não voltaria ao PHP puro (para meus próprios projetos) a menos que tivesse um site de escala suficiente que expusesse problemas de desempenho quantificáveis ​​(pense no Twitter).

Coolgeek
fonte
Ainda estou no limite, quer goste ou não de frameworks também. Eu definitivamente entendo o ponto do OP, mas eu vejo o seu também ... aprender um framework é como aprender uma nova linguagem. Você tem que entrar na maneira de fazer as coisas do framework. Outra coisa com a qual tenho dificuldade, no entanto, é se minha filosofia de como as coisas devem ser feitas é diferente da do framework. Ainda estou tentando encontrar um que me sirva. (
Mal
Ainda não conheço nenhum outro framework, então não posso falar com generalidade. Mas usar uma estrutura não é uma proposição de tudo ou nada. Por exemplo, acho as bibliotecas de cache do CI (página, banco de dados) insuficientes e não escalonáveis ​​prontamente. Então, eu uso uma biblioteca de cache de terceiros (de Phil Sturgeon) e estou muito feliz com ela.
coolgeek
Outra vantagem significativa de continuar com ele é que torna relativamente fácil aprender posteriormente outros frameworks. É por isso que você frequentemente vê listas de empregos especificando uma estrutura particular (digamos, CI), mas declarar essa experiência com estruturas semelhantes (digamos Zend ou Symfony) será considerada.
coolgeek
2

Zend Framework é realmente ótimo para isso. Você pode usar o quanto quiser. Está tudo codificado em php e de código aberto, então você pode apenas hackear e torná-lo seu. Os diferentes componentes não dependem uns dos outros tanto quanto em outras estruturas.

Você pode construir por si mesmo uma estrutura simples usando alguns componentes do Zend sem problemas.

Confira !

Iznogood
fonte
3
Ele está tentando se afastar de uma estrutura.
WarmWaffles de
1
@WarmWaffles. É por isso que falei sobre o uso de partes do ZF. Certamente você não espera que o cara reinvente a roda para tudo.
Iznogood,
2
Iznogood tem um ponto muito bom. ZF é mais do que apenas uma estrutura. Eu descobri que os pacotes são extremamente úteis para fazer muitas tarefas comuns, e não há nada neles que o force a usar seus padrões MVC ou seus métodos de acesso ao banco de dados ou realmente qualquer coisa. Claro, você também pode escolher os módulos Pear.
Bob Baddeley,
2
É uma biblioteca sim que também ostenta um quadro. No entanto, ele está procurando por algo fácil de usar e, da última vez que verifiquei, o namespace de Zend está desordenado e é difícil de digitar. @Bob_Baddeley PEAR é uma boa sugestão
WarmWaffles,
@WarmWaffles Bem, para cada um, eu acho. Talvez você pudesse verificar novamente o Zend em 1.10.x agora e bem diferente do que dizer 1.8.
Iznogood,
2

Eu sei exatamente como você se sente. Comecei 4 ~ 5 anos atrás em PHP (eu vim de Delphi, rs), e comecei em PHP puro. O que eu tinha de volta era um "CMS Panel like" que apenas lia todos os campos das tabelas e criava o formulário. Depois de algum tempo eu alcancei de alguma forma o conhecimento de PHP Frameworks, tentei primeiro o CakePHP e não gostei, depois, entrei no Yii que na minha opinião é bastante intuitivo e fácil de usar (com seu gerador Gii é demais). Eu tentei Symfony, ZF2, Laravel, Yii2-Beta e alguns frameworks para RAD, mas ainda não estava me sentindo rápido o suficiente como antes dos frameworks.

Aconteceu que desenvolvi o meu próprio framework (Foi naturalmente, não exatamente que acordei um dia e disse "Vou criar um novo framework", aconteceu com o tempo). Eu sei que é uma má prática, má prática e movimento de "reinvenção da roda", MAS, agora eu desenvolvo meus projetos muito mais rápido (mais do que apenas PHP).

Como seu código é um MESS total, comecei há cerca de um mês a reformular meu framework, agora ele usa composer, segue regras comuns que existem entre os frameworks php, é MVC.

Por que estou reformulando? Porque se alguém precisar consertar um projeto meu, não será coisa de outro mundo.

Então eu entendo você.

Meu conselho é, prepare suas ferramentas (chame de framework, um aplicativo predefinido ou o que as pessoas chamam) e use-as da maneira que você se sentir melhor, mas ainda siga algumas regras comuns (como MVC, coisas "fáceis de modular" que você pode substituir em caso de quebra.

Ricardo Fiorani
fonte
1

Para segurança básica, uso um método de filtro personalizado que envolve minhas superglobais . Sua sintaxe precisa ser acostumada, mas é mais simples do que a API PHP filter_var () e não permite que você escorregue na limpeza:

 $_GET->text("inputvar") or $_POST->name["field"]

Também permitia o escape de $ _REQUEST-> sql () em linha. Mas para o trabalho do banco de dados, continue usando SQL parametrizado ou o DAL / ORM de sua escolha.

mario
fonte
Essa é definitivamente uma solução inteligente, mas não sei por que você acha que a API do filtro é complicada. Na verdade, acho que filter_input_array () é excelente. (Principalmente porque torna simples definir todas as entradas para um determinado tipo de solicitação em um lugar de forma razoavelmente declarativa. Nunca subestime o benefício desse tipo de coisa.)
ssokolow
@ssokolow: De fato, filter_input_array () é excelente para fazer isso de uma só vez. No entanto, já existe muita flexibilidade nas funções filter_ * e muitos parâmetros não são adequados. É por isso que acho que as pessoas estão evitando isso (embora seja tecnicamente uma boa solução).
mario
Possivelmente. Acho que parte do problema é que, além de ser uma chegada recente em um mundo onde muitas pessoas ainda têm livros PHP4 em suas prateleiras, é pouco anunciado, os documentos oficiais não são claros o suficiente e os documentos W3Schools que tendem a compartilhar os principais resultados do Google, não são abrangentes o suficiente.
ssokolow,
1

Eu fiz um estudo de um dia sobre o ToroPHP e achei muito bom. É uma estrutura minimalista voltada para aplicativos RESTful. Isso torna possível manter o código do lado do servidor modular, sem ter que lidar com o inchaço de qualquer estrutura.

Kinjal Dixit
fonte
1

Não sei o que está incomodando você, mas codeigniter é um ótimo framework. Tem uma boa documentação e, como muitas pessoas usam codeigniter, você encontrará toda a ajuda em sua documentação, fórum ou stackoverflow. Trabalhei em muitos frameworks ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), mas devo dizer que codeigniter tem a melhor documentação. Existem muitas coisas no codeigiter que são tratadas automaticamente e você não precisa se preocupar com segurança. Trabalhar no núcleo do PHP é como reinventar a roda. Bem, o mais importante é que passar de um núcleo para um framework exigirá muito do seu esforço, uma vez que você se acostumar com isso, você começará a amá-lo. Além disso, Ruby on Rails também é um ótimo framework, uma vez que você conhece seus prós e contras, você pode tem velocidade dupla.

Sachin Prasad
fonte
2
Passaram-se pouco mais de dois anos desde que postei isso e, na verdade, trabalhei com PHP puro por um tempo, mas desde então fiz a transição de volta para o PHP - você está exatamente certo, é incrivelmente fácil de usar. Minha configuração preferida atual é CI, phpActiveRecord para bancos de dados e Twig para modelos.
Alex C
Sim, phpActiveRecord parece bom. Você já experimentou o Laravel? ( laravel.com ) Acho que você descobrirá que tem o melhor de CI, phpActiveRecord e Twig, todos integrados por padrão. Eu mesmo sou um desenvolvedor CakePHP, mas estou olhando muito para o Laravel recentemente.
Simon East