laravel笔记详解编程语言

1.安装composer

2.安装laravel

composer create-project laravel/laravel learnlaravel5

3.nginx配置

server { 
    charset utf-8; 
        client_max_body_size 128M; 
        listen       80; 
        server_name  127.0.0.60;   
        root   "E:/vhost/laravel/learnlaravel5/public/"; 
        location / {     
            index  index.php index.html index.htm; 
            try_files $uri $uri/ /index.php$is_args$args; 
        } 
        location ~ /.php$ { 
            fastcgi_pass   127.0.0.1:9000; 
            fastcgi_index  index.php; 
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
            fastcgi_param  PATH_INFO  $fastcgi_path_info; 
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info; 
            include        fastcgi_params; 
            try_files $uri =404; 
        }   
    }

浏览器输入127.0.0.60

laravel笔记详解编程语言

 4.激活用户登录注册功能

php artisan make:auth

浏览器输入127.0.0.60

laravel笔记详解编程语言

5.连接数据库

(1)修改配置———-.env 文件

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=laravel5 
DB_USERNAME=root 
DB_PASSWORD=root

(2)数据库迁移

  新建数据库 laravel5

php artisan migrate

  执行的数据迁移文件在database/migrations下

  生成的数据表  

 laravel笔记详解编程语言

6.Eloquent

  是 Laravel 的 ORM

  使用

  (1)使用 artisan 生成 Model 类

php artisan make:model Goods

   app 目录,增加了Goods.php

namespace App; 
 
use Illuminate/Database/Eloquent/Model; 
 
class Goods extends Model 
{ 
    // 
}

  (2)使用 artisan 生成 Migration(数据迁移)

  a. 生成php文件

php artisan make:migration create_goods_table

  新生成的文件 database/migrations/2017_10_10_061425_create_goods_table.php

  修改up()

use Illuminate/Database/Schema/Blueprint; 
use Illuminate/Database/Migrations/Migration; 
 
class CreateGoodsTable extends Migration 
{ 
    public function up() 
    { 
        Schema::create('goods', function (Blueprint $table) { 
            $table->increments('id'); 
            $table->string('name'); 
            $table->string('img')->nullable(); 
            $table->integer('price'); 
            $table->integer('storage'); 
            $table->timestamps(); 
        }); 
    } 
 
    public function down() 
    { 
        // 
    } 
}

  b. 把 PHP 代码变成 MySQL 中的数据表

php artisan migrate

      生成数据表goods

  laravel笔记详解编程语言

  (3)使用 artisan 生成 Seeder(数据填充)

           解决手动向数据库中填入假数据的问题

php artisan make:seeder GoodsSeeder

   新生成的文件 database/seeds/GoodsSeeder.php

  修改文件 run()

use Illuminate/Database/Seeder; 
class GoodsSeeder extends Seeder 
{ 
    public function run() 
    { 
        DB::table('goods')->delete(); 
 
        for ($i=1; $i < 11; $i++) { 
            $basePrice = rand(1,100); 
            /App/Goods::create([ 
                'name'   => 'Title '.$i, 
                'img'    => 'img '.$i, 
                'price'  => $basePrice*$i, 
                'storage'  => $i*1000, 
             ]); 
        } 
    } 
}

  把 GoodsSeeder注册到系统内

  database/seeds/DatabaseSeeder.php 文件

use Illuminate/Database/Seeder; 
class DatabaseSeeder extends Seeder 
{ 
    public function run() 
    { 
        $this->call(GoodsSeeder::class); 
    } 
}

  执行seed

php artisan db:seed

注:

  如果找不到类,执行

composer dump-autoload

laravel笔记详解编程语言

7.路由

  (1)命名空间

    Laravel 5 全面引入了 psr-4 命名空间标准:命名空间和实际文件所在的文件夹层级一致,文件夹首字母大写即为此文件的约定命名空间

    eg:

      app/User.php 的使用时的类名为:/App/User

  app/Http/routes.php

//闭包路由 
Route::get('/', function () { 
    return view('welcome'); 
}); 
 
Route::auth(); 
 
