zl程序教程

您现在的位置是:首页 >  工具

当前栏目

laravel笔记详解编程语言

笔记编程语言 详解 laravel
2023-06-13 09:11:53 时间
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 $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 

 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

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 

 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登录成功后

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 

 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

 laravel笔记详解编程语言

(5)商品添加

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

eg:

Route::resource( goods , GoodsController );

  可得到多条路由配置