命名空间,框架之创设后台文件夹

在前面的章节中大家上课过怎么样在 Laravel框架中树立后台文件夹.

今日商量了在Laravel框架中的调节器中充裕后台的文本夹.开采了一些小的规律,拿来和咱们享用一下吧.

1. 视图分离与嵌套

Laravel框架笔记

php Laravel 框架之创建后台文件夹

这段时间我们再增多一块内容.是关于机关加载的部分.

在我们app目录中还应该有个start目录.它个中这么写道:

In addition to using Composer, you may use the Laravel class loader to
load your controllers and models. This is useful for keeping all of
your classes in the “global” namespace without Composer updating.

本人翻译一下:除了选拔Composer,你还足以应用Laravel的类加载器来加载你的调节器和模型.

那对于让您的类在不行使Composer updating
的图景下处于大局的名字空间中国和亚洲常有用.

小编们这里有叁个code fragment

ClassLoader::addDirectories(array(

app_path().’/commands’,
app_path().’/controllers’,
//app_path().’/controllers/admin’,
app_path().’/models’,
app_path().’/database/seeds’,

));

对,很熟知,这个文件夹都以我们平日应用的文书夹,调节器,命令.模型,数据库种子

那么些文件夹中的内容正是足以自行加载到全局名字空间中的.

只是还多了叁个自个儿注释的内容.那一个内容的指标是为啥呢..

就是让大家controllers目录中的admin中的调节器也一律享有全局的名字空间.这样大家就可以直接在路由表中通过

咱俩的调整器名字来抽出了.

笔者测验了一晃,确实成功了,而不再必要compoer dumpautoload

唯独照旧有个难题,要是admin文件夹中有二个调整器和外侧的名字大同小异该如何做?

自个儿也一样做了贰个实行,最终开采,它只会接纳之中之一,至于到底选拔哪三个,就看大家地点的不胜加载的依次了.

如果是

app_path().’/controllers’,

app_path().’/controllers/admin’,

那么外界的调节器有效,不然的话,admin文件夹里面包车型大巴调节器有效.

命名空间,框架之创设后台文件夹。构成以前写的这么多.其实最保障,也壮烈上的点子正是行使 名字空间.

可是编写起来也会进一步复杂一点咯…小项目得以设想大家的方法.大不断注意一下,别让那一个调控器争辨就好了.

又不是不能调控.对吧.

Do one thing at a time,and do well.

Best Wishes.

版权注脚:本文为博主原创小说,未经博主允许不得转载。


平凡景况下,大家是直接在controllers文件夹中加多大家的调整器,然后再routes.php
路由表中搜索对应的调整器和action进行管理.但是以后有个问题,假诺大家的前台和后台同在一个种类中,也正是说前台和后台的调整器会在一块.自然不是不曾章程实行区分.大家得以在调节器前边加上Front,Admin等标识来分别前台调整器和后台调节.

在 learnlaravel 文件夹下运营命令:

1. composer的安装
2. laravel框架的安装
3. 本地域名解析与apapche虚拟主机配置
4. 环境配置与数据库连接
   目录结构介绍
   路由使用
   控制器使用
5. laravel数据库迁移工具
6. laravelDebug安装与调试命令

这里自身给咱们提供一种办法来将前后台的调节器举行分离.

php artisan generate:view admin._layouts.default

一、 composer的安装:

1.Composer是什么?
是 PHP 用来保管依赖(dependency)关系的工具。
您能够在融洽的连串中宣示所注重的外表工具库(libraries),
Composer 会帮你安装那几个正视的库文件。
2.网址:https://getcomposer.org
下载:https://getcomposer.org/download/

 中国全量镜像:http://pkg.phpcomposer.com/
    启用本镜像服务命令:
        composer config -g repo.packagist composer https://packagist.phpcomposer.com
        或
        composer config repo.packagist composer https://packagist.phpcomposer.com

3.Composer常用命令:
composer -v 查看版本
composer selfupdate 更新composer

首先大家在controllers文件夹中创设三个admin文件夹.

此刻候generator插件帮大家创设了app/views/admin/_layouts/default.blade.php
文件,将内容改变为:

二、安装Laravel框架

文档网站:http://www.golaravel.com/
选择5.1版本:http://www.golaravel.com/laravel/docs/5.1/

对运行环境的要求: 
    - PHP >= 5.5.9 
    - OpenSSL PHP 扩展 
    - PDO PHP 扩展 
    - Mbstring PHP 扩展 
    - Tokenizer PHP 扩展
通过 Composer Create-Project 命令安装 Laravel:
   命令:composer create-project laravel/laravel --prefer-dist

先是种格局:直接在后台构建调节器,比方AdminController.php
里面不奇怪的写上大家的内容.

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Learn Laravel 4</title>
  @include('admin._partials.assets')
</head>
<body>
<div class="container">
  <div class="navbar navbar-inverse navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container">
      <a class="brand" href="{{ URL::route('admin.pages.index') }}">Learn Laravel 4</a>
      @include('admin._partials.navigation')
    </div>
  </div>
</div>
<hr>
  @yield('main')
</div>
</body>
</html>

三、本地域名分析与apapche虚构主机配置(window下)

1. 打开:C:\Windows\System32\drivers\etc目录中的hosts文件:
    配置信息:127.0.0.1 自定义主机名

