laravel框架 - 开发实战(目录结构,路由,控制器,模型,视图)

news2025/1/14 18:42:36

一、laravel框架的目录结构

app:应用目录,保存项目中的控制器、模型等

bootstrap:保存框架启动的相关文件

config:配置文件目录

database:数据库迁移文件和数据填充文件

public:应用入口文件index.php和前端资源文件(如CSS、JavaScript等)

resources:存放视图文件、语言包和未编译的前端资源文件

routes:存放应用中定义的所以路由

storage:存放编译后的模板,Session文件、缓存文件、日志文件等

tests:自动化测试文件

vendor:存放通过Composer加载的依赖
 

 二、路由

Route::get('/test','TestController@index');
Route::get('/test', [TestController::class, 'index']);

Route::get('test', function () {
    return view('hello get');
});

Route::post('test', function () {
    return view('hello post');
});

//match 表示匹配固定的请求方法路由
Route::match(['post','get'],'match', function () {
    return view('hello match');
});

//any 表示匹配任意的请求方法路由
Route::any(['any'],function () {
    return view('hello any');
});

//必选参数
Route::get('bixuan(id)', function ($id) {
    echo '必选'.$id;
});

//可选参数
Route::get('kexuan(id?)', function ($id='默认值') {
    echo '可选'.$id;
});

//数组传值:
Route::get('/test/{title?}', function ($title="我是标题") {//{title?}参数名,?可选
    return view('login',['title'=>$title]);//view(模板名,数组),
});

//with传值:
Route::get('/with/{title?}', function ($title="我是标题") {//{title?}参数名,?可选	
    return view('login')->with('title',$title);//模板名
});

//compact传值(推荐):
Route::get('/compact/{title?}', function ($title="我是标题",$name="我是name"){
	$age = 19;
    return view('login',compact('title','name','age'));
});

//判断视图是否存在:
Route::get('/exists', function () {
    if(View::exists('login')){
		echo "模板存在";
	}else{
		echo "模板不存在";
	}
});

//例如,如果您想要为应用程序中的所有路由添加一个前缀 api,可以这样使用 Route::prefix 方法:
Route::prefix('api')->group(function () {
	Route::get('', 'CategoryController@index');
    Route::get('add', 'CategoryController@add');
});

//中间件	->middleware('')方法允许您指定一个或多个中间件名称
Route::get('middleware/{height}',function(){
	reurn '您的身高复合要求';
})->middleware('height');

2、错误信息

        2.1  报错 404 Not Found

原因及解决方法 (点击查看官方文档 )

>原因: “域名/user” 这种属于美化后的URL,正常应该是在前面要加上入口文件index.php,即通过“域名/index.php/user”访问。

Apache
框架中自带的 public/.htaccess 文件支持隐藏 URL 中的 index.php,如过你的 Laravel 应用使用 Apache 作为服务器,需要先确保 Apache 启用了mod_rewrite 模块以支持 .htaccess 解析。
如果 Laravel 自带的 .htaccess 文件不起作用,试试将其中内容做如下替换:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Nginx
如果你使用的是 Nginx,使用如下站点配置指令就可以支持 URL 美化:

 打开laravel8手册,复制已下代码到刚才打开的配置好的域名配置文件中

安装 | 入门指南 |《Laravel 8 中文文档 8.x》| Laravel China 社区 (learnku.com)

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

 配置好后重启Apache/Nginx验证。

        2.2 错误信息:目标类[TestController]不存在

TestController在\App\Http\Controllers目录下,如下所示:

Route::get('/login', '\App\Http\Controllers\LoginController@login');

3、命令

//查看所有路由

php artisan route:list

三、控制器

3.1,控制器的创建

命令:php artisan make:controller 控制器名称
注意:命名规则适用大驼峰法 例如:TestController

 

//查询:
$list = DB::table('users')->get(); // 获取所有数据
$list = DB::table('users')->where('id', 1)->first(); // 根据ID查找用户
$list = DB::table('users')->where('name', 'John')->first(); // 根据条件查找用户
$list = DB::table('users')->orderBy('name')->get(); // 按条件排序后获取所有用户
$list = DB::table('users')->select('id', 'name', 'email')->get();//查询指定字段select
$list = DB::table('users')->pluck('name', 'id');//指定查询的单个字段并返回一个新的集合(不常用)
//关联查询-join()
	DB::table('user as t1')
	->select('t1*','t1.name')
	->leftjoin('author','t1.id','=','author.id')
	->get();

