当前位置:首页 > Laravel > Laravel框架之基础控制器介绍与使用

Laravel框架之基础控制器介绍与使用

知识点

1.控制器的功能 2.定义控制器 3.访问控制器 4.单行为控制器 5.依赖注入


1.控制器的功能

  • url请求最终将会被定位到一个函数/方法

  • 路由目标中的闭包,完全可以用控制器中的方法替换

  • 控制器是一个特殊的类,可以有很多的方法,极大的扩展了路由的功能

  • 明确: 控制器并不是必须的,其功能完全可以用路由闭包来解决

  • 总结: 控制器拥有比闭包更加强大的业务处理能力


2.定义控制器

  • 参考示例: app/Http/Controllers/Controller.php

  • 命名空间:app/Http/Controllers, 与目录路径完全一致

  • 可以创建模块目录,来管理多个功能类似的控制器类,例如:admin admin/IndexController.php, admin/AddController.php

  • 可继承控制器基类: App\Http\Controllers\Controller


3.访问控制器

  • 必须针对控制器中的方法创建路由,才可以进行访问

  • 路由表达式与路由地址,必须与该方法在控制器类中的声明完全一致

  • Route::get('index/index/{course?}','admin\Index@index');

  • 控制名可以使用Controller做后缀,会更加直观


4.单行为控制器

  • 如果业务极其简单,可以使用单行为控制器

  • 即直接将控制器类当成方法进行调用

  • 类内部是通过魔术方法: __invoke()实现


5.依赖注入

  • Laravel使用容器技术来管理应用的所有依赖对象

  • 依赖注入可以有效的解决多个对象调用之间的代码耦合问题

  • 将当前方法依赖的外部对象,通过参数的方式注入到当前应用中

  • 依赖注入点:

    • 构造方法: 注入对象可被类中其它方法所共享

    • 普通方法: 注入对象仅限当前方法使用


展示源码

1.控制器定义

<?php
namespace App\Http\Controllers\admin;
class Index
{
    public function index($course='laravel')
    {
        return view('admin.index.index',['course'=>$course]);
    }
}

2.对应模板文件:

  • 制作对应的视图模板: resources/views/admin/index/index.blade.php

<h2>我在php中文网学习 <span style="color:red">{{ $course }}</span> </h2>

3.单一行为控制器:

<?php
namespace App\Http\Controllers\admin;

class Single
{
    public function __invoke()
    {
       return '<h2>单行为控制器执行结果</h2>';
    }
}

4.Index.php控制器完整源码

<?php
namespace App\Http\Controllers\admin;
// 目前我们的控制器功能很简单,就不必这么麻烦了
use Illuminate\Support\Facades\Request;

class Index
{
    public function index($course='laravel')
    {
        return view('admin.index.index',['course'=>$course]);
    }

    protected $request = null;
    // 构造方法注入
    public function __construct(Request $request)
    {
        $this->request = $request;
        var_dump($this->request);
        dump($this->request);
    }

    public function show(Request $request)
    {
        dump('show(): ',$request);
    }
}

5. 路由文件: web.php

<?php
use Illuminate\Support\Facades\Route;

// 访问admin.index.index
Route::get('admin/index/{course?}','admin\Index@index');

// 访问单行为控制器,控制器当方法直接访问
Route::get('admin/single', 'admin\Single');

// 普通方法依赖注入
Route::get('admin/show', 'admin\Index@show');

免责声明:部分文章信息来源于网络及网友投稿,本网站只负责文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性,如本网站文章和转稿涉及版权等问题,请作者及时联系本站,我们会尽快处理。烛光驿站欢迎捐赠赞赏

权益
版权所有:© 2018 www.sjzphp.cn
网站备案:冀ICP备17012435号-2
联系邮箱:guotaoi@foxmail.com