建表:php artisan make:migration create_tasks_table --create=tasks
建模型:php artisan make:model Task
一个User实例对应多个Task实例,而一个Task实例从属于某个User:
/**
* Get all of the tasks for the user.
*/
public function tasks()
{
return $this->hasMany(Task::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
路由:
Route::group(['middleware' => ['web']], function () {
Route::get('/', function () {
return view('welcome');
})->middleware('guest');
Route::get('/tasks', 'TaskController@index');
Route::post('/task', 'TaskController@store');
Route::delete('/task/{task}', 'TaskController@destroy');
Route::auth();
});
设置中间件:
class TaskController extends Controller{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}
依赖注入:
我们创建一个app/Repositories目录并在其中创建一个TaskRepository类。记住,Laravel项目的app文件夹下的所有目录都使用 PSR-4 自动加载标准被自动加载,所以你可以在其中随心所欲地创建需要的目录:
~~~
<?php
namespace App\Repositories;
use App\User;
use App\Task;
class TaskRepository{
/**
* Get all of the tasks for a given user.
*
* @param User $user
* @return Collection
*/
public function forUser(User $user)
{
return Task::where('user_id', $user->id)
->orderBy('created_at', 'asc')
->get();
}
}
public function __construct(TaskRepository $tasks)
{
$this->middleware('auth');
$this->tasks = $tasks;
}
授权:
php artisan make:policy TaskPolicy
class TaskPolicy{
use HandlesAuthorization;
/**
* Determine if the given user can delete the given task.
*
* @param User $user
* @param Task $task
* @return bool
*/
public function destroy(User $user, Task $task)
{
return $user->id === $task->user_id;
}
}
最后,我们需要关联Task模型和TaskPolicy,这可以通过在app/Providers/AuthServiceProvider.php文件的policies属性中添加注册来实现,注册后会告知Laravel无论何时我们尝试授权动作到Task实例时该使用哪个策略类进行判断:
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Task' => 'App\Policies\TaskPolicy',
];
~~~
- 关于我
- laravel
- quickstart
- quickstart-intermediate
- swoole
- (一)快速起步
- php7
- swoole异步高性能
- 开发中常见问题
- event扩展的安装
- phptrace
- 用C/C++写php扩展
- 无聊的笔试题
- rewrite二级目录转二级域名
- php多进程
- rpc-yar
- php专家列表
- php守护进程
- php函数防止超时
- php分析报错信息
- gdb调试php
- php-cli模式
- composer/pear
- 基础
- sublime+xdebug
- 开启opcache
- 前端
- js
- linux
- Xshell连接不上Ubuntu解决方式
- xshell
- centos安装中文输入
- centos下安装谷歌浏览器
- centos安装phpstorm
- php7之phpredis安装
- 磁盘大小
- dns
- TCP/IP协议
- HTTP
- tcpdump
- zbacktrace
- gdb调试php扩展
- lsof
- perf
- lnmp
- first
- 重定向
- echo
- 键盘高效操作
- 权限控制
- 进程
- 环境变量
- vi
- 软件包管理
- 网络
- 查找文件
- 压缩
- 正则
- sed/awk
- 编译程序
- shell脚本
- shell认识
- sh脚本
- sh调试相关
- win共享文件夹给虚拟机
- git
- git的安装
- 常用命令
- 本地到远程仓库
- 远程到本地仓库
- 分支管理
- bug分支
- feature
- 标签
- 多人协作
- FAQ
- C/C++
- 难点
- 修饰符
- 数组
- 字符串
- 指针
- 引用
- 面向对象
- 类访问修饰符
- 构造函数
- 操作文件
- mysql集群
- 使用navicat操作MySQL数据库能不能整个数据库搜索一条数据?
- 帮助的使用
- 存储引擎的选择
- 数据类型/字符集
- 索引
- kafka集群
- rabbitmq集群
- (一)初识rabbitmq
- (二)原理
- (三)消息模型
- (四)rabbitmq&php基础
- (五)持久化&route&指定exchange
- (六)发布订阅
- (七)route key
- (八)topic
- elasticsearch集群
- (一)服务端搭建
- (二)elasticsearch&php
- (三)head插件
- redis集群
- github
- 设计模式
- createType
- factory_method.php
- abstract_factory.php
- mysql_singleton.php
- builder.php
- prototype.php
- structType
- adapter.php
- 数据结构与算法
- python