代码改变世界

laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---删除数据

2017-06-02 22:35  吃饱了才能撑着  阅读(81)  评论(0)    收藏  举报
到目前为止,整个程序,看起来,已经差不多了!
 
但是默认的删除的为?
 
<form action='{{url("/task/{$task->id}")}}'method="post">
    {{csrf_field()}}
    {{method_field(
'DELETE')}}
    <
button>删除按钮</button>
</form>
 
 
跳转地址为?
 
 
对应的 处理函数是 
public function destroy(Request $request,Task$task){
   
 //TODO
   
 $this->authorize('destroy',$task);
   
 $task->delete();
   
 return redirect('/tasks');
}
报错信息为:
 
This action is unauthorized.
 
HTTP Exception 
 
开启新的征程,解决报错。
 
 
如何解决这个问题呢?
 
第一步: 在我们的 app/Providers/RouteServiceProvider.php 文件的 boot 方法里面,添加一下,新的 内容。
 
如:
$router->model('task','App\Task');
 
添加完成的整体效果:
 
public function boot(Router $router)
{
   
 //

   
 parent::boot($router);
   
   
 $router->model('task','App\Task');
}
 
这行代码的意义,就是告诉 laravel 框架,无论什么时候,在路由文件中,只要遇到{task} 这样的标记,就要记得匹配我们的 App\Task 模型。
也就是说,以前可以 这样写的代码。
 
public function destroy(Request $request, $taskId){}
 
可以改写为:
 
public function destroy(Request $request, Task $task){}
 
就是第二个输入的参数类型,转换称为了 Task 模型的实例化。
 
 
完成了 从ID 到 Task 模型的转换,让我们继续。 也就是 完成了 Task 实例 注入到 destroy 方法。这样做的好处,就是,可以让我 直接通过调用 Task 模型的 delete() 方法来删除数据。
 
 
但是,我们如果仅仅凭借ID 来删除 数据的话,就会有心怀叵测之人,随意可以删除其它人的数据,那么我们删除的时候,同样需要数据验证。
 
 
所以呢,我们在我们的认证体系里面,创建了一个 可以删除数据的 政策。操作命令如下
 
php artisan make:policy TaskPolicy
 
执行成功之后,会发现在我们的 app\Policies\TaskPolicy.php 文件,就多出来了。
 
接下来,让我们完善一下这个代码。
 
在 类命名空间引入的位置 添加
use App\User;
use App\Task;
 
类内部添加这个方法:
public function destroy(User $user,Task $task){
   
 return $user->id === $task->user_id;
}
来判读,当前操作的人,跟添加这条数据的人,是否是同一个人。
 
创建完成,让我们来告诉程序,我们 政策创建完成了,怎么告诉呢?很简单
 
找到我们的 app/Providers/AuthServiceProvider.php 这个文件
 
protected $policies = [
   
 'App\Model' => 'App\Policies\ModelPolicy',
   
 Task::class => TaskPolicy::class,
];
use App\Task;
use App\Policies\TaskPolicy;
添加完成!
或者可以这样添加:
 
'App\Task' => 'App\Policies\TaskPolicy',
 
 
那么使用呢,就是我们上面的那个 authorize() 函数,进行了使用。
 
 
再次刷新,就执行删除成功了!
 
 
 
总结:
第一步:将 task_Id 映射到 Task 模型,这样,就可以直接使用 Task 模型 的 delete() 方法来删除数据了。
第二步:为了方式其他人恶意删除数据,我们添加了删除政策,绑定政策,及使用政策。
php初学者-千锋php课程笔记