拆分URL并在MVC中传递部件

时间:2011-12-27 15:26:01

标签: php model-view-controller

我正在尝试创建一个MVC应用程序,目前正在处理Bootstrap文件。我获取URL并将其分解然后将部件分配给Controller Method和Method参数。但是,我找不到将多个参数传递给方法的方法。

mysite的/ NEWUSER /登录/ USER_NAME / user_pass

newuser -> Controler of the site
login   -> currently used method

user_name -> first argument
user_pass -> second_argument

例如

$url = "mysite/newuser/login/user_name/user_pass";

$path = expload('/',$url);


$this->controler = $path[0];
$this->method    = $path[1];

对于参数,我创建了第二个数组:

// Set the substring path as method properties
if (isset($path[2])) {

    $this->url_sub_path = $path[2];

    $sub_path = explode('/', $this->url_sub_path);
     if (isset($sub_path)) {

         $this->model_properties = $sub_path;

当我为控制器分配一套

$site_controler = $this->controler;
include CONTROLER.$site_controler . '.php';

$new_instans = new $site_controler();

但问题在于:

$site_method = $this->model;
$new_instans->{$site_method}($this->model_properties);

$this->model_properties是数组

如果函数是:

public function login($user_name,$user_pass){
    // some code
}

我需要传递它们是Array的url属性,我的函数中有两个变量 我们的想法是将数组转换为变量

或者你可以传递一个关于如何将参数从URL传递给我的模型的想法

2 个答案:

答案 0 :(得分:0)

尝试此功能:http://www.php.net/manual/en/function.call-user-func-array.php

call_user_func_array ($new_instans->{$site_method} , $this->model_properties )

答案 1 :(得分:0)

如果你说$this->model_properties是一个数组,你可以做两件事之一。

案例1:维护函数声明,并在调用函数之前访问数组的元素。

login()函数(维护它的声明):

public function login($user_name,$user_pass){
 // some code
}

要调用该函数,请执行以下操作:

$array = $this->model_properties;
$param1 = $array[0]; //The numeric index may vary, depending on how this array was populated
$param2 = $array[1];
$new_instans->{$site_method}($param1, $param2);

案例2:更改函数声明以接收数组,并访问函数内部的数组元素。

login()函数,更改声明:

public function login($arrayParams){
    //Access the parameters like this
    $param1 = $arrayParams[0]; //The numeric index may vary, depending on how this array was populated
    $param2 = $arrayParams[1];

    //The rest of your code...
}

要调用该函数,只需传递数组,就像你已经在做的那样:

$new_instans->{$site_method}($this->model_properties);

无论您选择哪种版本来解决问题,重要的部分都是:

$param1 = $array[0];
$param2 = $array[1];

在这里,您将索引01的数组元素的内容分配给变量,允许您独立处理这些值。