2. 在apache的httpd-vhosts.conf配置文件中配置
    <VirtualHost *:80>
        ServerAdmin zhangtao@lampbrother.net
        DocumentRoot "虚拟主机目录位置"
        ServerName 虚拟主机名
        ErrorLog "logs/虚拟主机名-error.log"
        CustomLog "logs/虚拟主机名-access.log" common
    </VirtualHost>

 Linux下的虚拟主机配置(ubuntu系统)

---------------------------------

  1. 在hosts文件中安插域名剖判到本地
    # sudo vim /etc/hosts 文件
    在其间增多一行代码
    127.0.0.1 blog.com
    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    # sudo vim /etc/hosts
    127.0.0.1 localhost 原来的
    127.0.1.1 ljl 自动生成
    127.0.0.1 fins.itxdl.cn 访问本地
    192.168.20.109 finw.itxdl.cn 访问。。
    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    保留后实施命令让她生效
    # sudo resolvconf -u
    测试:
    # ping blog.com
  2. 布置设想主机
    复制三个虚构主机配置文件
    #sudo cp /etc/apache2/sites-available/000-default.conf
    /etc/apache2/sites-available/blog.conf

在路由表中, 

那正是视图像和文字件,MVC中的V。视图要求紧凑讲一下。

sudo ln -s /etc/apache2/sites-available/blog.conf /etc/apache2/sites-enabled/ 创造软链接

     编辑 /etc/apache2/sites-available/blog.conf 文件

# sudo vim /etc/apache2/sites-available/blog.conf
安装:多少个品类就几份
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sudo vim /etc/apache2/sites-available/blog.conf
ServerName finw.itxdl.cn
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/dev-finw/public
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<VirtualHost *:80>
ServerAdmin
zhangtao@lampbrother.net
DocumentRoot “设想主机目录地方” 项目名字
ServerName 虚构主机名 自身配的名字
ErrorLog “logs/设想主机名-error.log”
CustomLog “logs/虚构主机名-access.log” common
</VirtualHost>

     最后重启apache服务

  1. 开启Apache的重写方式
    (通过创建软链接设置)
    #sudo ln -s /etc/apache2/mods-available/rewrite.load
    /etc/apache2/mods-enabled/

      进入apache主配置文件:
    

#sudo vim /etc/apache2/apache2.conf
在布署文件中增添代码如下:
<Directory /var/www/html/设想主机目录地方>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
终极重启apache服务
# sudo service apache2 restart
四、应用程序结构介绍:


详见手册中《系统架构》的应用程序结构

Route::get(‘admin’,’AdminController@index’);

views文件夹为视图像和文字件夹,视图像和文字件夹能够嵌套,就好像自家上边同样创制了admin/_layout嵌套文件夹,在在这之中创造了贰个叫default.blade.php的文书,那么之后大家在Laravel内别的地点要用到那个视图的时候,他就叫admin._亚洲必赢官网 ,layouts.default。

五、HTTP 路由

1. 基本路由:
    Route::get('/', function()
    {
        return 'Hello jinglei';
    });
    Route::post('foo/bar', function()
    {
        return ' Hello jinglei';
    });
    Route::put('foo/bar', function()
    {
        //
    });
    Route::delete('foo/bar', function()
    {
        //
    });
    Route::match(['get', 'post'], '/', function() //多种请求注册路由
    {
        return 'Hello jinglei';
    });
2. 路由参数
    Route::get('user/{id}', function($id)
    {
        return 'User '.$id;
    });

大家开采先后报错,说无法找到调节器AdminController.

大家看来,上边代码的第七行是“@include(‘admin._partials.assets’)”,依据下面大家恰好精通的文化,那代表载入了别的三个文本。blade是Laravel的模板引擎,此处的
@include
表示平昔把非常文件的兼具代码带入进来放到这里,产生这几天视图的一片段。

六. 情况安插与数据库连接

修改:项目下的.env文件

咱俩张开命令行工具,进入到该类型的更目录中,也便是artisan,composer.json所在的目录中,

小心看第25行“@yield(‘main’)”,那代表什么呢?那个有些复杂,大家稍后再讲。

六、laravelDebug安装与调整命令

网址:https://github.com/barryvdh/laravel-debugbar

安装命令:composer require barryvdh/laravel-debugbar
进入:config/app.php文件
    配置:
        Barryvdh\Debugbar\ServiceProvider::class,
        'Debugbar' => Barryvdh\Debugbar\Facade::class,

执行命令:php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

运行命令 composer dumpautoload 或许 composer dump-autoload 

2. 权力验证

七、调控器的创办

创建一个RESTful资源控制器
命令:php artisan make:controller StuController

控制器中代码
//在控制器中查询数据,并加载模板输出
public function index()
{
    $list = \DB::table('stu')->get();
    return view('stu.index',["list"=>$list]);
    //return view('stu.index', compact('list'));
}

在routes.php的路由文件中配置
Route::get('stu/index', 'StuController@index');

public function index()
{
    //$list = \DB::table('stu')->get();
    $list = \DB::table('stu')->paginate(5);


    //return view('stu.index',['list'=>[]]);
    return view('stu.index',["list"=>$list]);
    //return view('stu.index', compact('list'));
}

public function create()
{
    return view("stu.create");
}

public function store(Request $request)
{   
    //dd($request);
    $input = $request->all();
    unset($input['_token']);

    $id = \DB::table('stu')->insertGetId($input);
    return "添加成功!id号".$id;       
}

