laravel任务管理知识点

1.配置数据库环境

首先要找到congif/app.php,在这里会发现一些全局的系统设置,包括语言,时区等。

重要的是会发现前几个数组都使用了env()这个函数,这个时候找到根目录下的.env文件 会发现一些全局配置和数据库连接配置

找到第二个模块

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=Homestead
DB_USERNAME=Homestead
DB_PASSWORD=secret

在这里进行数据库配置

2.php artisan make:auth

创建系统自带的View Controller 并且自动更新了路由

D:\wamp\www\laravel\resources/views/auth/login.blade.php
D:\wamp\www\laravel\resources/views/auth/register.blade.php
D:\wamp\www\laravel\resources/views/auth/passwords/email.blade.php
D:\wamp\www\laravel\resources/views/auth/passwords/reset.blade.php
D:\wamp\www\laravel\resources/views/auth/emails/password.blade.php
D:\wamp\www\laravel\resources/views/layouts/app.blade.php
D:\wamp\www\laravel\resources/views/home.blade.php
D:\wamp\www\laravel\resources/views/welcome.blade.php

Installed HomeController
Updated Routes File

视图在\resources\views\ 并且创建了一个larouts文件夹和一个app.blade.php的视图模板

控制器\app\Http\Controllers   \app\Http\Controllers

路由更新了

Route::auth();

Route::get('/home', 'HomeController@index');

再次刷新localhost主页,会显示出一个做好站点

但是make:auth最好在项目开始的时候使用,以后覆盖已经创建好的文件

3.

php artisan make:model Project -m

创建一个Project模型,并使用迁移文件

D:\wamp\www\laravel>php artisan make:model Project -m
 Model created successfully.
mCreated Migration:2016_11_01_213249_create_projects_table

创建好以后,在app目录下面会发现一个  Project.php

在database\migrations下会多出一个迁移文件2016_11_01_213249_create_projects_table.php

4.一对多模型  以 User 和 Project为例

一个User 可以有多个Project ,而一个Project必定属于某一个User

在app\User.php User类 中定义一个公共函数

public function projects()
{
    return $this->hasMany('App\Project');
}

表示执行这个函数的时候,App\Project这个模型就和User这个模型产生了关系

一个User拥有多个 Project,可以找到这些个projects

在app\Project.php  Project类中定义一个公共函数

public function user()
{
    $this->belongsTo('App\User');
}

表示执行这个函数的时候,App\User这个模型就和Project这个模型产生了关系

一个Project 属于一个User,可以找到这个user

这个时候,再写一个公共函数

public function tasks()
{
    return $this->hasMany('App\Task');
}

意义同上,这样 Project和Task又搞上关系了

那么User和Task也可以搞上关系了,在User类中定义一个公共函数

User has many Task through Project

public function tasks()
{
   return $this->hasManyThrough('App\Task','App\Project');
}

5.php artisan migrate

这个命令是根据在\database\migrations 下面的数据迁移文件,在数据库创建相应的数据表

比如在\database\migrations下有四个文件

执行命令以后

Migration table created successfully.
2014_10_12_100000_create_password_resets_table
2016_11_01_213249_create_projects_table
2016_11_01_213629_create_tasks_table

然后在数据表中,会有4个同名文件和一个migration表(用于记录数据表的操作,进行版本控制)

是利用迁移文件up()函数中引用 Blueprint这个类来生成的

以2014_10_12_000000_create_users_table为例

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->rememberToken();//用于记录在线状态

//对应update_at和create_at时间戳
        $table->timestamps();

});
}

$table调用的每一个方法都对应表中的某一个字段属性,前者为字段类型,参数为字段名称

比如:Blueprint.php中

public function increments($column)
{
    return $this->unsignedInteger($column, true);
}

可以根据自己的需要添加字段,比如在project的迁移文件中

public function up()
{
    Schema::create('projects', function (Blueprint $table) {
        $table->increments('id');//自增主键id
        $table->string('name');//字符串 name
        $table->string('thumbnail');//字符串 thumbnail

//整型user_id 用于关联project与user之间的关系

//user可以根据user_id找到相应的project
        $table->integer('user_id');
        $table->timestamps();
    });
}

更改好迁移文件后,需要将数据库更新一下

执行php artisan migrate:rollback 数据库回滚操作

D:\wamp\www\laravel>php artisan migrate:rollback
2016_11_01_213629_create_tasks_table
2016_11_01_213249_create_projects_table
2014_10_12_100000_create_password_resets_table
2014_10_12_000000_create_users_table

执行php artisan migrate 根据蓝图创建数据表

D:\wamp\www\laravel>php artisan migrate
2014_10_12_000000_create_users_table
2014_10_12_100000_create_password_resets_table
2016_11_01_213249_create_projects_table
2016_11_01_213629_create_tasks_table

或者直接执行  php artisan migrate:refresh  对数据库根据蓝图进行更新

6.在\app\Http 下的 routes.php 这里是定义整个项目路由的地方

