控制器定义

控制器定义

控制器文件通常放在controller下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。

如果要改变controller目录名,需要在route.php配置文件中设置:

'controller_layer'    =>    'controllers',

如果使用的是单应用模式,那么控制器的类的定义如下:

<?phpnamespace app\controller;class User{    public function login()    {        return 'login';    }}

控制器类文件的实际位置则变成

app\controller\User.php

访问URL地址是(假设没有定义路由的情况下)

http://localhost/user/login

如果你的控制器是HelloWorld,并且定义如下:

<?phpnamespace app\controller;class HelloWorld{    public function hello()    {        return 'hello,world!';    }}

控制器类文件的实际位置是

app\controller\HelloWorld.php

访问URL地址是(假设没有定义路由的情况下)

http://localhost/index.php/HelloWorld/hello

并且也可以支持下面的访问URL

http://localhost/hello_world/hello

多应用模式

多应用模式下,控制器类定义仅仅是命名空间有所区别,例如:

<?phpnamespace app\shop\controller;class User{    public function login()    {        return 'login';    }}

控制器类文件的实际位置是

app\shop\controller\User.php

访问URL地址是(假设没有定义路由的情况下)

http://localhost/index.php/shop/user/login

控制器后缀

如果你希望避免引入同名模型类的时候冲突,可以在route.php配置文件中设置

// 使用控制器后缀'controller_suffix'     => true,

这样,上面的控制器类就需要改成

<?phpnamespace app\controller;class UserController{    public function login()    {        return 'login';    }}

相应的控制器类文件也要改为

app\controller\UserController.php

渲染输出

默认情况下,控制器的输出全部采用return的方式,无需进行任何的手动输出,系统会自动完成渲染内容的输出。

下面都是有效的输出方式:

<?phpnamespace app\index\controller;class Index{    public function hello()    {    	// 输出hello,world!        return 'hello,world!';    }    public function json()    {    	// 输出JSON        return json($data);    }    public function read()    {    	// 渲染默认模板输出        return view();    }}

控制器一般不需要任何输出,直接return即可。并且控制器在json请求会自动转换为json格式输出。

不要在控制器中使用包括dieexit在内的中断代码。如果你需要调试并中止执行,可以使用系统提供的halt助手函数。

halt('输出测试');

多级控制器

支持任意层次级别的控制器,并且支持路由,例如:

<?phpnamespace app\index\controller\user;class  Blog{    public function index()    {        return 'index';    }}

该控制器类的文件位置为:

app/index/controller/user/Blog.php

访问地址可以使用

http://serverName/index.php/user.blog/index

由于URL访问不能访问默认的多级控制器(可能会把多级控制器名误识别为URL后缀),因此建议所有的多级控制器都通过路由定义后访问,如果要在路由定义中使用多级控制器,可以使用:

Route::get('user/blog','user.blog/index');