laravel5.4 开发简书网站

  1. 课程介绍
  • 开发流程:核心模块到周边模块,从中心到周边
laravel介绍
  • 优势
    • 定时任务
    • 队列
    • composer
  • 思想
    • 服务容器
    • 服务提供者
安装和工具
  • PHPStorm
    • Shift + F6 统一修改变量名
  • Composer 安装 Laravel
    • https://pkg.phpcomposer.com 
    • 配置中文镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com
    • 安装:composer create-project laravel/laravel laravel54 "5.4.*"
  • 启动Laravel
    • WebServer: Nginx Apache
    • php artisan serve  (php artisan help serve)
    • .env
文章模块
  • 路由
    • PUT方法的form表达: {{ method_field('PUT') }}
    • 模型绑定:Route::get('/posts/{article}', 'ArticleController@show')  
                                                function show( \App\Article $article) { ... }
                                                article => 表:articles => 主键:id
    • RESTful 
    • 模板
      • main.blade.php    @yield("content")
      • main.blade.php   @include("layout.footer")
      • index.blade.php   @extends("layout.main")
      • index.blade.php   @section("content")  ...  @endsection
    • 数据表
      • 规则
        •  表名:复数
        • 外键:user_id
        • 时间:created_at / updated_at / deleted_at
      • migration
        • 创建:php artisan make:migration create_posts_table
        • 执行:php artisan migrate
        • 回滚:php artisan migrate:rollback
        • migration文件
        • up():
        • 设置default:$table->string('title', 100)->default("");
        • 时间:$table->timestamps();
        • down():
          • Schema::dropIfExists('table');
      • tinker
      • 数据填充
        • database/factories/ModelFactory.php
        • Faker类:三方库,生成随机字符串
          • $faker->sentence(6) //6个词
          • $faker->paragraph(10) //10句话
        • 在tinker里填充:
          • factory( App\Post:class, 10)->make();
          • factory( App\Post:class, 20)->create();
      • 分页
        • paginate()
        • {{ $posts->links() }}
      • 字符串截断
        • {{ str_limit($post->content, 100, '...') }}
    • 创建文章:
      • csrf保护
        • {{ csrf_field() }}
      • create()
        • Post::create( request(['title', 'content']) );
        • 在模型里设置 protected  $fillable //可以插入的字段
        • 在模型里设置 protected $guarded //不可以插入的字段
        • 验证操作validate
        • $this->validate(request(), [
               'title' => 'required|string|max:100|min:5',
               'content' => 'required|string|min:10',
          ],[
               'title.min' => '文章标题过短';
          ]);
          
          //ajax请求
          
          $validator = Validator::make($request->all(), [
              'name' => 'required|string',
              'en_name' => 'required|string',
              'platform' => 'required|string',
              'type' => 'required|string|min:10',
          ],[
              'name.required' => '运营商名称是必须的',
              'name.min' => '运营商名称是必须的',
              'title.min' => '文章标题过短',
          ]);
          
          
          if ($validator->fails()) {
              return $validator->errors()->all();
          }
    • 修改提示语
      • resources/lang/en/validation.php   ->  resources/lang/zh/validation.php
      • 替换文件: https://gist.github.com/linkdesu/994b59c8dc6217dd299a 
      • 修改config/app.php下的 'locale' => 'zh'
    • 表单提交过程
      • 验证
      • 逻辑
      • 渲染
    • Ajax上传图片: X-CSRF-TOKEN
      • main.blade.php:  
      • js里:'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')
    • 处理上传图片
      • 关键词:公共磁盘:
        • php artisan storage:link
      • 代码
      •  //保存图片
         public function imageUpload(Request $request)
         {
         $path = $request->file('editorH5File')->storePublicly(md5(time()));
         return asset('storage/' . $path);
         }

         

      • 其他
      • 模板里显示时间:{{ $post->created_at->toFormattedDateString() }}
      • 大驼峰命名
      • 设置时区:config/app.php  'timezone' => 'UTC'  ---> 'Asia/Shanghai'
      • 模型里时间对象是carbon对象,对象里有很多方法,正如第一点
  • form的字段尽量与数据库的一致
  • 模板原生代码:{!! str_limit($post->content, 100 , '...') !!}
  1. Laravel核心思想
  • 服务容器
    • 容器概念
      • 绑定
        • $this->app->bind('HelpSpot\API', function ($app) { return new HelpSpot\API($app->make('HttpClient'))});
        • $this->app->singleton('HelpSpot\API', function ($app) { return new HelpSpot\API($app->make('HttpClient'))});
      • 解析
        • $api = $this->app->make('HelpSpot\API');
    • IOC控制反转
    • DI 依赖注入
  • 服务提供者
    • 概念
    • 服务提供注册
      • public function register();
      • public function boot();
    • 延迟服务提供
      • protected $defer = true;
  • 门脸模式
