控制器

作者: 顾庭燎 | 来源:发表于2019-01-21 22:46 被阅读0次

控制器

  • 简单的说,控制器本质上是在一个位置将一个或多个路由有逻辑组织在一块的类。控制器往往会将类似的路由组合在一起,特别是如果应用程序是按照传统CRUD格式构造的,在这种情况下,控制器可以处理那些可对特定资源执行的所有操作

  • 控制器的主要任务是捕获HTTP请求,并将这些请求传递给应用程序的剩余部分

  • 生成控制器

    php artisan make:controller cname
    

    接下来就会在app/Http/Controllers中创建一个名为cname.php的新文件

  • 控制器的命名空间

    为控制器创建一个路由

    Route::get('/', 'cname@fun');
    

    在上面这个路由中我引用了一个具有完全限定类名的控制器APP\Http\Controllers\cname但是只使用了类名cname,这是因为,在默认情况下,Laravel被设置为在该命名空间中寻找控制器

  • 通用控制器方法示例

    • 返回视图

      public function index() {
        return view('fun')->with('variable', Task::all());
      }
      

      该控制器方法会加载resouces/views/fun.php视图,并将其通过一个名为variable的变量进行传递,其中包含Task::all()Eloquent方法的结果

    • 获取用户输入

      此方法的作用是从用户哪里获取输入内容并对其进行操作

      • 首先,快速实现绑定

        //绑定基本的表单操作
        //route/web.php
        Route::get('tasks/create', 'Taskscontroller@create');
        Route::post('tasks', 'Taskscontroller@store');
        

        绑定tasks/create的GET操作(显示表单)和tasks/的POST操作(创建一个新的任务并进行POST操作时提交到tasks/)。假设控制器中的create()方法只显示一个表单,store()方法的使用如下所示

        //常见的表单输入控制器方法
        //Taskscontroller.php
        public function store() {
            $task = new Task;
            $task->title = Input::get('discription');
            $task->save();
            
            return redirect('tasks');
        }
        

        该示例使用了Eloquent模型和redirect()函数,创建了一个新的Task,从用户输入中提取数据并进行保存,然后重定向到显示所有任务(task)的页面。

        从POST中获取用户输入有两种主要方式:这里使用了Input facade及请求对象(request object)

    • 将依赖注入控制器

      Laravel的facade代表Laravel代码库中最有用的类的简单界面,可以获取当前相关请求,用户输入,会话和缓存等信息,所有的控制器方法都是由Laravel的容器进行解析的,这意味着所有的指定容器都知道如何解析的信息都将被自动注入

      如果希望拥有一个Request对象的实例而不是用facade实现,只需要在方法参数中指定Illuminate\Http\Request就行,如下示例

      public function store(\Illuminate\Http\Request $request) {
          $task = new Task;
          $task->title = $request->input('title');
          $task->description = $request->input('description');
          $task->save();
          
          return redirect('tasks');
      }
      
  • 资源控制器

    • Laravel对传统REST/CRUD控制器的所有路由都有一些约定

      HTTP动词 URL 控制器方法名称 具体名字 描述
      GET tasks index() tasks.index 显示所有任务
      GET tasks/create create() tasks.create 显示创建任务表单
      POST tasks store() tasks.store 从创建任务表单中接受表单提交
      GET tasks/{task} show() tasks.show 显示一个任务
      GET tasks/{task}/edit edit() tasks.edit 编辑一个任务
      PUT/PATCH tasks/{task} update() Tasks.update 从编辑任务表单中接受表单提交
      DELETE tasks/{task} destroy() tasks.destroy 删除一个任务
    • 绑定资源控制器

      • 以上是在Laravel中使用的传统路由名称,但我们不必为每一个控制器方法生成路由,而可以使用一种叫“资源控制器绑定”的方法

        //routes/web.php
        Route::resource('tasks', 'TasksController');
        

        这样就可以自动将该资源上的所有路由绑定到指定控制器的相应方法上,他也会适当地命名这些路由,例如,tasks资源控制器上的index()方法将被命名为tasks.index

相关文章

  • iOS同时Dismiss两个控制器

    由A控制器present B控制器 再由B控制器present C控制器 在C控制器的时候 要求返回到A控制器,就...

  • 关于生命周期

    从A控制器 push B控制器 从B控制器 pop 回 A控制器

  • 浅谈控制器跳转(模态、push)

    情景:控制器A present: 控制器B present:控制器C:切换根控制器:控制器D 问题:如果 在C跳...

  • UIControl

    UIControl 控制类 主要学习了分段控制器、滑块控制器、页码控制器、开关、步进控制器 一、分段控制器UISe...

  • iOS导航返回指定控制器

    导航控制器原理: 导航控制器:是一个容器视图控制器,专门用来管理其他的视图控制器,导航控制器管理的视图控制器在导航...

  • 模态视图跳转

    需求:A视图控制器中presentB视图控制器,B视图控制器再presentC视图控制器。最后从C视图控制器直接返...

  • 01-父子控制器

    1.1 当A控制器的View添加到B控制器的View上,那么A控制器必须成为B控制器的子控制器(如果2个控制器的V...

  • 父子控制器相关

    父子控制器:导航控制器,UITabBarViewController等。 父子控制器的设计原理:a控制器的View...

  • 7. Jmeter-逻辑控制器

    逻辑控制器介绍与使用 如果(if)控制器 事物控制器 循环控制器 while controller critica...

  • iOS开发中遇到的问题总结(持续更新中...)

    1.两个控制器之间跳转,返回时,刷新前面一个控制器 当控制器A跳转到控制器B,如果需要在从控制器B返回A控制器时...

网友评论

      本文标题:控制器

      本文链接:https://www.haomeiwen.com/subject/rsqkjqtx.html