Struttura URL MVC con parametri URI

1

Durante la creazione di percorsi per l'applicazione Web MVC ho visto due modi possibili per passare variabili a un metodo di controller:

Con il primo approccio la variabile viene passata a un parametro del metodo controller e utilizzata come tale:

1a. http://domain.com/controller1/method1/variable1

1b. class controller1 extends main_controller(){

      function method1($var1){

         echo $var1; //prints "variable1"

      }

    }

Il prossimo approccio utilizza i parametri URI e consente di visualizzare il nome delle variabili passate nell'URL:

2a. http://domain.com/controller1/method1/variable1/34/variable2/56

2b. class controller1 extends main_controller(){

        function method1(){

            //split the uri into an array using framework function
            $uri = $this->uri_to_assoc()

            //call the uri variables as array indexes
            echo $uri['variable1']; //prints "34"

            echo $uri['variable2']; //prints "56"

        }         

    }

La mia domanda riguarda quando utilizzare un caso rispetto all'altro? La mia ipotesi sarebbe che l'approccio n. 2 sarebbe più per i servizi web RESTful mentre l'approccio n. 1 sarebbe per un'applicazione web che servirà html e scansionata dai motori di ricerca?

    
posta nullReference 21.01.2015 - 17:57
fonte

1 risposta

0

Direi che dipende dalle tue esigenze.

  • Hai bisogno di conoscere il nome della variabile?
  • Vuoi che le variabili (multiple) vengano passate in un ordine specifico?
  • La quantità di variabili aumenterà (come i filtri)?
  • Ha bisogno di essere parte dell'URL? (cioè per ragioni SEO)

Per lo più conosco due varianti (diverse dagli esempi che hai fornito), e nelle applicazioni che scrivo le prendo in questi modi:

1. Nell'URL: www.youtube.com/brandname

Usando un'espressione regolare, predefinisco i nomi delle diverse parti nell'URL. E quindi la loro posizione è (principalmente) fissa.

/(?<id>[0-9])/(?<slug>[a-z0-9])/

Quindi puoi passare questi nominati o senza nome al controller. Come non importa così tanto, come già sai già.

function channel($id, $slug)

2. Nella richiesta GET / POST: www.google.com/?q=foo&client=bar&channel=baz& ...

Accedi semplicemente a GET / POST direttamente.

function search() {
    if (empty($_GET['q']) || invalid($_GET['q'])) {
        // return to user
    }

    $query = $_GET['q'];
}
    
risposta data 23.01.2015 - 22:19
fonte

Leggi altre domande sui tag