比如

Route::get('/', function () {
    return view('welcome');
});

当登陆主页的时候,没有路由参数就通过匿名函数返回一个叫welcome的试图

视图定义在:\resources\views 下,默认的CSS框架是bootstrap框架

7.对于一个模板文件,不应该放太多杂乱的内容,可以将功能分开,比如引用一个模态框,就可以在\resources\views 创建projects文件下,并创建_createProjectModel.blade.php文件(视图格式:试图名.blade.php),专门用于存放创建模态框的代码,在模板视图文件中,只要@include(‘projects/_createProjects’);便可以引入. @include指向以\resources\views为起始地址

8.视图模板js、css的文件引入可以用{{asset()}}

比如

<link rel="stylesheet" href="{{asset('css/bootstrap.min.js')}}" >

asset()默认指向public文件下

9.使用composer update可以加载在根目录下 composer.json required里添加的文件,加载的文件在vendor目录下,并且在config\app.php下找到 provides 这个数组 按照路径加载进去,默认以vendor为起点。比如Collective\Html\HtmlServiceProvider::class并且在下面的 aliases中使用别名

10.关于 {{ }}  和{!! !!}

{{ }}语句已经通过 PHP 的 htmlentities 函数处理以避免 xss 攻击

{!! !!}采用原样输出

11.模板提示问题

D:\wamp\www\laravel\storage\framework\views\645c1fe367a6e0cbe4028d9bfe4798189f279b72.php line 29:

可能一下子不知道是那个html文件写错了,所以就根据它只想的目录,找到相应的缓存文件,查出错误,并且找到对应的模板,更改错误

12.路由 在app\http\ routes.php来配置全局路由

基本形式为:

Route::fangshi(‘/routename’,’XXXController@action’)

fangshi:请求方式  routename:请求名   XXXController控制器名  action 方法名

或者

Route::fangshi(‘/routename’,function(){

//通过回调函数执行操作

});

或者!

Route::resource(‘projects’,’ProjectsController’);

这个就是一下子拥有了ProjectsController的CRUD所有方法,但是要执行composer命令

php artisan make:controller ProjectsController --resource

在ProjectsController创建了一系列的方法,对应的路由和提交方式如下:

如果没有--resource 则只会创建一个不包含方法的ProjectsController

13.关于前端页面跳转页面的指定

可以用{{url(‘route1/route2’)}} url默认指向根目录路由

推荐{{route(‘routename’)}} 通过路由命名指向,以免后期更改路由

14.关于中间件

中间件是在路由上面加了一层保护层,如果使用了中间件,对于路由请求,都会先进行中间件的过滤,不满足条件的,进行处理,满足条件的才会根据路由做出相应的响应。

比如auth这个中间件,在kernel.php中是这样定义的,

'auth' => \App\Http\Middleware\Authenticate::class,

再去查看Authenticate这个类

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class Authenticate
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('login');
            }
        }

        return $next($request);
    }
}

大致浏览代码,知道这个类的功能是:对于请求,如果这个请求是游客(未登录用户),返回 401或者直接打回login页面,如果有登陆过后,不进行处理。

也就是说auth这个中间件的对未登陆游客的路由请求进行屏蔽,打回登陆界面或者401;

自定义中间件,你也可以使用自定义中间件

1.php artisan make:middleware Mymiddleware

执行这条命令以后会在app\http\middleware下生成一个Mymiddleware.php

2.然后在app\http\Kernel.php中,找到 protected $routeMiddleware将新注册的中间件加入其中。

3.注册完中间件以后,就可以在路由中使用,或者在控制器中使用

15.相对于user关联了projects,在某一个user建立自己的projects的时候,可以从user projects他们之间的关联关系入手

$request->user()->projects()->create([
    'name'=>$request->name,
    'thumbnail'=>null
]);

这样,每个user就只能创建自己的projects

使用create()方法的时候,laravel会有一种保护机制,就是只有表单中指定的字段$fillable可以上传或者指定的字段不能上传 $guard

Project.php

protected $fillable =[
  'name','thumbnail'
];

16.关于代码重构

代码重构是一个项目的重要组成,一个好的代码重构是非常简洁舒服的,把相同的功能封装成一个类方法,其他需要用的地方直接引用这个类方法,达到重用的效果。

对于引入类的注入,可以使用方法注入或者构造函数注入。

例子:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Repositories\Projects;

class ProjectsController extends Controller
{
    protected $repo;
    public function __construct(Projects $repo)
    {
        $this->repo = $repo;
    }

    public function store(Request $request)
    {
    $this->repo->newProject($request);
    return '创建成功';

    }

}

Projects.php

<?php
namespace App\Repositories;

use Intervention\Image\Facades\Image;
class Projects {
    public function newProject($request)
    {
        $request->user()->projects()->create([
            'name'=>$request->name,
            'thumbnail'=>$this->thumbnail($request),
        ]);
    }
    public function thumbnail($request)
    {
        if ($request->hasFile('thumbnail')){
            $file = $request->thumbnail;
            $name = str_random(10).'.jpg';
            $path = public_path().'/thumbnails/'.$name;
            Image::make($file)->resize(261,98)->save($path);
            return $name;
        }
    }
}