public function update()
{
    return "update";
}

public function show($id)
{
    $stu = \DB::table('stu')->where("id","=",$id)->first();
    dd($stu);
}
public function destroy($id)
{
    return "delete".$id;
}

这是对机关加载实行优化.

Laravel支持标准HTTP认证,可是在此处我们必要构建blog系统,所以大家将编辑完善的领队登入系统,从页面签到。

八、 Laravel 中Request诉求对象的行使

1. 使用方式:
    1.1 通过 Facade
        在控制器中使用: use Request导入
        在控制器的方法中获取参数信息:$name = Request::input('name');

    1.2 通过依赖注入
        在控制器中使用:use Illuminate\Http\Request; 导入
        在控制器的方法中使用参数注入request对象
            public function store(Request $request)
            {
                $name = $request->input('name');
            }

2. 取得输入数据:
    2.1 $name = Request::input('name'); 获取请求参数name的值
    2.2 $name = Request::input('name', 'Sally'); 获取参数name的值,若没有则使用Sally默认值
    2.3 if (Request::has('name')){ ... }  判断是否有此参数。

    2.4 Request::all();  获取所有参数值

    2.5 获取部分参数值
        $data = $request->only("name","id"); //获取部分参数值
        $data = $request->except("name"); //获取指定外部分参数值

    2.6 获取数组中的值

我们运维完指令之后,进入vendor目录的composer目录中,

用命令行创立app/views/admin/auth/login.blade.php文件,代码如下:

九. Laravel中的响应:Response

1. 基本响应
    1.1 从路由返回字串
            Route::get("/hh",function(){
                return "Hello jinglei!";
            });

    1.2 自定义响应:
          在控制器中使用response: use Illuminate\Http\Response;
          控制器方法中的代码
           $content="Hello jinglei!";
           $status = 200;
           $value = "text/html";
           return (new Response($content, $status))->header('Content-Type', $value);

    1.3 在响应送出视图  
           return response()->view('hello')->header('Content-Type',"text/html");

    1.4 附加 Cookies 到响应
            return response($content)->withCookie(cookie('name', 'value'));

2. 重定向
    2.1 return redirect('user/login');

我们查阅一下我们的autoload_classmap.php文件,开掘里头多了个AdminController的一条记录.

@extends('admin._layouts.default')
@section('main')
  <div id="login" class="login">
    {{ Form::open() }}
      @if ($errors->has('login'))
        <div class="alert alert-error">{{ $errors->first('login', ':message') }}</div>
      @endif
      <div class="control-group">
        {{ Form::label('email', 'Email') }}
        <div class="controls">
          {{ Form::text('email') }}
        </div>
      </div>
      <div class="control-group">
        {{ Form::label('password', 'Password') }}
        <div class="controls">
          {{ Form::password('password') }}
        </div>
      </div>
      <div class="form-actions">
        {{ Form::submit('Login', array('class' => 'btn btn-inverse btn-login')) }}
      </div>
    {{ Form::close() }}
  </div>
@stop

十 视图

视图被保存在 resources/views 文件夹内 
实例创捷一个vv.php视图文件

//在控制器的方法中加载视图方式:
    1. return view("vv"); //加载视图
    2. return view("vv",['name'=>"zhangsan","age"=>20]); //加载视图,并携带参数
    3. return view("vv")->with("name","lisi")->with("age",30); //通过with携带参数值

在视图中如何输出
    <body>
        <h2>Laravel框架视图测试</h2>
        姓名:<?php echo $name; ?>   年龄:<?php echo $age; ?>
    </body>

对了,然后我们刷新一下浏览器,就可知见到该后台调控器的剧情了.

我们应该专注到了前两行:

十一 模板引擎:–Blade

Blade 模板后缀名都要命名为 .blade.php
模板导入css等文件可以使用{{asset(‘css/bootstrap.min.css’)}}       
<link href="/css/bootstrap.min.css" type="text/css" rel="stylesheet">
<center>
        @include('stu.menu')
        <h3>浏览学生信息</h3>
        <table width="700" border="1">
            <tr>
                <th>学号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>班级</th>
                <th>操作</th>
            </tr>
            @foreach ($list as $ob)
                <tr>
                    <td>{{ $ob->id }}</td>
                    <td>{{ $ob->name }}</td>
                    <td>{{ $ob->sex }}</td>
                    <td>{{ $ob->age }}</td>
                    <td>{{ $ob->classid }}</td>
                    <td><a href="/stu/{{ $ob->id}}">查看</a></td>
                </tr>
            @endforeach
        </table>
        <br/>
       {!! $list->render() !!}

    </center>

不过那几个有个缺陷,就是历次加多新的调整器的时候都必须要运转一下以此命令才行..

@extends('admin._layouts.default')@section('main')

十二、模板继承

1. 定义一个父模板 Blade 页面布局
    <!-- Stored in resources/views/layouts/master.blade.php -->
    <html>
        <head>
            <title>App Name - @yield('title')</title>
        </head>
        <body>
            @section('sidebar')
                This is the master sidebar.
            @show
            <div class="container">
                @yield('content')
            </div>
        </body>
    </html>
2. 在视图模板中使用 Blade 页面布局
    @extends('layouts.master')
    @section('title', 'Page Title')
    @section('sidebar')
        @@parent
        <p>This is appended to the master sidebar.</p>
    @stop
    @section('content')
        <p>This is my body content.</p>
    @stop

