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

 

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

php artisan make:auth

浏览器输入127.0.0.60

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下

  生成的数据表  

 

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

  

  (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

7.路由

  (1)命名空间

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

    eg:

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

  app/Http/routes.php

复制代码
//闭包路由
Route::get('/', function () {
    return view('welcome');
});

Route::auth();

//控制器@方法 路由
Route::get('/home', 'HomeController@index');
复制代码

  (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

  (3)控制器@方法路由

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

     查看方法

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

      var_dump($controller);

 

 

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

  eg:

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

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

 

    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('/', 'HomeController@index')

  (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

  @section('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
复制代码

9.后台实践

   (1)生成控制器

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

php artisan make:controller Admin/HomeController

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

 

  (2)添加路由

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

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

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

    访问这个页面必须先登录,若已经登录,则将 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登录成功后

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

  (4)商品列表

    a.添加路由 

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

    b.新建控制器

php artisan make:controller Admin/GoodsController

 

    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

 

  (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('/', 'HomeController@index');
    Route::resource('goods', 'GoodsController@index');
});

 

    b.新增

      <1>添加create

      

 

posted @   慕尘  阅读(229)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2015-10-10 url的编码问题
点击右上角即可分享
微信分享提示