课程内容

介绍

控制器,是我们业务逻辑的最重要地方,必须需要了解下控制器的和路由的使用。

命名空间

默认情况下:RouteServiceProvider 已经给了前缀

Route::get('foo', 'Photos\AdminController@method');

控制中间件

class UserController extends Controller
{
    /**
     * 实例化一个新的控制器实例.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');

        $this->middleware('log')->only('index');//只检测首页

        $this->middleware('subscribed')->except('store');//store 这个不需要检测
    }
}

有时候我们在中间件里面需要判断是否登录了没有,需要进行跳转或者是给出错误信息,这个时候需要用到匿名方法,比如你要在一开始就注册登录的账号user

use Auth;
class UserController extends Controller
{
    public $user;
    /**
     * 实例化一个新的控制器实例.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(function ($request, $next) {
            // 把登录账号给user
            $this->user=Auth:user();
            return $next($request);
        });

        //$this->user=Auth:user(); //在外面是不可以的,获取不到的,必须在中间件执行后
    }
}

资源控制器

快速生成7个方法

//artisan 
php artisan make:controller PhotoController --resource --model=Photo
// 路由使用
Route::resource('photos', 'PhotoController');

排除和只需要部分

Route::resource('photos', 'PhotoController')->only([
    'index', 'show'
]);

Route::resource('photos', 'PhotoController')->except([
    'create', 'store', 'update', 'destroy'
]);

多个用数组形式

Route::resources([
    'photos' => 'PhotoController',
    'posts' => 'PostController'
]);

资源路由参数,有时候我们需要给一个参数,比如类型之类的,资源参数

Route::resource('users', 'AdminUserController')->parameters([
    'users' => 'admin_user'
]);

url 最后变成

/users/{admin_user}

修改资源类型名字

AppServiceProvider 里面的boot

Route::resourceVerbs([
        'create' => 'crear',
        'edit' => 'editar',
    ]);

这样原本生成/photos/create 会变成/photos/crear

注入模型

它默认会根据 id这个字段去注入模型,本来是 是要操作Photo::find(1)变成了 public function update(Request $request, Photo $photo) 直接注入

php artisan make:controller PhotoController --resource --model=Photo

 A App\Photo model does not exist. Do you want to generate it? (yes/no) [yes]:
 > yes

Model created successfully.
Controller created successfully.

如果你的表字段不是叫id,我还想要修改,那么只需要在模型里面修改这个方法即可

public function getRouteKeyName()
{
    return 'slug';
}

Api资源 ,其实就是资源,排除了create,edit这2个方法

生成命令


Route::apiResource('photos', 'PhotoController');

php artisan make:controller API/PhotoController --api

等同于

Route::resource('photos', 'PhotoController')->except([
    'create', 'edit'
]);

路由缓存

php artisan route:cache

清除

php artisan route:clear

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。