Illuminate

laravel的资源路由resource

浪尽此生 提交于 2021-02-11 10:43:34
最近在学习laravel,在需要在路由中参数的时候发现了一个很好玩的懂西resource路由特地记下期详细用法 路由列表 Route::resource('re','Admin\ReController');  Controller  <? php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Input; class ReController extends Controller { // get.re 全部分类列表 public function index( $id = null ){ echo "这里是index方法不能传入参数" ; } // get.re/create 添加分类 public function create(){ echo "这里是create方法不能传入参数" ; } // post.re 添加分类提交 public function store(){ echo "这里是store方法不能传入参数" ; } // get.re/{id} 显示单个分类 public function show( $id ){ echo

laravel created_at updated_at deleted_at 种种

与世无争的帅哥 提交于 2021-02-03 11:40:24
----题记,写东西排版很丑;假期复习下md,到时拿本篇开涮 1. 默认laravel的model如果使用了 SoftDeletes Trait 则 会对表的delete 方法使用软删除; 1.1 如果仍要硬删,则使用 forceDelete 方法; 1.2 如果查询时候不需要带入deleted_at条件,则需要调用 withTrashed 方法,建议无删除逻辑的select都加上,数据量多的时候,where默认带的deleted_at还是需要优化的 1.3 如果表不带有deleted_at ,Model 层则可以不再使用 SoftDeletes Trait;此时delete 使用的硬删 1.4 如果你基类强制使用了 SoftDeletes Trait; 1.4.1 你某张表想给deleted_at换个名字,则在该model中定义 const DELETED_AT = null ; //使用软删的表中deleted_at字段名 1.4.2 你某张表不想使用、定义deleted_at , 即废弃基类的软删限制;则可以如下: public static function bootSoftDeletes () {} //覆盖trait 的软删逻辑 2. 相应的 created_at 和 updated_at 如果换名的话,可以指定model的 const CREATED_AT =

Laravel使用whereHas进行过滤不符合条件的预加载with数据

余生长醉 提交于 2020-12-29 01:57:35
问题描述:目前有用户表,文章表,文章评论表,收藏表。我需要获我的收藏文章列表(可以被搜索,通过分类,文章标题等),通过收藏预加载with文章表,文章评论表,文章用户表 解决办法:通过whereHas限定要查询的文章字段条件,然后进行预加载with获取数据 案例: // 获取自己的收藏 public function my(Request $request ) { $limit = $request ->input('limit' ); $deviceRegionList = UserModel::where('token', $this ->user_token())->firstOrFail()->article_collection()->whereHas('article', function ( $query ){ $request = request(); $article_class_id = $request -> article_class_id; if (! empty ( $article_class_id )){ $query ->where('article_class_id', intval ( $article_class_id )); } // 状态 $status = $request -> status; if (! empty ( $status

laravel 跨域解决方案

强颜欢笑 提交于 2020-11-27 09:50:40
我们在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口(也可能是其他人的机器) , 例如 localhost:8000 , 而 laravel 程序又运行在另一个端口,这样就跨域了,而由于浏览器的同源策略,跨域请求是非法的。其实这个问题很好解决,只需要添加一个中间件就可以了。 1.新建一个中间件 1 php artisan make:middleware EnableCrossRequestMiddleware 2.书写中间件内容 1 <? php 2 namespace App\Http\Middleware; 3 use Closure; 4 class EnableCrossRequestMiddleware{ 5 /* * 6 * Handle an incoming request. 7 * 8 * @param \Illuminate\Http\Request $request 9 * @param \Closure $next 10 * @return mixed 11 */ 12 public function handle( $request , Closure $next ){ 13 $response = $next ( $request ); 14 $origin = $request ->server(

Laravel 源码解析(一)

女生的网名这么多〃 提交于 2020-11-25 08:06:59
之前就想学着看源码了,无奈总是半途而废,这次希望能学完,让自己沉淀下。 从入口文件index.php的第一行开始把, define ('LARAVEL_START', microtime ( true )); require __DIR__.'/../vendor/autoload.php'; 第一行代码表示记录项目开始加载的时间,然后加载composer自动加载文件。 $app = require_once __DIR__.'/../bootstrap/app.php'; 这里获取app变量,这里是整个项目的应用实例,后续还会有很多地方用到他,这里先跳到app.php文件去看看. app.php文件解析: $app = new Illuminate\Foundation\Application( realpath (__DIR__.'/../' ) ); 这里把项目目录地址的绝对路径传入Application类中进行初始化,现在要跳往Application类去看下了: public function __construct( $basePath = null ) { if ( $basePath ) { $this ->setBasePath( $basePath ); } $this -> registerBaseBindings(); $this ->

3分钟短文 | Laravel 给所有视图追加公共数据

丶灬走出姿态 提交于 2020-11-24 03:29:47
引言 这又是一个深入laravel运行方式的问题,面对数百张页面,不可能所有的简单的页面 复杂的页面都继承了某些公用的layout数据。那么如何做到给所有视图都追加公共数据呢?本文就来说一说。 学习时间 比如文档中所说,可以用view对象的share方法分享全局通用数据。代码像下面这样: View::share('data', [1, 2, 3]); 如果仅是指定控制器,或者路由的页面才会追加公用数据,可以在声明控制器的基类, 并在基类内注入公用数据。 class BaseController extends Controller { public function __construct() { $user = User::all(); View::share('user', $user); // 共享数据 } } 在需要使用公用数据的控制上,使其继承 BaseController 就可以了。 如果在某个应用的整个生命周期,你需要对所有的请求都要追加公用数据,那么可以这应用加载之前, 就将数据暴露出来。 App::before(function($request) { View::share('user', User::all()); }); 或者我们直接在路由阶段进行注入: Route::filter('user-filter', function() { View:

Laravel 系列入门教程(五)【最适合中国人的 Laravel 教程】

微笑、不失礼 提交于 2020-11-21 12:21:25
本文是本系列教程的完结篇,我们将一起给 Article 加入评论功能,让游客在前台页面可以查看、提交、回复评论,并完成后台评论管理功能,可以删除、编辑评论。Article 和评论将使用 Laravel Eloquent 提供的“一对多关系”功能大大简化模型间关系的复杂度。最终,我们将得到一个个人博客系统的雏形,并布置一个大作业,供大家实战练习。 本篇文章中我将会使用一些 Laravel 的高级功能,这些高级功能对新手理解系统是不利的,但熟手使用这些功能可以大幅提升开发效率。 回顾 Eloquent 前面我们已经说过,Laravel Eloquent ORM 是 Laravel 中最强大的部分,也是 Laravel 能如此流行最重要的原因。中文文档在: https://d.laravel-china.org/docs/5.5/eloquent learnlaravel5/app/Article.php 就是一个最简单的 Eloquent Model 类: <? php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { // } 若想进一步了解 Eloquent 推荐阅读系列文章: 深入理解 Laravel Eloquent 构建评论系统 基础规划

3分钟短文:Laravel ORM 模型用法纲要

喜欢而已 提交于 2020-11-19 07:27:25
引言 前两期为了说明laravel框架提供的数据库操作能力,直接使用DB门面操作, 而没有引入更为强大的eloquent orm功能。从本期开始,我们就分次把 eloquent的一些简要知识点,为大家提炼演示一下。主要以代码为主,配以简要说明。 学习时间 Eloquent其实是一个 ActiveRecord 类型的 ORM。这是一个位于数据库操作之上的一个中间层, 不仅仅是对于整张表的操作,更能细化到每行记录的增删改查。 创建一个模型类非常简单,只用继承系统的模型就可以了: use Illuminate\Database\Eloquent\Model; class Contact extends Model {} 因为遵循的是 约定大于配置 的惯例,所以上述模型如不指定表名,默认就是默认数据库的 contacts 表了。 对于数据库插入新条目,则可以便捷地使用模型的方法执行,比如下面这样: public function save(Request $request) { $contact = new Contact(); $contact->first_name = $request->input('first_name'); $contact->last_name = $request->input('last_name'); $conatct->email = $request

3分钟短文:Laravel控制器用法光速入门

巧了我就是萌 提交于 2020-11-17 07:16:32
引言 上一章我们介绍了laravel路由注册中的“花拳绣腿”,样样都是那么优雅而实用。路由传递过来的参数,在经过中间件验证和导向之后,应该去控制器接受处理了。 本文用最简单的示例,让你明白laravel中控制器是干什么的,以及怎么用。 代码时间 在开始介绍之前,我们先看一下MVC设计模式的一个概要图: Model就是模型,是数据库交互部分;View就是视图,是渲染数据的页面。我们本期介绍的就是中间的连接部分—— controller 控制器。 首先使用命令行脚手架创建一个控制器文件: php artisan make : controller TasksController 默认的控制器文件放置在 app/Http/Controllers 目录下。我们看生成的文件默认代码: namespace App \ Http \ Controllers ; use Illuminate \ Http \ Request ; use App \ Http \ Requests ; class TasksController extends Controller { } 仅仅是继承了框架的 Controller 类。没有什么可写的,我们就写个 hello world 练练手吧: public function home ( ) { return 'Hello, World!' ; } 我们声明了

3分钟短文:Laravel是怎么发出一封电子邮件的?

对着背影说爱祢 提交于 2020-11-16 03:28:48
引言 上一章我们为发电子邮件准备了贴心的表单,完善的数据验证,那么本篇我们讲解如何在laravel内发送一封电子邮件。 电子邮件非常方便,大家切勿滥用。 代码时间 laravel集成了热门且功能强大的SwiftMailer库,为我们封装了发送邮件所需要的底层逻辑,所以我们只需关注发送的逻辑, 如何准备电子邮件的内容即可。 laravel配置文件 config/mail.php 内默认的 smtp 参数: 'smtp' => [ 'transport' => 'smtp' , 'host' => env ( 'MAIL_HOST' , 'smtp.mailgun.org' ), 'port' => env ( 'MAIL_PORT' , 587 ), 'encryption' => env ( 'MAIL_ENCRYPTION' , 'tls' ), 'username' => env ( 'MAIL_USERNAME' ), 'password' => env ( 'MAIL_PASSWORD' ), 'timeout' => null , 'auth_mode' => null , ], 主要用于指定传输协议,主机地址,端口号,加密方式,用户名与密码等。 因为国外的缘故,默认使用了mailgun作为邮件服务器,这样免得使我们自己的邮件服务器发送的邮件, 被识别为垃圾邮件