再有少数急需留意的是:假如你的后台文件夹中冒出了和前台同样的调节器的时候,那是的次第会报错.

那代表如何?实际上,以往大家会询问到,在controller中调用view的时候,调用的只是其一login.blade.php文件,第一行代表,此视图是admin._layouts.default的子视图,这时blade引擎会把这么些视图也载入进来,怎么组装呢?那时候上面那个@section(‘main’)就该出场了,被它包裹的代码将会直接放到admin._layouts.default中的@yield(‘main’)中。section和yield能够随意搭配,只要多个视图之间有调用关系,他们就足以这么用,特别灵活。

十三 数据迁移

1. 创建一个新的迁移:
    命令:php artisan make:migration create_表名_table
    就会在database/migrations目录下产生一个迁移类文件
    迁移类包含了两个方法:up和down。
    up方法用于新增表,列或者索引到数据库,[运行迁移]
    down方法就是up方法的反操作,[撤销迁移]
    如下代码:news新闻表
        public function up()
        {
            Schema::create('news', function (Blueprint $table) {
                $table->increments('id');
                $table->string('title')->index();
                $table->string('author',50);
                $table->text('content');
                $table->integer('addtime')->unsigned();
                //$table->timestamps();
            });
        }
        public function down()
        {
            Schema::drop('news');
        }
2.运行迁移
  命令:php artisan migrate
3.回滚迁移
  命令:php artisan migrate:rollback 回滚最后一个迁移
  命令:php artisan migrate:reset 回滚所有迁移

十四、数据填充
----------------------------------------------
1.要生成二个填充器:
能够通过Artisan命令make:seeder。全体框架生成的填充器都投身database/seeders目录:
命令:php artisan make:seeder 表名TableSeeder
如:php artisan make:seeder NewsTableSeeder
三个填充器类暗许只含有三个措施:run。当阿特isan命令db:seed运转时该方法被调用。
run方法能够插入任何你想插队数据库的多寡。

    如下代码:news表
        public function run()
        {
            \DB::table('news')->insert([
                'title' => str_random(20),
                'author' => 内容,
                'content' => 内容,
                'addtime' => time()+rand(0,100000),
            ]);
        }

  2. 运行填充:
    php artisan db:seed  //填充DatabaseSeeder器类
    php artisan db:seed --class=UserTableSeeder  //独立的填充器类
    php artisan migrate:refresh --seed //回滚并重新运行迁移

提醒后台和前台有个调节器名字相争辨.

写到这里我们兴许有个问号,为啥示例代码里空行那么多?那一点正是私人民居房经验了。blade引擎的具备标签都会在视图编译时用正则管理,引擎自身有三个难题,算不上bug,正是换行符会被拍卖掉,导致前后行和这一行都密不可分地挤在联合,在前面叁个浏览器中“查看源代码”时,比较不清楚,前后加上空行能够缓和那几个难题。当然那恐怕是贰个自动的“压缩”天性,不再深入研究。

Model的定义使用

1. 自定义模型:
   命令:php artisan make:model Models/模型名
   会在app目录下新建一个Models目录,并创建一个模型类

   如:php artisan make:model Models/Stu
   这样就会在app目录下生成一个Models目录,并且在Models目录下生成一个Stu模型类。
   Laravel 中所有模型类继承自Illuminate\Database\Eloquent\Model类。
   代码如下:
   <?php
        namespace App\Models;
        use Illuminate\Database\Eloquent\Model;
        class Stu extends Model
        {
            //设置表名
            public $table = 'stu';
            //设置主键
            public $primaryKey = 'id';
            //设置日期时间格式
            public $dateFormat = 'U';

            //批量赋值属性
            protected $guarded = ['name','sex','age','classid'];
        }
2. 自定义Model类常用操作
    Stu::all(); 获取所有信息方法
    Stu::where('id','<',3)->orderBy('id','desc')->get(); 获取多个

    Stu::where('id',1)->first(); 获取单个模型
    Stu::find(1); 获取单个模型

    Stu::where('id','>',0)->count();  聚合查询使用
    Stu::where('id','>',0)->max('age');

    添加:
        $stu = new Stu;
        $stu->name = 'xiaoli';
        $stu->age = 22;
        $stu->sex = "m";
        $stu->classid = 'lamp110';
        if($stu->save()){
            echo '添加成功!';
        }else{
            echo '添加失败!';
        }

        或者
        $input = [
            'name'=>'xiaoli',
            'age'=>21,
            'sex'=>'m',
            'classid'=>'lamp118',
        ];
        $stu = Stu::create($input);
        $stu->save();

    更新:
        $stu = Stu::find(1);
        $stu->name = 'xiaozhang';
        if($stu->save()){
            echo '更新成功!';
        }else{
            echo '更新失败!';
        }
        或
        $input = [
            'name'=>'xiaoli',
            'age'=>21,
            'sex'=>'m',
            'classid'=>'lamp118',
        ];
        $stu = Stu::find(6);
        $stu->update($input);

    删除:
        $stu = Stu::find(5); 
        if($stu->delete()){
            echo '删除成功!';
        }else{
            echo '删除失败!';
        }

那边的化解方案是在后台使用名字空间拓展处理.

充实调节器文件app/controllers/admin/AuthController.php,那时候有人就说了,那本身知道,哈哈,运转

