最适合入门的Laravel初级教程(四)控制器Controller

路由可以分发请求;
路由中还可以引入 html 页面;
我们可以在 route/web.php 中搞定一切了;
但是如果把业务逻辑都写入到路由中;
那路由将庞大的难以维护;
于是控制器就有了很明显的存在价值;
把业务逻辑写在控制器中;
路由只负责转发请求到指定的控制器即可;

ok;那我们开始创建控制器;
啥?你要手动创建文件?
no;既然用上了现代话框架;
必须得用有点逼格的方式干这苦力活了;

好了;下面插播一段 artisan 的内容;
laravel 是一个现代话框架;
它对命令行有着非常好的支持;
artisan 就是 laravel 的命令行接口;
就是根目录下的 artisan 文件;
laravel artisan
我们可以把它理解为命令行级的单入口文件;
跟 index.php 文件的使命一样;
所有的命令行都从它这走;
所以如果想使用命令行;
就需要 cd 到项目的根目录下;
或者手动指定一长串路径;
啥?还有人问什么 cd ?
好吧;还好我有扫盲文章 插播一篇windows下git bash命令行使用的文章
起手式就是 php artisan
在命令行中以 php 开头意思是用 php 来执行某个文件;
php index.php 意思就是使用 php 的命令行模式运行 index.php ;
命令行下是可以不需要文件后缀就能识别的;
所以根目录下的 artisan 文件并没有带上 .php ;

命令行主要有两个方向的应用;
第一是生成文件;
第二是执行任务;
我们马上就要用它生成控制器文件;

php artisan make:controller ArticleController

如果人品正常;
那么会生成一个 app/Http/Controllers/ArticleController.php 文件;
打开是这个样子的;

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ArticleController extends Controller
{
    //
}

不但自动创建了文件;
而且还定义好了命名空间;
继承好了父级控制器;
我们直接写增删改查的方法就可以了;

ok;说干就干吧;
啥?你要手动写方法?
no;既然用上了现代话框架;
必须得用有点逼格的方式干这苦力活了;
来给上面的命令行加个--resource选项;

php artisan make:controller ArticleController --resource

如果直接运行的话是会报错的;
提示 Controller already exists!
因为我们刚已经创建过 ArticleController了;
所以我们需要先把 app/Http/Controllers/ArticleController.php 文件删掉再运行;
如果人品正常;
那么会再次生成一个 app/Http/Controllers/ArticleController.php 文件;
打开是这个样子的;

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ArticleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

怎么样?
惊不惊喜?
开不开心?
有木有被惊die了
不但增删改查的方法都定义好了;
连注释都给写好了;

这其实是按 RESTful 规范生成的格式;
除了 GET POST 它还包含了一大堆请求方式;
PUT 、 PATCH 、 DELETE 、HEAD 、OPTIONS;
也就是说 Route:: 后面还可以跟上面这些方法;

Route::put('article', function () {
    return view('article');
});
// ...

RESTful 是本篇文章的一个扩展题;
童鞋们可以搜索了解下;
如果被概念搞的有点懵;
没关系;
留给以后慢慢搞;
现在咱只用 GET POST 足够学习了;

ok;我们开始在方法中写业务逻辑吧;
啥?你要手动写代码?
废话;不然用脚动写?
别看了;
下面没惊喜了;

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共18条评论
白俊遥博客

:请问laravel6有没有不用注入Request的方式获取请求数据? 或者不在controller里取得个有效的实例化Request比如把Request封到自己的类里, 方便测试, Request还是好用的...想在其它地方(非controller里) 实例化一个有效的Request

2019-12-21 15:56:22 回复

白俊遥博客 白俊遥博客

云淡风晴 :可以用 request() 函数;比如说 request()->input('name') ;

2019-12-21 17:07:38 回复

白俊遥博客

初音未来 :啊啊

2019-12-05 09:18:47 回复

白俊遥博客

bentai :最近在复现laravel-bjybolg  看到在控制器中做update 操作中 依赖注入ORM, 比如这个public function update(Store $request, Article $articleModel, ArticleTag $articleTagModel, $id) ,我直接use 过了,已经可以直接使用了为什么还要这样写?

2019-12-04 17:49:53 回复

白俊遥博客 白俊遥博客

云淡风晴 :两种方式都可以; 

2019-12-21 17:08:30 回复

白俊遥博客

小雨的叶香伦 :白兄还是这么皮白俊遥博客

2019-06-27 15:31:51 回复

白俊遥博客

_leeker :不错不错

2019-04-01 14:18:26 回复

白俊遥博客

:社会了。

2018-06-21 11:51:09 回复

白俊遥博客

大海 :谢谢大佬

2018-05-28 17:08:22 回复

白俊遥博客

点杠 :白大侠,请问Laravel里类似ThinkPHP的$this->success() 和$this->error()该怎么写

2018-03-25 20:21:14 回复

白俊遥博客

████████████ 白俊遥博客最后几句笑出声

2018-03-07 22:37:18 回复

白俊遥博客

rk :博主,读到此,不得不评论一下了。终于明白“优雅”的意思是工匠帮你完成那些手工编程的苦逼活,也就是博主说的现代化的Laravel要逼格高一点,装装逼,让童鞋们吃惊到傻眼。事实上,这就好比DW自动生成代码……那些年前端工程师不懂编程就可视化做网页一样;或者更Django映射生成控制器一样,只见黑客般代码一行行自动在黑屏幕上翻滚,逼格都高得受不了……

2018-02-03 17:12:17 回复

白俊遥博客 白俊遥博客

云淡风晴 :你看到了优雅的表面;深入使用可得其精髓;

2018-02-05 00:27:54 回复

白俊遥博客

蓝图 :学习了,刚加入了帅白的技术群

2018-01-26 12:24:58 回复

白俊遥博客 白俊遥博客

云淡风晴 :多谢支持;

2018-02-05 00:28:02 回复

白俊遥博客

luke :666 赞一个 学习了

2018-01-06 17:22:03 回复

白俊遥博客

北丰 :很皮的程序员,语言秀的飞起啊

2018-01-03 10:22:09 回复

白俊遥博客

师丨爷 :签到

2017-12-31 11:34:12 回复