//[email protected] 路由 
Route::get('/home', [email protected]');

  (2)闭包路由使用闭包作为此条请求的响应代码,方便灵活,很多简单操作直接在闭包里解决即可

  eg: 

Route::get('now', function () { 
    return date("Y-m-d H:i:s"); 
});

  编辑config/app.php

'timezone' => 'Asia/Shanghai',

浏览器输入http://127.0.0.60/now

laravel笔记详解编程语言

  (3)[email protected]

    调用控制器中的方法:使用字符串初始化类得到对象,调用对象的指定方法,返回结果

     查看方法

      vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php的dispatch()

      var_dump($controller);

 laravel笔记详解编程语言

  最简单地探测方式其实是手动抛出错误,这样就可以看到完整的调用栈:

  eg:

    在 HomeController 的 index 方法里的 return 之前增加

throw new /Exception("我的error", 1);

laravel笔记详解编程语言

    vendor/laravel/framework/src/Illuminate/Routing/Controller.php最终驱动了 HomeController

public function callAction($method, $parameters){ 
    return call_user_func_array([$this, $method], $parameters); 
}

 8.前台实践

  (1)修改路由

    去掉Route::get(‘/’, function () { return view(‘welcome’); });

    将/home 那行修改为 Route::get('/', [email protected]')

  (2)查看HomeController 的 index

  app/Http/Controllers/HomeController.php的index()

public function index(){ 
    return view('home'); 
}

  返回名字叫 home 的视图给用户

  注:

    blade 是 Laravel 视图系统,resources/views/home.blade.php,对视图文件进行预处理,简化一些重复性很高的 echo、foreach 等 PHP 代码, 还提供了一个灵活强大的视图组织系统

@extends('layouts.app') 
 
@section('content') 
<div class="container"> 
    <div class="row"> 
        <div class="col-md-10 col-md-offset-1"> 
            <div class="panel panel-default"> 
                <div class="panel-heading">Dashboard</div> 
 
                <div class="panel-body"> 
                    You are logged in! 
                </div> 
            </div> 
        </div> 
    </div> 
</div> 
@endsection

  基视图是 resources/views/layouts/app.blade.php

[email protected](‘content’) … @endsection之间的代码,会被放到基视图的 @yield('content') 中进行输出

  浏览器输入127.0.0.60,显示登录页面

  去掉登录,HomeController,构造函数,注释掉$this->middleware(‘auth’);

  这句代码会在控制器类初始化的时候自动载入一个名为 auth 的中间件,这会导致首页需要登录

  (3)向视图输出数据

    修改index()

public function index() 
{ 
    return view('home')->withGoods(/App/Goods::all()); 
}

    修改视图文件 resources/views/home.blade.php

@extends('layouts.app') 
@section('content') 
<div class="container"> 
    <div class="row"> 
        <div class="col-md-10 col-md-offset-1"> 
            <div class="panel panel-default"> 
                <div class="panel-heading">Goods Management</div> 
                <div class="panel-body"> 
                    <div id="content"> 
                        <table class="table"> 
                            <thead> 
                                <tr> 
                                    <th>#</th> 
                                    <th>Name</th> 
                                    <th>img</th> 
                                    <th>Price</th> 
                                    <th>Storage</th> 
                                </tr> 
                            </thead> 
                            <tbody> 
                                @foreach ($goods as $key => $one) 
                                    <tr> 
                                        <th scope="row">{{ $one->id }}</th> 
                                        <td> 
                                            <a href="{{ url('one/'.$one->id) }}"> 
                                                <h4>{{ $one->name }}</h4> 
                                            </a> 
                                        </td> 
                                        <td> 
                                            {{ $one->img }} 
                                        </td> 
                                        <td> 
                                            &yen;{{ $one->price }} 
                                        </td> 
                                        <td> 
                                            {{ $one->storage }} 
                                        </td> 
                                    </tr> 
                                @endforeach 
                            </tbody> 
                        </table> 
                    </div> 
                </div> 
            </div> 
        </div> 
    </div> 
</div> 
@endsection

laravel笔记详解编程语言

9.后台实践

   (1)生成控制器

      用 Artisan 工具来生成控制器文件

php artisan make:controller Admin/HomeController

     artisan 建立的文件夹及控制器文件

laravel笔记详解编程语言

  (2)添加路由

    用路由组来将后台页面置于“需要登录才能访问”的中间件下

    路由组可以给组内路由一次性增加 命名空间、uri 前缀、域名限定、中间件 等属性,并且可以多级嵌套

Route::group(['middleware' => 'auth', 'namespace' => 'Admin', 'prefix' => 'admin'], function() { 
    Route::get('/', [email protected]'); 
});

    访问这个页面必须先登录,若已经登录,则将 http://127.0.0.60/admin 指向 App/Http/Controllers/Admin/HomeController 的 index 方法

    登录由 middleware 定义, /admin 由 prefix 定义,Admin 由 namespace 定义,HomeController 是实际的类名

  (3)构建首页

    index方法—–App/Http/Controllers/Admin/HomeController 增加index()

namespace App/Http/Controllers/Admin; 
use Illuminate/Http/Request; 
use App/Http/Requests; 
use App/Http/Controllers/Controller; 
class HomeController extends Controller 
{ 
    public function index() 
   { 
        return view('admin/home'); 
   } 
}

    视图—–在 resources/views/admin下增加home.blade.php

    

@extends('layouts.app') 
@section('content') 
<div class="container"> 
    <div class="row"> 
        <div class="col-md-10 col-md-offset-1"> 
            <div class="panel panel-default"> 
                <div class="panel-heading">Dashboard</div> 
 
                <div class="panel-body"> 
 
                    <a href="{{ url('admin/goods') }}" class="btn btn-lg btn-success col-xs-12">管理商品</a> 
 
                </div> 
            </div> 
        </div> 
    </div> 
</div> 
@endsection

测试 http://127.0.0.60/admin登录成功后

laravel笔记详解编程语言

  此时点开商品管理会报错,添加商品管理功能

  (4)商品列表

    a.添加路由 

Route::group(['middleware' => 'auth', 'namespace' => 'Admin', 'prefix' => 'admin'], function() { 
    Route::get('/', [email protected]'); 
    Route::get('goods', [email protected]'); 
});

    b.新建控制器

php artisan make:controller Admin/GoodsController

laravel笔记详解编程语言

    c.添加index()

namespace App/Http/Controllers/Admin; 
 
use Illuminate/Http/Request; 
 
use App/Http/Requests; 
use App/Http/Controllers/Controller; 
use App/Goods; 
class GoodsController extends Controller 
{ 
    public function index() 
    { 
        return view('admin/goods/index')->withGoods(Goods::all()); 
    } 
}

  注:

    Article 类和当前控制器类不在一个命名空间路径下,不能直接调用。需要主动导入 /App/Goods 

    d.新建视图

    resources/views/admin/goods/index.blade.php

@extends('layouts.app') 
 
@section('content') 
<div class="container"> 
    <div class="row"> 
        <div class="col-md-10 col-md-offset-1"> 
            <div class="panel panel-default"> 
                <div class="panel-heading">商品管理</div> 
                <div class="panel-body"> 
                    @if (count($errors) > 0) 
                        <div class="alert alert-danger"> 
                            {!! implode('<br>', $errors->all()) !!} 
                        </div> 
                    @endif 
 
                    <a href="{{ url('admin/goods/create') }}" class="btn btn-lg btn-primary">新增</a> 
                     
                    <table class="table table-hover"> 
                        <thead> 
                            <tr> 
                                <th>#</th> 
                                <th>Name</th> 
                                <th>img</th> 
                                <th>Price</th> 
                                <th>Storage</th> 
                                <th></th> 
                            </tr> 
                        </thead> 
                        <tbody> 
                            @foreach ($goods as $key => $one) 
                                <tr> 
                                    <th scope="row">{{ $one->id }}</th> 
                                    <td> 
                                        <a href="{{ url('one/'.$one->id) }}"> 
                                            {{ $one->name }} 
                                        </a> 
                                    </td> 
                                    <td> 
                                        {{ $one->img }} 
                                    </td> 
                                    <td> 
                                        &yen;{{ $one->price }} 
                                    </td> 
                                    <td> 
                                        {{ $one->storage }} 
                                    </td> 
                                    <td> 
                                        <a href="{{ url('admin/one/'.$one->id.'/edit') }}" class="btn btn-success">编辑</a> 
                                        <form action="{{ url('admin/one/'.$one->id) }}" method="POST" style="display: inline;"> 
                                            {{ method_field('DELETE') }} 
                                            {{ csrf_field() }} 
                                            <button type="submit" class="btn btn-danger">删除</button> 
                                        </form> 
                                    </td> 
                                </tr> 
                            @endforeach 
                        </tbody> 
                    </table> 
 
                </div> 
            </div> 
        </div> 
    </div> 
</div> 
@endsection

 http://127.0.0.60/admin/goods

 laravel笔记详解编程语言

  (5)商品添加

     资源控制器是 Laravel 内部的一种约定,约定了一系列对某一种资源进行“增删改查”操作的路由配置

    eg:    

    Route::resource(‘goods’, ‘GoodsController’);

     可得到多条路由配置

HTTP 方法 URL 路径 Action
GET /goods index
GET /goods/create create
POST /goods store
GET /goods/{goods} show
GET /goods/{goods}/edit edit
PUT/PATCH /goods/{goods} update
delete /goods/{goods} destory
 

   

    a.配置资源路由

Route::group(['middleware' => 'auth', 'namespace' => 'Admin', 'prefix' => 'admin'], function() { 
    Route::get('/', [email protected]'); 
    Route::resource('goods', [email protected]'); 
});

    b.新增

      <1>添加create

      

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20388.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论