//添加:
$content=input::get('content');
$title=input::get('title');
DB::table('cmss')->insert(array('title'=>$title,'content'=>$content));

//修改:
$data=DB::table('cmss')->where('id',$arr['id'])->update($arr);

//删除:
$arr=DB::table('cmss')->where('id','=',$id)->delete();



//表单验证 - validate:
public function test2(Request $request)
{
	$request->validate($request,[
	//	required 不能为空
	//	min 最小值
	//	max 最大值
	//	integer 整型
	//	email
	//
		'name'=>'required|min:2|max:30|',
	])
}

四、模型

4.1,模型的创建

命令:php artisan make:model 模型名(表名,首字母大写)

五、视图

1,两种模板文件格式-获取数据(两种文件同时存在时,blade模板引擎文件优先使用):
//login 模板名
login.php	格式:<?php  echo $title;	?>
login.blade.php		格式:{{$title}}


//模板页-显示报错信息-表单验证
@if($reeors->any())
	<div>
		报错信息
		@foreach($errors->all() as $error)
		<li>{{$error}}</li>
		@endforeach
	</div>
@endif

	<form action="">
		@csrf//防止CSRF攻击
		
		//验证信息显示
		姓名:<input type="" name="name" class="$error('name')"/><br/>
		@error('name')
			<div>{{$message}}</div>
		@enderror
	</form>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

都2023年了你还不学ts (一)

TypeScript基础语法入门 TypeScript究竟是什么&#xff1f; 他主要就是想把JavaScript里面不完美的一些语法来进行一个提升 就像官网中所说的 TypeScript is JavaScript with syntax for types. 例如我们看下面的这段代码 if ("" 0) {console.log(hello) }在Jav…

VS新功能:智能添加函数标记

今天&#xff0c;我们官宣 Visual Studio 预览版的两项新功能&#xff1a; 1) 标记类成员函数为 const。 2) 标记全局函数为 static。 标记类成员函数为 const 如果一个类成员函数不会修改对象的状态&#xff0c;则 Visual Studio 会给出建议&#xff0c;将这个函数标记为 c…

Python统计pdf中英文单词的个数

之前的文章提供了批量识别pdf中英文的方法,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文上。以及自动pdf英文转中文文档,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文下。    本文实现python统计pdf中英文字符的个数。 文章目录 一、要统计字符的pdf…

JDK14特性——GC的改进和优化

文章目录 G1的NUMA内存分配优化NUMA介绍目标 弃用SerialCMS,ParNewSerial Old理由 删除CMSCMS弊端其他垃圾收集器 ZGC on macOS and Windows G1的NUMA内存分配优化 NUMA介绍 NUMA就是非统一内存访问架构&#xff08;英语&#xff1a;non-uniform memory access&#xff0c;简…

【Flask】会话保持-API授权-注册登录

http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存&#xff0c;前面数个服务器A,B,C上去取就好了&#xff0c;业务解耦。—》》现在都是基于token的验证。 以上是基…

SpringMVC自定义注解和使用

一.引言 1.简介&#xff1a; 在Spring MVC中&#xff0c;我们可以使用自定义注解来扩展和定制化我们的应用程序。自定义注解是一种通过Java的注解机制定义的特殊注解&#xff0c;可以应用于控制器类、方法或者方法参数上&#xff0c;以实现不同的功能和行为。&#xff08;注解…

[uni-app] iOS/Android端 禁止单个页面侧滑返回的处理记录