先引入所需要的重构类use App\Repositories\Projects;

将其注入到构造函数中,并命名为 $repo

protected $repo;
public function __construct(Projects $repo)
{

//将$repo这个类赋予本类的属性 $repo
    $this->repo = $repo;
}

//$this->repo指向App\Repositories\Projects这个类

//相当于//App\Repositories\Projects::newProject($request);

$this->repo->newProject($request);
return '创建成功';

17.php artisan make:request CreateProjectRequest

创建一个请求验证方法,在\app\Http\Requests目录下

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class CreateProjectRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name'=>'required|unique:projects',
            'thumbnail'=>'image|dimensions:min_width=261,min_height=98',

        ];
    }

    public function messages()
    {
        return [
          'name.required'=>'项目名称必须填写',
          'name.unique'=>'项目名称已经存在',
          'thumbnail.image'=>'请上传图片格式的文件',
          'thumbnail.dimensions'=>'请上传图片最小为261X98PX的图片',
        ];
    }
}

这里的 rules方法为表单的验证条件,数组键name,thumbnail分别对应form表单中的name和thumbnail,值是验证的条件

messages()是当条件不通过的时候,每一个错误条件对应的错误信息,如果没有定义这个方法,那么就按照默认的英文提示信息

写好这个类以后,要将这个类放入需求的地方,先引入命名空间,然后原本地方方法中注入的Request替换为 CreateProjectRequest,CreateProjectRequest是Request子类。

在laravel中,有一个全局变量$errors用于获取错误 $errors->any()表示有任何错误,$errors->all()取出所有错误,在blade模板中,可以这样输出错误信息

@if($errors->any())

    <ul  class="alert alert-danger">
        @foreach($errors->all() as $error)
            <li>{{$error}}</li>
        @endforeach
    </ul>

@endif

关于laravel基础知识的更多相关文章

  1. Laravel 基础知识

    使用版本Laravel5.1.======================================================目录简单介绍:app目录,核心目录,应用目录.bootstra ...

  2. laravel基础知识学习总结(路由、中间件、控制器)

     路由: 路由:是将信息从源地址传递到目的地得角色 Route::get('/test',function(){ });  //分号不能丢 报错信息MethodNotAllowedHttpExcept ...

  3. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  4. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  5. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  6. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  7. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  8. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

随机推荐

  1. Maven命令行使用:mvn clean compile(编译)

    先把命令行切换到Maven项目的根目录,比如:/d/xxxwork/java/maven-test,然后执行命令: mvn clean compile 执行结果如下: [INFO] Scanning ...

  2. 推荐15款创建漂亮幻灯片的 jQuery 插件

    对于设计师,开发者,摄影师或任何创造性的个人和企业,他们自己的网站是展示他们的技能和服务的最佳场所.你可能打算设计一个新的个人作品网站,不管你是从头开始或使用模板,都会需要使用 jQuery 幻灯片插 ...

  3. 原生JS:全局属性、全局方法详解

    全局属性.全局方法 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5853342.html 首先普及几个我总结的非常实用又很基础的知识:(呵呵,仅 ...

  4. fmdb 数据库的基本操作

    /** *  创建表 */ - (void)createTable { //1.初始化数据库对象 并且 2.打开数据库 BOOL isOpenSuccess = [self.database open ...

  5. 基本动画CABasicAnimation - 完成之后闪回初始状态

    基本动画CABasicAnimation 结束之后,默认闪回初始状态,那怎么解决呢? position需要设备两个属性: // MARK: - 结束后不要闪回去 anim.removedOnCompl ...

  6. 生成的API分析文件太大。我们无法在交付前验证您的API使用信息。这只是通知信息。

    这次使用了APICloud平台来开发移动APP, 发布的时候在api控制台云编译成ipa后,这次使用apple提供的Application Loader工具提交apa文件到iTunes上去,提交结束的 ...

  7. 初学HTML 表单交互标签

    表单标签在网站中主要负责的是进行与用户间的交互, 如果没有了交互, 那么网站就只是一个展示, 会死气沉沉的. <form>表单标签 <form>表单标签可以把浏览者(也就是我们 ...

  8. ORA-19502: write error on file "xxxxx", block number xxxx

    错误现象: 在ORACLE 10g下为表空间IGNITE_EGVSQL01增加数据文件时,报如下错误: SQL> ALTER TABLESPACE IGNITE_EGVSQL01      AD ...

  9. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    用户定义函数(UDF)分类  SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...

  10. ElasticSearch大数据分布式弹性搜索引擎使用

    阅读目录: 背景 安装 查找.下载rpm包 .执行rpm包安装 配置elasticsearch专属账户和组 设置elasticsearch文件所有者 切换到elasticsearch专属账户测试能否成 ...