请选择 进入手机版 | 继续访问电脑版
查看: 1953|回复: 2

[laravel] laravel5.3入门

[复制链接]

2

主题

5

帖子

48

积分

新手上路

Rank: 1

积分
48
发表于 2017-2-20 09:34:09 | 显示全部楼层 |阅读模式
一.Laravel是一种MVC的框架:
MVC:C,controller控制层àapp/http/controllers
             V,view视图层àresource/views
             M,model模型层àapp/models() composer默认建立在app目录下
原理:通过controller调用模型层的数据显示在视图层
二.在laravel之前的一些知识:
1.目录结构:
       App目录(核心目录)
app目录包含了应用的核心代码,此外你为应用编写的代码绝大多数也会放到这里;
Bootstrap目录
bootstrap目录包含了少许文件,用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架为提升性能所生成的文件,如路由和服务缓存文件;
Config目录
config目录包含了应用所有的配置文件,建议通读一遍这些配置文件以便熟悉所有配置项;
Database目录
database目录包含了数据迁移及填充文件,如果你喜欢的话还可以将其作为 SQLite 数据库存放目录;
Public目录
public目录包含了入口文件index.php和前端资源文件(图片、JavaScript、CSS等);
Resources目录
resources目录包含了视图文件及原生资源文件(LESS、SASS、CoffeeScript),以及本地化文件;
Routes目录
routes 目录包含了应用的所有路由定义。Laravel默认提供了三个路由文件:web.php、api.php和console.php。
Storage目录
storage目录包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件,该目录被细分为成app、framework和logs子母录,app目录用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,最后,logs目录包含应用的日志文件;
storage/app/public 目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被访问的目的,你还需要在public目录下生成一个软连接 storage 指向这个目录。你可以通过 php artisan storage:link 命令生成这个软链接。
Tests目录
tests目录包含自动化测试,其中已经提供了一个开箱即用的PHPUnit示例;每一个测试类都要以 Test 开头,你可以通过 phpunit 或 php vendor/bin/phpunit 命令来运行测试。
Vendor目录
vendor目录包含Composer依赖。


回复

使用道具 举报

2

主题

5

帖子

48

积分

新手上路

Rank: 1

积分
48
 楼主| 发表于 2017-2-20 09:35:04 | 显示全部楼层
2.日志:
       配置文件:config/app.php,通常在.env中设置
       使用:use Log;




Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);
                       最低错误级别配置:config/app 中的log_level实现最低错误级别配置。
                       日志目录:storage/log/laravel
