zoukankan      html  css  js  c++  java
  • laravel中的Database Notifications

    创建Post and  User模型

    php artisan make:model  Post
    
    php artisan make:model  User

    创建posts and  users 表文件

    php artisan make:migration create_users_table --create=users
    
    php artisan make:migration create_users_table --create=posts

    在表文件设置表结构

    Schema::create('posts', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->timestamps();
            });
    
    
     Schema::create('users', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->string('email');
                $table->string('password');
                $table->string('remember_token');
                $table->timestamps();
            });

    生成posts and  users and notifications表

    php artisan notifications:table
    
    php artisan migrate

    创建测试数据

    先在database/factories/ModelFactoy.php中设置需要的数据类型

    $factory->define(AppUser::class, function (FakerGenerator $faker) {
        static $password;
    
        return [
            'name' => $faker->name,
            'email' => $faker->unique()->safeEmail,
            'password' => $password ?: $password = bcrypt('secret'),
            'remember_token' => str_random(10),
        ];
    });
    
    $factory->define(AppPost::class, function (FakerGenerator $faker) {
        return [
            'name' => $faker->name,
        ];
    });

    再执行命令

    php artisan  tinker
    
    namespace App
    
    factory('AppUser',10)->create()
     
    factory('AppPost',10)->create()

    创建Notifications目录,以及通知文件

    创建之后即可看见InvoicePaid.php  and  UserSubscrible.php 文件

    php artisan make:notification   InvoicePaid
    
    php artisan make:notification   UserSubscrible

    Formatting Database Notifications

    在 notification class 中可以用   toDatabase or toArray  方法 , 将数据存入到数据库中 ,,同时 这两个方法接受$notifiable entity,并返回一个普通的数组(json 格式)。我的代码如下:

    //InvoicPaid
     public function toArray($notifiable)
        {
            return [
                'post_id' => $this->id,
            ];
        }
    /// UserSubscribe
    public function toArray($notifiable)
        {
            return [
                'subscribe_at'=>Carbon::now(),// 记录时间
            ];
        }

    设置路由

    Auth::LoginUsingId(2);
    Route::get('/', function () {
       // return view('welcome');
    
        Auth::user()->notify(new AppNotificationsPostPublised());
        Auth::user()->notify(new AppNotificationsUserSubscribed());
    });

    刷新时即可看见数据库中插入数据了,同时 read_at 字段为 null

    Notification 得数据显示

    在welcome.php添加如下代码,以驼峰的形式显示数据:

    <h2>未读通知</h2>
        <ul>
            @foreach(Auth::user()->unreadNotifications  as $notification)
               {{-- @include('notification.'.snake_case(class_basename($notification->type)))--}}
    
                <li>{{snake_case(class_basename($notification->type))}}</li>
            @endforeach
        </ul>
     
    <form method="post" action="/user/notification" >
    {{csrf_field()}}
    <button type="submit">提交</button>

    </form>

    image

    新建  /user/notification 路由, 把未读的通知变为已读的 ,及修改 read_at字段的值  , 第二次刷新页面就不会有数据显示 ,同时可以利用这个对应不同的 用户加载不同的模板

    IlluminateSupportFacadesRoute::post('/user/notification',function (){
        IlluminateSupportFacadesAuth::user()->unreadNotifications->markAsRead();
    });
  • 相关阅读:
    Web 2.0网站命名的7个建议
    梦猪课堂视频系列
    计算机英文术语完全介绍
    PPT高手的思路
    在线RSS阅读器大比拼
    【百度现有服务】
    转载VFW编程实例(详)
    实现MFC扩展DLL中导出类和对话框 (转)
    Windows下编译 OpenSceneGraph(转)
    OSG静态编译 (转)
  • 原文地址:https://www.cnblogs.com/webph/p/6490550.html
Copyright © 2011-2022 走看看