十五、 数据检索加分页

  1. 在调控器中分页查询数据(实践每10条数据一页)
    $users = DB::table(‘users’)->paginate(10); //标准

    $users = DB::table(‘users’)->simplePaginate(10);
    //显示轻便的「下一步」和「上一步」链接
    return view(‘user.index’, [‘users’ => $users]); //放置到视图中

  2. 在视图模版中输出分页信息(导入bootstrap的css样式就难堪了)
    {!! $users->render() !!}
    {!! $list->appends($where)->render() !!} //维持where搜索条件

  3. 别的自定义分页相见手册文书档案。

比如大家本人的后台一样有个IndexController调控器

“php artisan generate:controller admin.AuthController”

十六、 文件上传

//如下一个控制器中执行上传方法代码如下
public function doUpload(Request $request)
{
    //判断是否有上传
    if($request->hasFile("upload")){
        //获取上传信息
        $file = $request->file("upload");
        //确认上传的文件是否成功
        if($file->isValid()){
            //$picname = $file->getClientOriginalName(); //获取上传原文件名
            $ext = $file->getClientOriginalExtension(); //获取上传文件名的后缀名
            //执行移动上传文件
            $filename = time().rand(1000,9999).".".$ext;
            $file->move("./upload/",$filename);

            return response($filename); //输出
            exit();
        }
    }
}

<?PHP

以此主张是对的,但您运转一下研究?会从来在app/controllers目录下开创二个“admin.AuthController.php”文件,有人又说,那小编用“admin/AuthController”总行了吗,你试一下?也非常。所以大家要先在app/controllers
入手动创造 admin 文件夹,那时候,再命令行输入:

十七、 自定义图片等比缩放类的应用

1. 将事先定义好的Image.php类放置到App/Org/目录下(其中Org自定义目录).
   在类中定义命名空间:namespace App\Org;

2. 在使用的控制类中引入当前类: use App\Org\Image;
    具体使用:
        //执行缩放
        $img = new Image();
        $img->open("./uploads/".$filename)->thumb(100,100)->save("./uploads/s_".$filename);

namespace Controllers\Admin;

php artisan generate:controller admin/AuthController

十八、 使用第三方图片管理插件:intervention/image

1. 安装:使用Composer命令,需要在你的Laravel框架目录下执行如下命令执行安装

    $ php composer.phar require intervention/image 
    或 composer require intervention/image

2. 添加配置
    修改/config/app.php配置文件
        在$providers属性中添加: Intervention\Image\ImageServiceProvider::class,
        在$aliases属性中添加:'Image' => Intervention\Image\Facades\Image::class,

3. 执行命令让当前Laravel使用当前插件(原使用的是GD库)
    $ php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"


4. 测试: 在当前项目控制器中就可以使用下面代码测试
    use Intervention\Image\ImageManagerStatic as Image;

    $img = Image::make("./uploads/".$filename)->resize(100,100);
    $img->save("./uploads/s_".$filename); //另存为
    return $img->response("jpg"); //输出

    //执行等比缩放
    $img->resize(null, 400, function ($constraint) {
                                $constraint->aspectRatio();
                                $constraint->upsize();
                            });

class IndexController extends \BaseController{

这样就能够了。接下来改写AuthController.php 的故事情节为:

十九、 表单验证

一、表单验证:
1. 控制器验证:
  public function store(Request $request)
  {   
    //验证
    $this->validate($request, [
        'name' => 'required|max:255',
        'age' => 'required|numeric|max:100|min:10',
    ]);
    ...
  }

2. 在表单页上显示:
    @if (count($errors) > 0)
        <div class="alert alert-danger">
            <ul style="color:red;">
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
            </ul>
        </div>
    @endif

二十、在Laravel框架中利用验证码增添(gregwar/captcha)
--------------------------------------------
先是呢在laravel第55中学私下认可是未有提供验证码的,这里我们需求动用第三方提供的库:gregwar/captcha
通过composer安装:
在composer.json的require中投入”gregwar/captcha”:
“dev-master”,具体代码如下
“require”: {
“laravel/framework”: “5.0.“,
“gregwar/captcha”: “1.

},
然后运转:# composer update命令
使用gregwar/captcha库
采用就极度轻松了,直接上代码
记念在最上部use Gregwar\Captcha\CaptchaBuilder;
function captch(){
$builder = new CaptchaBuilder;
$builder->build(150,32);
//Session::set(‘phrase’,$builder->get南沙滩se()); //存款和储蓄验证码
return
response($builder->output())->header(‘Content-type’,’image/jpeg’);
}
在视图中调用
![]({{ url(‘你定义的captch函数的路由’) }})
表达就更简短了
function index(){
$yanzhengma = Session::get(‘phrase’);
if($_POST[‘yanzhengma’] == $yanzhengma){
echo ‘success’;//验证成功
}
}
记得别忘了在最上端use Session
再有 验证码要求你的情形设置gd库,要否则不会符合规律显示
在 Laravel 中选取 SMTP 发送邮件
-------------------------------------------