3.契约、门面、服务容器:
Laravel服务容器是管理类依赖和依赖注入(类的依赖通过构造器在某些情况下通过setter方法进行注入)的工具;
自动注入的实例:(文中的UserRepository是一个用户 的model)
protected $users;
    /**
     * 控制器构造方法。
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }

Laravel门面为Laravel服务的使用提供了便捷方式——不再需要从服务容器中类型提示和契约 解析即可直接通过静态门面调用
门面使用:
            Use DB;
            DB::table(‘user)->
              Laravel契约是指框架定义的核心服务的接口

三.开发一个项目的步骤:
1.       安装:安装项目有两种方法,先安装laravel安装器在安装项目(详情查阅文档)
第二种方法就是直接通过composer安装,安装完成后,需要compser install,安装依赖包,然后将example.env,改成.env再生成密钥,php artisan key:generate
2.       配置:目录主要是在config目录下,环境变量配置在.env文件中,具体配置可参考文档。
3.       路由à控制器àmodelà视图,总的来说就是这个步骤了。
回复 支持 反对

使用道具 举报

2

主题

5

帖子

48

积分

新手上路

Rank: 1

积分
48
 楼主| 发表于 2017-2-20 09:35:29 | 显示全部楼层
四.具体应用
1.       路由层:用于响应http请求
Route::get($uri, $callback);

Route::post($uri, $callback);

Route::put($uri, $callback);

Route::patch($uri, $callback);

Route::delete($uri, $callback);

Route:ptions($uri, $callback);


有时候还需要响应多个请求,用match接收,相应任意请求方式用any,路由组group等等。Resourse资源路由

Put patch delete等html表单不支持的方法,需要通过表单伪造请求,具体格式如下
<form action="/foo/bar" method="OST">
    <input type="hidden" name="_method" value="UT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
路由命名:name方法,更多路由请参考http://laravelacademy.org/post/5832.html
2.     控制器
上面的路由中提到的$callback可以通过回调处理逻辑,但是更多的是指向过控制器,创建控制器的方法:php artisan make:controller 控制器名字
控制器的主要作用就是处理业务逻辑
     Route::get('user/{id}', 'UserController@showProfile');
当路由中有花括号,即把请求中的这个值当作传输的值接收,在稍微大型的项目中,可能会遇到控制器较多的情况,这些时候我们可能会建一些文件夹来存放不同模块的控制器,这只是一个命名空间的问题,如下格式Route::get('foo', 'Photos\AdminController@method');
更多控制器参考http://laravelacademy.org/post/5866.html
3.     中间件
中间件的作用是过滤不符合规定的http请求,
创建中间件:php artisan make:middleware middlename, 中间件位于app/http/middleware  在中间写完逻辑之后需要注册中间件
注册中间件:
如果你想要中间件在每一个 HTTP 请求期间被执行,只需要将相应的中间件类设置到 app/Http/Kernel.php 的数组属性 $middleware 中即可
详情请参考http://laravelacademy.org/post/5849.html
4.     响应
在控制器写完逻辑之后会进行响应,重定向或者加载模板,或者返回response对象。
1>    模板加载return view (模板位置,[‘’=>’’])数据以键值对方式。
2>    重定向:重定向到指定的路由retuern redirect()->withInput;
重定向上一个请求的位置return back()->withInput();
重定向到命名路由return redirect()->route();
重定向到控制器的动作route redirect()->action(控制器@放法);带session数据重定向,->with(‘名’,’值’);
              更多相应请参考http://laravelacademy.org/post/5888.html
5.     在控制器中需要借用model调用数据
创建model php artisan make:model model_name;
使用model时,需要先导入(use 命名空间),或者使用依赖注入。
或者通过使用DB门面调用数据库数据进行操作。
无论是用orm还是DB类都必须熟练laravel手册中的数据库章节。
6.     在控制器中进行数据验证
验证比较简易的数据时,可以使用controller基类中的ValidatesRequests trait,具体示例如下:
$this->validate($request, [
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',]
);,这里的bail是一种机制,就是当一种验证不通过时,中断其他的验证。若不使用系统的validate方法的时候,也可以通过Validate门面手动创建验证器。格式如下:
$validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);
自定义错误信息:
$messages = [
    'email.required' => '邮箱不能为空',
];
当然更多的时候我们会创建表单验证请求:
命令:php artisan make:request name
首先需要将authorize方法中的return false改为true,逻辑下载rules方法中,自定义错误信息需要自己创建方法messages。
具体参考:http://laravelacademy.org/post/5902.html
7.     通过controller我们就可以获得我们需要的数据,最后通过模板加载出来,laravel中的所有模板格式都是name.blade.php
模板继承@extend ,占位 @section(‘name’) @show @yield
读取占位符@section(‘name’) @endsection
常用的@if @foreach @for
8.     数据库:
普通的增删改查:insert delete update select.
查询构建器:get()所有查询结果的每一个值都是一个对象实例
                       First()返回第一行结果的对象实例
                       Pluck()返回某一列结果的组合
                       Chunk()返回一个组块儿结果集,用闭包函数处理结果集
聚合函数:count max min avg sum等在构建查询之后调用。
DB::raw()创建一个原生表达式。

更多的where orWhere group join等更多方法:
http://laravelacademy.org/post/6140.html
9.     ORM
创建模型。
protected $table = 'my_flights';指定表
public $timestamps = false;默认自动生成时间戳,设置此项后不生成时间戳。
protected $connection = 'connection-name';设置数据库连接,默认使用默认的数据库连接
创建新的模型或者更新模型都可以用save()
批量赋值:
protected $fillable = ['name'];设置的字段可以进行批量赋值。
批量插入:create() 批量更新update();
删除:delete()
黑名单:protected $guarded = ['price'];不能被批量赋值
详情:http://laravelacademy.org/post/6184.html
10.  关联关系:
联关系也是强大的查询构建器,定义关联关系为函数能够提供功能强大的方法链和查询能力
一对一:
public function phone()
    {
        return $this->hasOne('App\Phone');
    }

$phone = User::find(1)->phone;
相对关联:
我们可以从User中访问Phone模型,相应的,我们也可以在Phone模型中定义关联关系从而让我们可以拥有该phone的User。我们可以使用belongsTo方法定义与hasOne关联关系相对的关联:
Eloquent 将会尝试通过Phone模型的user_id去User模型查找与之匹配的记录。Eloquent 通过关联关系方法名并在方法名后加_id后缀来生成默认的外键名。然而,如果Phone模型上的外键不是user_id,也可以将自定义的键名作为第二个参数传递到belongsTo方法: 将会尝试通过Phone模型的user_id去User模型查找与之匹配的记录。Eloquent 通过关联关系方法名并在方法名后加_id后缀来生成默认的外键名。然而,如果Phone模型上的外键不是user_id,也可以将自定义的键名作为第二个参数传递到belongsTo方法:
/**
* 获取手机对应的用户
*/
public function user(){
    return $this->belongsTo('App\User', 'foreign_key', 'other_key');
}
一对多:(hasMany)是用于定义单个模型拥有多个其它模型的关联关系
public function comments()
    {
         return $this->hasMany('App\Comment');
}
$comments = App\Post::find(1)->comments;
$comments = App\Post::find(1)->comments()->where('title', 'foo')->first();
逆向与一对一的关联相同
多对多。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

展开
快速回复 返回顶部 返回列表