需要禁止部分页面侧滑返回 iOS端 popGesture 但是实测后, 其实设置popGesture:none 是无效的 真正可以用的是这个 disableSwipeBack android端 别的方案没有逐一尝试, 这边可以在需要禁止的页面的 onBackPress onBackPress() {// 禁止侧滑(但注意也会禁止导航返回,导航返…

如何在外网访问公司项目?快解析实现内网ip让公网连接

随着互联网技术的不断发展&#xff0c;越来越多的企业和个人选择使用服务器进行网站或应用程序的部署。公司内部项目需要提供外网访问是个常见的网络场景&#xff0c;需要怎么操作设置也是网络或项目人员需要关注的。 企业使用服务器搭建公司业务系统一般会使用云服务器或者使…

最新AI创作系统ChatGPT源码/支持国内AI模型/支持GPT4.0/支持AI绘画

一、AI创作系统 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&am…

WebGPU学习(10)---如何利用 WebGPU 实现高性能

虽然是WebGPU&#xff0c;但是速度很慢&#xff01;&#xff1f; 我们将解释如何充分利用 WebGPU 性能。这次我们以绘制大量物体为例&#xff0c;根据“使用纹理”中的代码进行一些更改并绘制 900 个立方体。 要均匀分布立方体&#xff0c;可以按如下方式更新 worldMatrix&am…

微信小程序 解决 当套在scroll-view中后 wx.pageScrollTo 函数失效问题解决

pageScrollTo 只是 页面的API 他对 scroll-view 的滚动是无法控制的 但是 scroll-view 也提供了一个scroll-into-view属性 我们编写一个小案例 wxml 参考代码如下 <view><scroll-view scroll-y"{{ true }}" style"height: 100vh;" scroll-into-v…

笑笑云航服悦《乡村振兴战略下传统村落文化旅游设计》许少辉博士新著

笑笑云航服悦《乡村振兴战略下传统村落文化旅游设计》许少辉博士新著

Android高级开发-APK极致优化

九道工序 1. SVG(Scalable Vector Graphics)可缩放矢量图 使用矢量图代替位图可以减小 APK 的尺寸&#xff0c;因为可以针对不同屏幕密度调整同一文件的大小&#xff0c;而不会降低图像质量。 矢量图首次加载时可能消耗更多的 CPU 资源。之后&#xff0c;二者的内存使用率和…

Spring 篇

1、什么是 Spring&#xff1f; Spring是一个轻量级的IOC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架&#xff0c;目的是用于简化企业应用程序的开发&#xff0c;它使得开发者只需要关心业务需求。常见的配置方式有三种&#xff1a;基于XML的配置、基于注解的配置…

06JVM_类加载器

一、类加载器 以JDK8为例&#xff1a; ①启动类加载器 ②扩展类加载器 ③应用程序类加载器 ④自定义类加载器 ①类加载器具有层级关系&#xff0c;当加载一个类的时候&#xff0c;要看所有的上级有没有加载此类。【双亲委派模式】 ②类加载器负责在运行时将Java类动态加载…

4.开放-封闭原则

这个原则其实是有两个特征&#xff0c;一个是说‘对于扩展是开放的(Open for extension)&#xff0c;另一个是说‘对于更改是封闭的(Closed for modification)[ASD]。

走近Callable

1.特点 可以有返回值可以抛出异常方法不同&#xff0c; run() / call(); Callable 接口类似于Runnable &#xff0c;因为它们都是为其实例可能有另一个线程执行的类设计的&#xff0c; 然而&#xff0c;Runnable不返回结果&#xff0c;也不能抛出被检查的异常。 2.代码测试…

互联网数字化管理升级,制造企业一站式智能管理,可定制-亿发

在互联网时代&#xff0c;传统机械制造企业面临着未有的挑战和机遇。信息化管理水平成为企业竞争力的关键因素。然而&#xff0c;许多制造企业在信息化管理中常常陷入以下三大问题&#xff1a; 1、盲目随潮流&#xff0c;缺乏总体规划 互联网时代&#xff0c;科技发展日新月异…

python基础复习-基本数据类型

目录 数字进制转换小数精度科学计算库 字符串转义符正向/反向索引正向/反向切片成员运算字符编码字符串处理 布尔类型指示条件作为掩码 类型转换 数字 进制转换 a10 bbin(a) coct(a) dhex(a) print(a,b,c,d) print(type(a)) print(type(b)) print(type(c)) print(type(d))10 …

Spring Cloud超越微服务:服务网格的崭露头角

文章目录 1. 微服务的挑战2. 什么是服务网格&#xff1f;3. Spring Cloud和服务网格服务发现负载均衡安全性服务网格扩展 4. 服务网格的优势4.1. 解耦通信逻辑4.2. 提高可观察性4.3. 灰度发布和流量控制4.4. 安全性 5. 未来展望6. 结论 &#x1f389;欢迎来到架构设计专栏~Spri…