  1. 配置:
    修改邮件发送配置。4.2 在 app/config/mail.php,5 在
    config/mail.php,修改以下配置:
    ‘host’ => ‘smtp.163.com’,
    ‘port’ => 25,
    ‘from’ => array(‘address’ => ‘@163.com’, ‘name’ =>
    ‘TestMail’),
    ‘username’ => ‘
    @163.com’, //
    注意,这里不可不和上一行配置内部的邮件地址一致
    ‘password’ => ‘****’,
  2. 发送:
    在调控器大概模型里,调用以下代码:
    $data = [’email’=>$email, ‘name’=>$name, ‘uid’=>$uid,
    ‘activationcode’=>$code];
    Mail::send(‘activemail’, $data, function($message) use($data)
    {
    $message->to($data[’email’],
    $data[‘name’])->subject(‘招待注册咱们的网址,请激活你的账号!’);
    });
    Laravel框架中配置文件
    -------------------------------------------
    文本的文书夹
    /app/config/
    配置应用程序的运作时法则、 数据库、
    session等等。包括大量的用来改造框架的各样方面包车型地铁安插文件。
    大多数的布署文件中回到的选项涉及PHP数组。
    /app/config/app.php
    各个应用程序级设置,即时区、 区域安装(语言情况)、
    调试方式和特殊的加密密钥。
    /app/config/auth.php
    调节在应用程序中如何举办身份验证,即身份验证驱动程序。
    /app/config/cache.php
    假使应用程序利用缓存来加速响应时间,要在此安顿该功效。
    /app/config/compile.php
    在此地能够钦命一些额外类,去涵盖由‘artisan
    optimize’命令声称的编写翻译文件。
    这么些本该是被归纳在大约各样诉求到应用程序中的类。
    /app/config/database.php
    包罗数据库的相关配置音讯,即默许数据库引擎和连接新闻。
    /app/config/mail.php 为电子邮件发件引擎的布署文件,即 SMTP
    服务器,From:标头
    /app/config/session.php
    调控Laravel怎么着管理用户sessions,即session driver, session lifetime。
    /app/config/view.php 模板系统的杂项配置。
    任何目录结构介绍:
    -----------------------------------------
    /app/controllers--包罗用于提供基本的逻辑、
    数据模型交互以及加载应用程序的视图像和文字件的主宰器类。
    /app/database/migrations/
    含有部分 PHP 类,允许
    Laravel更新当前数据库的架构并同不经常间保持全部版本的数据库的一块儿。
    搬迁文件是运用Artisan工具生成的。
    /app/database/seeds/--包罗允许Artisan工具用关全面据来填充数据库表的
    PHP 文件。
    /app/lang/
    PHP文件,当中蕴藏使应用程序易于本地化的字符串的数组。暗中认可意况下目录包罗立陶宛共和国(Republic of Lithuania)语语言的分页和表单验证的语言行。
    /app/models/
    模型是意味着应用程序的消息(数据)和操作数据的平整的部分类。在大多场地下,
    数据库中的每一种表将对应应用中的多个模型。应用程序业务逻辑的大许多将聚齐在模型中。
    /app/start/
    包蕴与Artisan工具以及满世界和地面上下文相关的自定义安装。
    /app/storage/
    该目录存款和储蓄Laravel各个服务的一时文件,如session, cache, compiled view
    templates。
    这一个目录在web服务器上必须是能够写入的。该目录由Laravel维护,大家得以不关怀。
    /app/tests/
    该公文夹给您提供了三个有利的岗位,用来做单元测量检验。假若您利用PHPUnit,
    您能够使用Artisan工具一遍推行全体的测量检验。
    /app/views/
    该文件夹包罗了调整器大概路由使用的HTML模版。请小心,那个文件夹下你只好放置模版文件。
    任何的静态能源文件如css,
    javascript和images文件应当放在/public文件夹下。
    /app/routes.php
    那是你的应用程序的路由文件,其中涵盖路由准则,告诉 Laravel
    如何将盛传的央浼连接到路由管理的闭包函数、
    调控器和操作。该文件还含有多少个事件证明,包含错误页的,能够用于定义视图的composers。
    /app/filters.php
    此文件包蕴各样应用程序和路由筛选方法,用来改动您的应用程序的结果。Laravel
    具备访问调整和 XSS 珍贵的一些预约义筛选器。
    Laravel中的数据导出–插件Laravel Excel

在github上的地点:
https://github.com/Maatwebsite/Laravel-Excel
官网:http://www.maatwebsite.nl/laravel-excel/docs

  1. 安装:
    在laravel框架的composer.json文件的”require-dev”属性中拉长:
    “maatwebsite/excel”: “~2.1.0”

    在指令行下运维: composer update命令进行立异
    展现效果:
    …..

    • Installing phpoffice/phpexcel (1.8.1)
      Downloading: 100%
    • Installing maatwebsite/excel (v2.1.2)
      Downloading: 100%
      …..
  2. 配置:
    在品种的config/app.php文件中加多设置:
    2.1: 在’providers’中添加:
    Maatwebsite\Excel\ExcelServiceProvider::class,

    2.2: 在’aliases’中添加:
    ‘Excel’ => Maatwebsite\Excel\Facades\Excel::class,

    2.3: 在指令行下运转: php artisan vendor:publish
    C:\xampp\htdocs\lamp138_C\myobject>php artisan
    vendor:publish
    Copied File [\vendor\maatwebsite\excel\src\config\excel.php]
    To [\config\excel.php]
    Publishing complete for tag []!
    3, 开发:
    在调整器中:
    public function excel()
    {
    \Excel::create(‘学生消息表’, function($excel) {
    $excel->sheet(‘基本音讯’, function($sheet) {
    $sheet->row(1,[‘学号’,’姓名’,’性别’,’年龄’,’班级’]);

             $sheet->row(2,['1001','张三','男','22','1111']);
    
             $sheet->row(3,['1002','李四','女','20','2222']);
         });
     })->export('xls');
    

    }