用户注册登陆模块
  • 用户授权Policy
    • 定义策略类
      • php artisan make:policy PostPolicy
      • 在app/Http/Policies/PostPolicy.php
      •  //修改文章权限,判断当前登陆用户与文章user_id是否一致
         public function update(User $user, Post $post)
         {
             return $user->id == $post->user_id;
         }
  • 注册策略类和模型关联
    • 注册:在 app/Providers/AuthServiceProvider.php 里 protected $policies = [ 'App\Post' => 'App\Policies\PostPolicy']
    • 将该策略注册到模型
  • 使用
    • $this->authorize('update', $post);
    • @can('update', $post) ...... @endcan
 
  1. 评论模块
    • 模型关联
      • 一对一 hasOne (用户 - 手机号)
      • 一对多 hasMany (文章 - 评论)
      • 一对多方向 belongsTo (评论 - 文章)
      • 多对多 belongsToMany (用户 - 角色)
      • 远程一对多 hasManyThrough (国家 - 作者 - 文章)
      • 多态关联 morphMany (文章/视频 - 评论)
      • 多态多对多 morphToMany (文章/视频 - 标签)
    • 模型关联预加载
      • $books = App\Book::where($map)->with('author')->get();
      • $books = App\Book::where($map)->get();  $books->load('author', 'publisher');
      • 直接在模板中使用
    • 模型关联计数
      • $post = App\Post::withCount('comments')->get();
  2. 赞模块
    • Zan::firstOrCreate( $array );  
    • $post->zan(\Auth::id())->exists();
    • $post = App\Post::withCount(['zan', 'comments'])->get();
  3. 搜索模块
    • ElasticSearch 以及 中文分词(ik插件)
      • 安装: https://github.com/medcl/elasticsearch-rtf
    • Laravel安装elastic包
      • composer install laravel/scr
    • Laravel自定义命令行
      • php artisan make:command ESInit
      • app/Console/Commands/ESInit.php
        • $signature = 'es:init';
        • handle() //实际要做的事情
      • 挂载:app/Console/Kernel.php   protected $commands = [ \App\Console\Commands\ESInit::class ];
    • 安装guzzlehttp/guzzle: composer require guzzlehttp/guzzle
  4. 个人中心模块
    • //todo: 再看一遍
  5. 专题模块
    • //todo:再看一遍
    • 视图合成器   
    • 模型的scope
  • 后台管理
  1. 专题管理页面
  • Resource:
    • Route::resource('photos', 'PothoController', ['only' => ['index', 'update', 'store', 'destroy']] );
    • ajax:
      • data:{"_method":"DELETE"}
 
动作
URI
操作
解释
路由名城
GET /photos index  首页列表 photos.index
GET /photos/create create  创建页面 photos.create
POST /photos store  创建操作 photos.store
GET /photos/{photo} show 详情页面 photos.show
GET /photos/{photo}/edit edit 修改页面 photos.edit
PUT/PATCH /photos/{photo} update 修改操作 photos.update
DELETE /photos/{photo} destroy 删除操作 photos.destroy
 
  1. 系统通知模块
  2. 优化
    1. 使用预加载进行优化
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/mener0000/p/8745165.html

你可能感兴趣的:(laravel5.4 开发简书网站)