laravel笔记详解编程语言
浏览器输入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 $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(); //[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
(3)[email protected]
调用控制器中的方法:使用字符串初始化类得到对象,调用对象的指定方法,返回结果
查看方法
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(/, [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 div div div div Dashboard /div div 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 div div div div Goods Management /div div div id="content" table thead th # /th th Name /th th img /th th Price /th th Storage /th /tr /thead tbody @foreach ($goods as $key = $one) th scope="row" {{ $one- id }} /th a href="{{ url(one/.$one- id) }}" h4 {{ $one- name }} /h4 /td {{ $one- img }} /td yen;{{ $one- price }} /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(/, [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 div div div div Dashboard /div div a href="{{ url(admin/goods) }}" 管理商品 /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(/, [email protected]); Route::get(goods, [email protected]); });
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 div div div div 商品管理 /div div @if (count($errors) 0) div {!! implode( br , $errors- all()) !!} /div @endif a href="{{ url(admin/goods/create) }}" 新增 /a table thead th # /th th Name /th th img /th th Price /th th Storage /th th /th /tr /thead tbody @foreach ($goods as $key = $one) th scope="row" {{ $one- id }} /th a href="{{ url(one/.$one- id) }}" {{ $one- name }} /td {{ $one- img }} /td yen;{{ $one- price }} /td {{ $one- storage }} /td a href="{{ url(admin/one/.$one- id./edit) }}" 编辑 /a form action="{{ url(admin/one/.$one- id) }}" method="POST" {{ method_field(DELETE) }} {{ csrf_field() }} button type="submit" 删除 /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 );
可得到多条路由配置
相关文章
- Struts2学习笔记一 简介及入门程序详解编程语言
- Struts2学习笔记三 访问servlet详解编程语言
- Java基础学习笔记二十一 多线程详解编程语言
- Java多线程高并发学习笔记(一)——Thread&Runnable详解编程语言
- Python访问数据库——学习笔记详解编程语言
- Python常用内建模块——学习笔记详解编程语言
- Python函数式编程——学习笔记详解编程语言
- spring笔记一详解编程语言
- Java数据结构学习笔记之三Java数据结构与算法之队列(Queue)实现详解编程语言
- Java学习笔记之二十六深入理解Java匿名内部类详解编程语言
- Java学习笔记之二十final关键字在Java继承中的用法小结详解编程语言
- [angularjs] angularjs系列笔记(七)HTML DOM详解编程语言
- [angularjs] angularjs系列笔记(四)控制器详解编程语言
- 整理一下以前的Html+css3复习笔记详解编程语言
- JAVA高级工程师课程笔记整理——(三)面向对象详解编程语言
- MyBatis学习笔记(三) 关联关系详解编程语言
- java学习笔记11–Annotation详解编程语言
- java学习笔记10–枚举详解编程语言
- CSS学习笔记09 简单理解BFC详解编程语言
- CSS学习笔记07 盒子模型详解编程语言
- CSS学习笔记04 CSS文字排版常用属性详解编程语言
- virtualenv使用和virtualenvwrapper使用笔记详解编程语言
- ABAP Dialog笔记详解编程语言
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)详解编程语言
- PHP 命名空间笔记详解编程语言
- 接口测试笔记二详解编程语言