      public function index(){

<?php
namespace App\Controllers\Admin;
use Auth, BaseController, Form, Input, Redirect, Sentry, View;
class AuthController extends BaseController {
  /**
   * 显示登录页面
   * @return View
   */
  public function getLogin()
  {
    return View::make('admin.auth.login');
  }
  /**
   * POST 登录验证
   * @return Redirect
   */
  public function postLogin()
  {
    $credentials = array(
      'email'    => Input::get('email'),
      'password' => Input::get('password')
    );
    try
    {
      $user = Sentry::authenticate($credentials, false);
      if ($user)
      {
        return Redirect::route('admin.pages.index');
      }
    }
    catch(\Exception $e)
    {
      return Redirect::route('admin.login')->withErrors(array('login' => $e->getMessage()));
    }
  }
  /**
   * 注销
   * @return Redirect
   */
  public function getLogout()
  {
    Sentry::logout();
    return Redirect::route('admin.login');
  }
}

      }

那正是大家登入、注销的调节器,MVC中的C。接下来小编将执教命名空间,那是Laravel的根底,可能说是composer的功底,是整个Laravel教程中的入眼、难点,希望大家锱铢必较,任何不懂都不要放过。能够到phphub论坛或许golaravel论坛相应帖子上面提问,或许直接发帖提问。

}

作者们第一观望那一个文件的职务,它身处 app/controllers/admin
目录下,那有何样分化吧?在其余框架如 CI
中,子文件夹直接助长文件夹名就足以一向调用到了,尽管最多只好有一层。而Laravel未有如此轻巧,涉及到了PHP的命名空间。

?>

  1. composer 扶助 PS奥迪Q5-0 及 PSLX570-4 规范,标准规定 PHP
    包以命名空间为分化,向外提供服务,全数暴揭露来的类都应该在
    \作者名\包名 命名空间下,比如 \lui\MFFC\Mail
    类。那样,哪怕是称呼同样的包只假如区别小编也得以在

  2. 取名空间能够类比成 Linux 系统中的
    目录,在任何目录下都可以直接使用文件名张开当前目录下的保有文件和可实行程序,假如必要开荒其余目录下的公文,就须要动用绝对路径只怕相对路线。

  3. 世家大概在无数任何课程中看看过controller尾部未有 namesapce
    表明,更未曾那一批的 use
    xxx,像这几个文件
    /BlogController.php。这一个文件在第8行间接选用了 Blog
    这几个类,那是干什么吗?

此地照旧要小心一点了,当使用名字空间之后,大家在中间使用的具有静态类都暗中同意是当前名字空间的类.所以有的时候大家需求采纳use
View; Use …等等等的名字空间.

因为他们都曾在 learnlaravel 这一个 composer
应用的配备文件中宣称为自行加载了,而她们不以前在顶端声称他们随地的命名空间,那样就能被机关加为超级命名空间。那个布局文件是
composer.json,对象配置项为autoload 下的classmap 项。这么些宣称会让
Composer
在云谲风诡自动载入文件的时候,自动扫描该公文下有所的类以及全体子文件夹中的类,只要未有评释特定的命名空间,将会被机关加载为甲级空间。【此前公布有误,特此校勘!】

同不经常候在路由表中大家同样要利用 Controllers\Admin\IndexController@index
那样的调整器来处理央求.

关于命名空间更加多实际情况,能够参谋 【PHP 命名空间 入门】。

好了,那正是本身学到的故事情节,拿来和豪门分享分享.

OK,到最近停止大家的MVC莫斯利安素已经集齐了,那接下去该做怎样了吗?配置路由。这里的路由并不是家里用的无线路由
:-D,而是
用户央浼的U汉兰达L到调节器有些方法的改动,function是PHP中代码段的一丁点儿单位,所以用户乞求的多少个门路,如

,那条UPRADOL打给路由之后,路由就能去深入分析,应该调用哪个function,最终回到结果给用户。

Persistence makes life valuable.

Laravel的路由选取闭包的秘技赶回结果,在app/routes.php 中加进下列内容:

Best Wishes.

Route::get('admin/logout', array('as' => 'admin.logout', 'uses' => 'App\Controllers\Admin\AuthController@getLogout'));
Route::get('admin/login', array('as' => 'admin.login', 'uses' => 'App\Controllers\Admin\AuthController@getLogin'));
Route::post('admin/login', array('as' => 'admin.login.post', 'uses' => 'App\Controllers\Admin\AuthController@postLogin'));
Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function()
{
    Route::any('/', 'App\Controllers\Admin\PagesController@index');
    Route::resource('articles', 'App\Controllers\Admin\ArticlesController');
    Route::resource('pages', 'App\Controllers\Admin\PagesController');
});

版权申明:本文为博主原创小说,未经博主允许不得转发。

前三条的情趣是hold住七个get央浼和一个post需要,上边是一个路由组,规定了三个前缀admin,增添了三个过滤器,auth.admin,内部有三个能同期适应get和post央浼的‘/’路线,其完全路径是

能源调整器。


