Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 26
  1. #11
    Sono daccordo con te col fatto che le prime necessità da sviluppare in un framework sono:
    [list=1][*]Gestione Request/Response[*]Intelli Autoloader[*]Gestione Permessi/Gruppi[*]Gestione Errori[*]Gestione Eventi (da allacciare al discorso Ajax)[*]Gestione Filesystem[*]Gestione Database[/list=1]

    offrire cioè le basi sui cui tutto può poggiarsi, fornire quindi anche classi per gestire collezioni di oggetti, iterazioni.

    Ma credo che sarebbe bene prevedere una gestione di:
    [list=1][*]Identificazione richieste ajax (anche selettive su parti di pagina)[*]Gestione dei template (per dividere quello che sto progettando da come gli altri lo useranno)[*]Gestione plugin (per permettere agli altri di espandere cose che già esistono con funzionalità nuove; ad es. nuove funzioni per il template, nuove funzioni di manipolazione stringhe, oggetti o qualsiasi altra cosa)[*]Gestione contenuti html (creazione form, tabelle e altri elementi)[/list=1]

    Ovvio che alla base di tutto ci devono essere solide classi per gestire tante cose, una struttura ereditaria buona.


    Io sto cercando di ordinare in mente le mie idee sui dubbi del pattern MVC; Lo ridurrei a HV (Handle, View) e l'ideale sarebbe creargli una struttura in grado di rintracciare e gestire richieste Ajax per simulare maggiormente le funzionalità offerte da una reale applicazione "non web".

    Se si gestisse correttamente ed in sicurezza questo aspetto secondo me si potrebbe avere un qualcosa di molto buono come interazione con l'utente.

    P.S. nella tua struttura ad albero (delle cartelle) leggo "mappers" che funzione hanno?
    Administrator of NAMDesign.Net

  2. #12
    nella tua struttura ad albero (delle cartelle) leggo "mappers" che funzione hanno?
    in pratica nella mia applicazione
    gestiscono le chiamata al DB
    nel model vi è la logica dell'applicazione
    in questo modo se qc cambia devo
    cambiare solamente il mapper e
    non la logica

    in design pattern significa creare
    la logica del db nell'applicazione

    http://books.google.com/books?id=qVL...&hl=it#PPP1,M1

    pag 278

    Identificazione richieste ajax (anche selettive su parti di pagina)
    ho cercato
    di implementare un metodo che mi permetta
    di utilizzare la stessa richiesta sia modello
    classico che ajax e non è per niente semplice
    utilizzare lo stesso bootstrap
    (punto di ingresso di solito la index)

    ho isolato il problema

    Codice PHP:
    public function isXhr(){          return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest');      } 
    riuscendoci sola a meta
    la mia intenzione era metterlo
    nel controller ma per adesso
    va ripetuto in tutti i commands

    Gestione Request/Response Intelli Autoloader Gestione Permessi/Gruppi Gestione Errori Gestione Eventi (da allacciare al discorso Ajax) Gestione Filesystem Gestione Database
    in via di massima sono d'accordo.


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #13
    Codice PHP:
    /**
     * You must set up a (app_)controllers_Index class
     * Revise for factory controller.
     */
    class w_FrontController {
        
    /**
         * @var w_http_Request
         */
        
    protected $requestnull;
        
    /**
         * @var string defaultController 
         * @default controllers_Index 
         */
        
    protected $defaultController'controllers_Index';
        
    /**
         * @var string defaultCommand 
         * @default commands_Read 
         */
        
    protected $defaultCommand'commands_Read';
        
    /**
         * @var reflection w_controller 
         */
        
    protected static $reflectionControllernull;
        
    /**
         * @var reflection defaultController
         */
        
    protected static $reflectionDefaultControllernull;
        
        public function 
    __construct(w_http_Request $request){
            
    $this->request$request;
            if(!
    self::$reflectionDefaultController){
                try{
                    
    self::$reflectionController= new ReflectionClass('w_Controller');
                    
    /* I'm looking for troubles for the controllers_Index class only*/
                    
    self::$reflectionDefaultController= new ReflectionClass('controllers_Index');
                    
    //self::$reflectionDefaultController->getProperty('allowCommand');
                    //var_dump(self::$reflectionDefaultController->getProperty('allowCommand'));
                    //var_dump(self::$reflectionDefaultController->getStaticPropertyValue('allowCommand'));
                
    }
                catch(
    ReflectionException $e){
                    throw new 
    Exception($e->getMessage().' you must set up your controllers_Index');
                }
            }
        }
        public function 
    run(){
            
    $routeParts$this->request->parseQueryString();
            
    $controller$this->getController($routeParts);
            
    $this->checkController($controller);
            
    $controllerNamestrtolower($controller->getName());
            
    $defaultCommand$controller->getDefaultCommand();
            
    $allowCommands$controller->getAllowCommands();
            
    $comand$this->getCommand($routeParts,$controllerName,$defaultCommand,$allowCommands);
            
    $comand->execute();
            
    $controller->run();
            
    //var_dump();
        
    }
        protected function 
    getController(array $routeParts){
            if(!isset(
    $routeParts[0]) || empty($routeParts[0])){
                
    /* Controller have parameters ? Factory ?*/
                
    return self::$reflectionDefaultController->newInstance();
            }
            try{
                
    $controllerName'controllers_'.ucfirst($routeParts[0]);
                 
    $reflectionClass = new ReflectionClass($controllerName);
                 if(
    $reflectionClass->isSubclassOf(self::$reflectionController)){
                    return 
    $reflectionClass->newInstance();
                }
                return 
    self::$reflectionDefaultController->newInstance();
            }
            catch(
    ReflectionException $e){
               return 
    self::$reflectionDefaultController->newInstance();
            }
        }
        protected function 
    getCommand(array $routeParts,$controllerName,$defaultCommand,array $allowedCommands){
            
    $defaultCommand'commands_'.$controllerName.'_'.$defaultCommand;
            
            if(!isset(
    $routeParts[1]) || empty($routeParts[1])){
                return new 
    $defaultCommand();
            }
            if(
    in_array($routeParts[1],$allowedCommands)){
                
    $command'commands_'.$controllerName.'_'.$routeParts[1];
                return new 
    $command();
            }
            return new 
    $defaultCommand();
            
        }
        protected function 
    checkController(w_Controller $controller){
            
    $allowedCommands$controller->getAllowCommands();
            if(empty(
    $allowedCommands)){
                throw new 
    Exception($controller->getName().' must have a allowed command at least');
            }
        } 
        
    }
    // IL MODELLO PER IL CONTROLLER
    abstract class  w_Controller 
    {
        protected 
    $allowCommands= array();
        abstract public function 
    run();
        abstract public function 
    getDefaultCommand(); 
        abstract public function 
    getName();
        public function 
    getAllowCommands(){
            return 
    $this->allowCommands;
        }

    ancora un po pasticciato occorre
    refactoring w_FrontController::getCommand
    probabilmente metterò come parametro
    il controller.


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #14
    il controller nel mio framework non lo metto, o meglio lo faccio fare a PHP pulito e bello così come è: a scrivere uno switch che ti prenda le chiamate e le smisti un programmatore PHP ci mette due secondi a farlo

    qualsiasi modello si scelga poi per smistare le richieste comunque si pongono deipaletti al programmatore e il mio obiettivo è eliminarli i paletti, non metterli

    i template sono su XSL, se proprio vuoi...

  5. #15

    Re: try/catch vs class_exist ....

    Originariamente inviato da whisher
    Ciao.
    Secondo voi è meglio fare in questo modo
    Codice PHP:
    if(class_exists($controllerName)){
            
    $reflectionClass = new ReflectionClass($controllerName);
            
    $parent$reflectionClass->getParentClass();
            if(!
    $reflectionClass->isSubclassOf(new ReflectionClass($parent->getName()))){
                    
    $controller= new $this->defaultController();    
        } 
    Ma il secondo controllo che utilità avrebbe?
    Ti fai dare il parent di una classe e poi controlli se la classe è ereditata dal suo parent? :master:

    E comunque quei controlli si possono fare usando solo class_exists() e is_subclass_of() senza scomodare le reflection.

  6. #16
    ps: la reflection mangia un sacco di risorse
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #17

    Re: Re: try/catch vs class_exist ....

    Originariamente inviato da skidx
    Ma il secondo controllo che utilità avrebbe?
    Ti fai dare il parent di una classe e poi controlli se la classe è ereditata dal suo parent? :master:

    E comunque quei controlli si possono fare usando solo class_exists() e is_subclass_of() senza scomodare le reflection.
    skidx quanto tempo
    well caught !
    si hai ragione ho corretto
    adesso il parent lo setto io.

    Codice PHP:

                    self
    ::$reflectionDefaultController= new ReflectionClass('controllers_Index');
    if(
    $reflectionClass->isSubclassOf(self::$reflectionController)){
                    return 
    $reflectionClass->newInstance();
                } 

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #18
    Originariamente inviato da andrea.paiola
    il controller nel mio framework non lo metto, o meglio lo faccio fare a PHP pulito e bello così come è: a scrivere uno switch che ti prenda le chiamate e le smisti un programmatore PHP ci mette due secondi a farlo
    qualsiasi modello si scelga poi per smistare le richieste comunque si pongono deipaletti al programmatore e il mio obiettivo è eliminarli i paletti, non metterli
    D'accordo che metti dei paletti
    ma imho è meglio un paletto che uno
    switch ce la vorrai dare un po di logica
    al FW o no ?

    Ad ogni modo penso di limitare i paletti
    con una strategia del tipo:

    Codice PHP:
    interface w_http_BuildQueryString{
        
    /**
         * @return mixed false on failure
         */
        
    public function get();    
    }
    /**
     * Get the really query string.
     * At the moment manage with a single get
     * key 'qs' also set in the .htaccess file 
     * RewriteRule ^([a-zA-Z0-9_\-\/]+)$ index.php?qs=$1 
    */
    class w_BuildQueryString implements w_http_BuildQueryString
    {
        protected 
    $getKey'qs';
        protected 
    $pattern'#^[a-zA-Z0-9_\-\/]+$#';
        public function 
    __construct(){}
        public function 
    get(){
            if(
    filter_has_var(INPUT_GET$this->getKey)){
                
    $options= array('options'=>array('regexp'=>$this->pattern));
                return 
    filter_input(INPUT_GET$this->getKeyFILTER_VALIDATE_REGEXP$options);
            }    
            return 
    false;
        }
    }
    nella request
    public function __construct(w_http_BuildQueryString $queryString=null{
            
    $this->queryString $queryString $queryString : new w_BuildQueryString();
            
    $this->setRoot();
        }
    public function 
    parseQueryString(){
            
    $queryString$this->queryString->get();
            if(!empty(
    $queryString)){
                
    $queryStringtrim($queryString,'/');
                return 
    explode("/",$queryString);
            }
            return array();
        } 

    i template sono su XSL, se proprio vuoi...
    vorrei riuscire ad ottenere una sorta di
    crud
    svincolato dalla rappresentazione dei dati (view)
    recuperando i dati in array od oggetti
    poi quando ne ho voglia gli do forma .


    Sarebbe utile documentare le proprie
    idee con un minimo di pseudo-codice
    tanto per avere un idea e basare i
    vari commenti su qc di concreto.





    [EDIT]
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  9. #19
    Originariamente inviato da daniele_dll
    ps: la reflection mangia un sacco di risorse
    potresti postare qc links
    perchè in tutti i vari codici
    che ho spulciato viene
    utilizzata sovente.


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #20
    codice:
    if(class_exists($controllerName)){
            $reflectionClass = new ReflectionClass($controllerName);
            $parent= $reflectionClass->getParentClass();
            if(!$reflectionClass->isSubclassOf(new ReflectionClass($parent->getName()))){
                    $controller= new $this->defaultController();    
        }
    invece di usare la reflection potresti sfruttare
    http://it2.php.net/instanceof
    http://it2.php.net/is_subclass_of
    http://it2.php.net/get_parent_class

    e cosi via, evitando di utilizzare la reflection

    per il mio cms la utilizzavo e ho smesso di utilizzarla ed ho recuperato uno sproposito in termini di performance
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.