我想在每个控制器中从url中删除控制器名称吗?

时间:2015-08-21 07:27:46

标签: php codeigniter

我想从每个控制器中删除控制器名称是否可以在路径文件中执行此操作。对于单个控制器,如果我想在项目中使用所有控制器,它对我来说很好用吗?

$route['default_controller'] = 'user';
$route['(:any)'] = "user/$1";
$route['(:any)/(:any)'] = "user/$1/$1";
$route['(:any)/(:any)/(:any)'] = "user/$1/$1/$1";


$route['(:any)'] = "grant/$1";
$route['(:any)/(:any)'] = "grant/$1/$1";
$route['(:any)/(:any)/(:any)'] = "grant/$1/$1/$1";

当我尝试这个时它不适合我。

3 个答案:

答案 0 :(得分:0)

试试这个

您可以尝试其中任何一种

// url could be yourdomain/imran
$route['(:any)'] = 'profile/index/$1';
// url could be yourdomain/10
$route['(:num)'] = 'profile/index/$1';
// url could be yourdomain/imran10
$route['([a-zA-Z0-9]+)'] = "profile/index/$1";

你的课可能看起来像这样

class Profile extends CI_Controller {

    public function index($id)
    {
        // $id is your param
    }
}

更新:(小心)

请注意,如果您有一个班级Someclass,并且使用url yourdomain/Someclass,那么如果您有profile/index/$1,则会将其路由至$route['(:any)']$route['([a-zA-Z0-9]+)']

答案 1 :(得分:0)

您提供的代码示例不起作用,因为规则完全相同,例如:

$route['(:any)'] = "user/$1";
$route['(:any)'] = "grant/$1";

两者之间没有区别,那么应用程序将如何知道将请求路由到何处。它只会选择匹配所有请求的第一条路径(用户控制器)

除非(如@syed)尝试过上述解释,否则您要实现的目标是不可能的,至少在网址的次要部分存在差异。

例如,任何数字ID都会传递给用户控制器。

// url could be yourdomain/10
$route['(:num)'] = 'user/index/$1';

任何基于文本的内容都会传递给不同的控制器

// url could be yourdomain/imran
$route['([A-z]+)'] = "name/index/$1";

等等。

答案 2 :(得分:0)

我得到了答案

public class TimeTrackerAdapter extends BaseAdapter {
    public ArrayList<TimeRecord> times=new ArrayList<TimeRecord>();
    @Override
    public int getCount() {
        return times.size();
    }

    public TimeTrackerAdapter()
    {
        times.add(new TimeRecord("12:30","this is the best"));
        times.add(new TimeRecord("2:30","I need this"));
    }
    @Override
    public Object getItem(int position) {
        return times.get(position);
    }

    public void addTimeRecord(TimeRecord timeRecord)
    {
        times.add(timeRecord);
        notifyDataSetChanged(); 
    }
    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        if(view==null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            view = inflater.inflate(R.layout.menu_layout, parent, false);
        }
        Button button=(Button) view.findViewById(R.id.delete_entry);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                times.remove(position);
                notifyDataSetChanged(); 
            }
        });
        TextView timeView=(TextView) view.findViewById(R.id.time_textView);
        TextView noteView=(TextView) view.findViewById(R.id.note_TextView);
        TimeRecord time=times.get(position);
        timeView.setText(time.getTime());
        noteView.setText(time.getNote());
        return view;
    }
}

以静态方式使用另一个控制器

$route['(:any)'] = "user/$1"; //this is dynamically for user controller

这项工作对我来说很好。我希望这是可能的动态