地方说的特别过滤器
auth.admin,是Laravel提供的三个伸手过滤器,这一个文件就在路由文件的旁边,app/filters.php,在文书末尾扩充:

Route::filter('auth.admin', function()
{
 if ( ! Sentry::check()) {
  return Redirect::route('admin.login');
 }
});

那般大家的权力验证就马到功成了。上边的代码意思是,在进入那么些路由组中的任何一条路由事先,会先过三遍auth.admin这几个filter,那一个filter会调用Sentry::check(),即便为false,将会进去if代码块,将用户的呼吁跳转到
命名路由‘admin.login’,命名路由文书档案。从那么些命名路由的称号大家也能看出来,正是跟访客说:傻逼,干啥啊,登陆去~

此间的“命名路由”作用是为着模仿 Ruby On Rails 的 “link_to”到目标的路由绑定成效,无助PHP上传即安顿无守护进度的特色,使得大家万般无奈保证叁个全量代码的路由表,无法像Rails那样达成能源路由-财富对象-路由调用
三者绑定的作用,只好搞出贰个半出品命名路由,人为地减轻了当调度 /people
到 /human 时,需要名称更动而效果不改变,相同的时候供给代码自适应的要求。

此刻,大家就能够尝试访问我们的项目了。推荐配置Apache将三个端口指向learnlaravel那么些类型的public目录下,即项目通过

那样的地址访问,十二分不建议从子文件夹访问。如果您不会,能够运作

php artisan serve

初阶PHP5.4的内建HTTP服务器。地址将会是
127.0.0.1 不得以访问。

下边,大家在浏览器中做客 /admin,注意U福特ExplorerL会自动跳转到
/admin/login,那注解大家的filter起成效了,但您或者获得以下页面

亚洲必赢官网 1

那表达代码出错了。接下来我们修改 app/config/app.php 第一项为:

'debug' => true,

刷新页面,错误提醒出来了!有未有认为Laravel4.2的错误提示很雅观啊,确实不错,但本人觉着未有4.1在此之前的雅观:-D。笔者获取了之类错误:

亚洲必赢官网 2

说“App\Controllers\Admin\AuthController”那个类未找到,那是怎么吗?那几个文件显明有啊。

那就事关到了另一个主题材料,Laravel中的autoload难题。Laravel基于命名空间,它只会自行加载全体顶尖命名空间的类,正是说我们新添的这几个决定器类不是在五星级命名空间下,所以就须要告诉Laravel,作者那么些类是存在的,怎么告诉它吧?运转

composer dump-autoload

能够了,刷新页面,他报告本人

View [admin._partials.assets] not found.

这些实在是,大家还没创立这一个文件呢。创建一个空文件就可以,要是是用generator建的话,别忘了把其中默许的剧情删掉哦。再刷新页面,要是还会有标题,笔者深信这一个主题素材你能够谐和节决。

OK,三个丑的一逼的页面出现了,为何它这么丑?(鸽子为啥如此大?)因为我们一贯不引进任何css和js文件,以致连导航栏的html都不完整。那没什么,来,依照笔者github上的代码,本人复制到相应文件中呢。别的,极度关键的少数,把本身的品种中的public文件下的
js 和 css 三个公文夹完全复制到你们的public文件夹中。

再刷新,假设你看来以下页面,表明您成功了!

亚洲必赢官网 3

3. 尝试登入

用seed新扩张一名大班,顺便新扩展二个管理员组。新建app/database/seeds/SentrySeeder.php,内容为:

<?php
class SentrySeeder extends Seeder {
  public function run()
  {
    DB::table('users')->delete();
    DB::table('groups')->delete();
    DB::table('users_groups')->delete();
    Sentry::getUserProvider()->create(array(
      'email'      => 'oo@xx.com',
      'password'   => "ooxx",
      'first_name' => 'OO',
      'last_name'  => 'XX',
      'activated'  => 1,
    ));
    Sentry::getGroupProvider()->create(array(
      'name'        => 'Admin',
      'permissions' => ['admin' => 1],
    ));
    // 将用户加入用户组
    $adminUser  = Sentry::getUserProvider()->findByLogin('oo@xx.com');
    $adminGroup = Sentry::getGroupProvider()->findByName('Admin');
    $adminUser->addGroup($adminGroup);
  }
}

给app/database/seeds/DatabaseSeeder.php 新扩展一行:

$this->call('SentrySeeder');

接下来运维:

php artisan db:seed

打响之后,进数据库就能意识,users、groups、users_groups表均增加产量了一行。不过,articles和pages表也独家新增加了10行,对,seed正是那样蠢萌^_^

让大家来品尝登入!如若您获取:

Class App\Controllers\Admin\PagesController does not exist

那证明你成功了!

你或者感兴趣的篇章:

  • Laravel框架路由配置总括、设置才干大全
  • 跟我学Laravel之路由
  • ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
  • Laravel中收获路由参数Route
    Parameters的多样办法亲自过问
  • 修改Laravel5.3中的路由文件与路子
  • Laravel
    5框架学习之路由、调节器和视图简单介绍
  • laravel中命名路由的运用格局
  • Laravel中重写能源路由自定义UXC60L的贯彻格局
  • Laravel路由设定和子路由设定实例深入分析
  • Laravel学习课程之路由模块
  • Laravel框架模板加载,分配变量及轻易路由功用示例
  • Laravel框架路由设置与应用示例
网站地图xml地图