此处将为大家介绍关于Laravel基础课路由和MVC——模型的详细内容,并且为您解答有关laravel路由实现原理的相关问题,此外,我们还将为您介绍关于c#–同时使用基于WebAPI和MVC的属性路由
此处将为大家介绍关于Laravel基础课 路由和MVC——模型的详细内容,并且为您解答有关laravel路由实现原理的相关问题,此外,我们还将为您介绍关于c# – 同时使用基于Web API和MVC的属性路由和基于约定的路由、Laravel Eloquent—模型间关系(关联)、laravel 基础课程 ---14、表单验证(lavarel 如何进行表单验证)、laravel 基础课程 ---1、laravel 安装及基础介绍(laravel 如何安装)的有用信息。
本文目录一览:- Laravel基础课 路由和MVC——模型(laravel路由实现原理)
- c# – 同时使用基于Web API和MVC的属性路由和基于约定的路由
- Laravel Eloquent—模型间关系(关联)
- laravel 基础课程 ---14、表单验证(lavarel 如何进行表单验证)
- laravel 基础课程 ---1、laravel 安装及基础介绍(laravel 如何安装)
Laravel基础课 路由和MVC——模型(laravel路由实现原理)
新建模型
在App目录下新建member.PHP
<?PHP
namespace App;
use Illuminate\Database\Eloquent\Model;
class member extends Model
{
public static function getmember()
{
return 'member name is zhangsan';
}
}
使用模型
在Controller下
Member::getMember();
c# – 同时使用基于Web API和MVC的属性路由和基于约定的路由
这是RouteConfig.RegisterRoutes():
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //routes.MapMvcAttributeRoutes(); routes.MapRoute( name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Tables",action = "Index",id = UrlParameter.Optional },namespaces: new string[] { "Foo.Cms.Controllers" } ); }
这是WebApiConfig.Register():
public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. // To avoid processing unexpected or malicIoUs queries,use the validation settings on QueryableAttribute to validate incoming queries. // For more information,visit http://go.microsoft.com/fwlink/?LinkId=279712. //config.EnableQuerySupport(); // The models currently only serialize succesfully to xml,so we'll remove the json formatter. GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.JsonFormatter); }
这是Application_Start():
protected void Application_Start() { AreaRegistration.RegisterallAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); GlobalConfiguration.Configure(WebApiConfig.Register); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.Registerauth(); GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; }
这样,只有到web api控制器的路由才能工作.如果我切换GlobalConfiguration.Register()和RouteConfig.RegisterRoutes(),如下所示:
RouteConfig.RegisterRoutes(RouteTable.Routes); GlobalConfiguration.Configure(WebApiConfig.Register);
…只有基于约定的路由才有效.
我不知所措.这里发生了什么?
编辑:
我想要实现的目标:
该应用程序当前使用基本的{controller} / {action} / parameters约定.所以我有一个名为ElementsController的控制器,例如,它有一个路由到/ Elements的Index()方法或一个路由到/ Elements / ListPublic的ListPublic()方法.我通过上面提到的基于约定的路由实现了这一点.
我还有一堆Web Api控制器(例如,TablesController),我想使用/ api / v0 / tables路由路由到它.我试图这样做:
[RoutePrefix("api/v0/tables")] public class TablesController : ApiController { [Route()] public string Get() { // ... } }
如您所见,它不是相同的路由模式:api调用都以api / v0 /为前缀.但出于某种原因,它似乎仍将其视为默认的{controller} / {action}路由.
解决方法
{控制器} / {行动} / {ID}
和定义为的Web API路由
{控制器} / {行动} / {ID}
第一条注册路线将生效.
为什么会这样?想象一下,您向服务器发送请求
富/酒吧/ 1
这匹配哪条路线?
都!
无论使用何种路由,它都将选择与路由匹配的第一个结果.如果您想了解如何使这些路由工作的示例,请查看此link
Laravel Eloquent—模型间关系(关联)
Eloquent是什么
Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “对象”,就是本文所说的 “模型(Model)”;对象关系映射,即为模型间关系。中文文档: http://laravel-china.org/docs/eloquent#relationships
下面我们开始一个一个地学习。
一对一关系
顾名思义,这描述的是两个模型之间一对一的关系。这种关系是不需要中间表的。
假如我们有两个模型:User 和 Account,分别对应注册用户和消费者,他们是一对一的关系,那么如果我们要使用 Eloquent 提供的一对一关系方法,表结构应该是这样的:
user: id ... ... account_id
account: id ... ... user_id
假设我们需要在 User 模型中查询对应的 Account 表的信息,那么代码应该是这样的。 `/app/models/User.php`:
<?php
class User extends Eloquent {
protected $table = ''users'';
public function hasOneAccount()
{
return $this->hasOne(''Account'', ''user_id'', ''id'');
}
}
然后,当我们需要用到这种关系的时候,该如何使用呢?如下:
$account = User::find(10)->hasOneAccount;
此时得到的 `$account` 即为 `Account` 类的一个实例。
这里最难的地方在于后面的两个 foreign_key 和 local_key 的设置,大家可以就此记住:在 User 类中,无论 hasOne 谁,第二个参数都是 `user_id`,第三个参数一般都是 `id`。由于前面的 `find(10)` 已经锁定了 id = 10,所以这段函数对应的 SQL 为: `select * from account where user_id=10`。
这段代码除了展示了一对一关系该如何使用之外,还传达了三点信息,也是我对于大家使用 Eloquent 时候的建议:
1. 每一个 Model 中都指定表名
2. has one account 这样的关系写成 `hasOneAccount()` 而不是简单的 `account()`
3. 每次使用模型间关系的时候都写全参数,不要省略
相应的,如果使用 belongsTo() 关系,应该这么写:
<?php
class Account extends Eloquent {
protected $table = ''accounts'';
public function belongsToUser()
{
return $this->belongsTo(''User'', ''user_id'', ''id'');
}
}
一对多关系
学会了前面使用一对一关系的基础方法,后面的几种关系就简单多了。
我们引入一个新的Model:Pay,付款记录。表结构应该是这样的:
user: id ... ...
pay: id ... ... user_id
User 和 Pay 具有一对多关系,换句话说就是一个 User 可以有多个 Pay,这样的话,只在 Pay 表中存在一个 `user_id` 字段即可。 `/app/models/User.php`:
<?php
class User extends Eloquent {
protected $table = ''users'';
public function hasManyPays()
{
return $this->hasMany(''Pay'', ''user_id'', ''id'');
}
}
然后,当我们需要用到这种关系的时候,该如何使用呢?如下:
$accounts = User::find(10)->hasManyPays()->get();
此时得到的 `$accounts` 即为 `Illuminate\Database\Eloquent\Collection` 类的一个实例。大家应该也已经注意到了,这里不是简单的 `-> hasOneAccount` 而是 `->hasManyPays()->get()`,为什么呢?因为这里是 `hasMany`,操作的是一个对象集合。
相应的 belongsTo() 的用法跟上面一对一关系一样:
<?php
class Pay extends Eloquent {
protected $table = ''pays'';
public function belongsToUser()
{
return $this->belongsTo(''User'', ''user_id'', ''id'');
}
}
多对多关系
多对多关系和之前的关系完全不一样,因为多对多关系可能出现很多冗余数据,用之前自带的表存不下了。
我们定义两个模型:Article 和 Tag,分别表示文章和标签,他们是多对多的关系。表结构应该是这样的:
article: id ... ...
tag: id ... ...
article_tag: article_id tag_id
在 Model 中使用:
<?php
class Tag extends Eloquent {
protected $table = ''tags'';
public function belongsToManyArticle()
{
return $this->belongsToMany(''Article'', ''article_tag'', ''tag_id'', ''article_id'');
}
}
需要注意的是,第三个参数是本类的 id,第四个参数是第一个参数那个类的 id。
使用跟 hasMany 一样:
$tagsWithArticles = Tag::take(10)->get()->belongsToManyArticle()->get();
这里会得到一个非常复杂的对象,可以自行 `var_dump()`。跟大家说一个诀窍,`var_dump()` 以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐的对象/数组展开了。
在这里给大家展示一个少见用法(奇技淫巧):
public function parent_video()
{
return $this->belongsToMany($this, ''video_hierarchy'', ''video_id'', ''video_parent_id'');
}
public function children_video()
{
return $this->belongsToMany($this, ''video_hierarchy'', ''video_parent_id'', ''video_id'');
}
对,你没有看错,可以 belongsToMany 自己。
laravel 基础课程 ---14、表单验证(lavarel 如何进行表单验证)
laravel 基础课程 ---14、表单验证(lavarel 如何进行表单验证)
一、总结
一句话总结:
lavarel 的验证的功能比 tp 要【简单】且【强大】很多
直接控制器中:添加【规则数组】和【修改提示信息数组】,然后调用【验证类】进行验证即可:$validator = \Validator::make ($input,$rules,$message);
表单验证
1、控制器
// 规则
$rules=[
''name''=>''required|unique:user|between:6,12'',
"pass"=>''required|between:6,12|same:repass'',
];
// 所有数据
$input=$request->all();
// 修改提示信息
$message=array(
"name.required"=>"请输入用户名",
"name.unique"=>"用户名以存在",
"name.between"=>"长度不满足",
"pass.required"=>"请输入密码",
"pass.between"=>"密码长度不满足",
"pass.sname"=>"两次不一致",
);
// 设置表单验证的参数
// 参数一 需要验证的数据
// 参数二 验证规则
// 参数三 提示信息
$validator = \Validator::make($input,$rules,$message);
// 进行验证
if($validator->passes()){
// 处理数据
unset($_POST[''_token'']);
unset($_POST[''repass'']);
$_POST[''pass'']=\Crypt::encrypt( $_POST[''pass'']);
$_POST[''time'']=time();
if (\DB::table("user")->insert($_POST)) {
# code...
return redirect("admin/user");
}else{
return back();
}
}else{
return back()->withInput()->withErrors($validator);
}
2、页面中提示错误
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
1、lavarel 如何加密解密字符串?
Crypt 对象的 encrypt 方法:echo $pass=\Crypt::encrypt (''123'');
Crypt 对象的 decrypt 方法:echo \Crypt::decrypt (''MjM1OCJ9'');
你可以借助 Crypt facade 来加密一个值。这些值都会使用 OpenSSL 与 AES-256-CBC 来进行加密。此外,所有加密过后的值都会被签署文件消息验证码 (MAC),以检测加密字符串是否被篡改过。
2、Crypt::encrypt($pass) 和 md5 加密的区别?
Crypt([krɪpt]:n. 土窖,地下室)::encrypt ($pass):每次都是变化的,长度 180-192 之间,并且可逆
md5:不变的,并且可能被暴力破解
你可以借助 Crypt facade 来加密一个值。这些值都会使用 OpenSSL 与 AES-256-CBC 来进行加密。此外,所有加密过后的值都会被签署文件消息验证码 (MAC),以检测加密字符串是否被篡改过。
crypt
- n. 土窖,地下室;腺窝
3、lavarel 中 判断表单用户名存在不存在是不是用的 ajax?
其实不必:闪存 + with () 方法即可
with 方法向页面返回一个变量,这个变量的值就是 "用户不存在"
4、判断表单(比如判断提交的用户名是否存在),有没有必要弹出框提示?
没必要,直接在页面的 div 标签中显示即可
<!-- /resources/views/post/create.blade.php -->
<h1>创建文章</h1>
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<!-- 创建文章的表单 -->
二、内容在总结中
laravel 基础课程 ---1、laravel 安装及基础介绍(laravel 如何安装)
laravel 基础课程 ---1、laravel 安装及基础介绍(laravel 如何安装)
一、总结
一句话总结:
【修改 composer 镜像地址】、【明确 laravel 的安装要求】、【安装指定版本的 laravel】、【查看 laravel 版本】、【配置虚拟主机】、【地址栏访问】
【修改 composer 镜像地址】:composer config -g repo.packagist composer https://packagist.phpcomposer.com
【安装指定版本的 laravel】:composer create-project laravel/laravel yzm2 --prefer-dist "5.3.*"
【查看 laravel 版本】:php artisan -V【php artisan 可查看 php artisan 的帮助命令】
0、修改 composer 镜像地址
composer config -g repo.packagist composer https://packagist.phpcomposer.com
1、laravel 的安装要求
PHP >= 5.6.4
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension
XML PHP Extension
2、安装最新版本 laravel
composer global require "laravel/installer"
laravel new yzm
3、安装 5.3 版本
composer create-project laravel/laravel yzm2 --prefer-dist "5.3.*"
4、查看 laravel 版本
php artisan -V
php artisan --version
5、配置虚拟主机
1、修改本地 DNS 路由表
配置了 www.yzmedu1.com www.yzmedu2.com
2、修改 apache (larval 的网站根目录 在 Public 下)
修改 httpd.conf
Include conf/extra/httpd-vhosts.conf
修改 httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "D:/laravel/yzmedu/yzm/public"
ServerName www.yzmedu1.com
<Directory "D:/laravel/yzmedu/yzm/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
3、重启服务
6、地址栏访问
www.yzmedu1.com
www.yzmedu2.com
如果出现 laravel 就安装成功
1、如何配置虚拟主机?
【修改本地 DNS 路由表:vhost】、
【修改 apache:修改 httpd.conf、修改 httpd-vhosts.conf】、
【重启服务】
1、修改本地 DNS 路由表
配置了 www.yzmedu1.com www.yzmedu2.com
2、修改 apache (larval 的网站根目录 在 Public 下)
修改 httpd.conf
Include conf/extra/httpd-vhosts.conf
修改 httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "D:/laravel/yzmedu/yzm/public"
ServerName www.yzmedu1.com
<Directory "D:/laravel/yzmedu/yzm/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
3、重启服务
2、composer 软件使用注意?
作用:主要【管理 PHP 中的依赖关系】,(类似与 Linux yum 源)
安装:默认安装,需要【勾选 php 启动程序】
检测是否安装成功:【命令行: composer】
1、作用
主要管理 PHP 中的依赖关系,(类似与 Linux yum 源)
2、可以安装软件
CURL #主要用在微信开发
Upload #文件操作
excel #表格
mail #邮件
log #日志
laravel #框架
3、下载地址
https://getcomposer.org/
4、安装
默认安装,需要勾选 php 启动程序
5、检测是否安装成功
命令行: composer
3、如何通过 composer 安装软件?
【composer.json】:切换到指定目录 新建 composer.json
编辑【composer.json】:{"require":{"monolog/monolog":"1.24.0"}} ,【require + 名称 + 版本】
执行命令:【composer install】
1、切换到指定目录 新建 composer.json
2、编辑文件
{
"require":{
"monolog/monolog": "1.20.0"
}
}
3、执行命令
composer install
4、laravel 的目录结构?
【核心代码】:app、【框架自动加载文件】:bootstrap
【界面文件】:resources、【网站主入口和前端资源】:public
【临时文件】:storage 、【自动化测试目录】:test
app 应用的核心代码
bootstrap 框架自动加载文件
config 配置文件
database 数据库迁移
public 网站主入口和前端资源
resources 界面文件
routes 路由目录
storage 临时文件
test 自动化测试目录
vendor composer 依赖包
5、laravel 工作原理?
【修改配置文件 - 连接数据库】-(.env)、
【设置路由】-(\routes\web.php)、
【操作控制器】比如写 index 方法 - (\app\Http\Controllers\IndexController.php)、
【编写页面 - view】- (\resources\views\user.blade.php)
1、框架链接数据库(D:\laravel\yzmedu\yzm2\.env) 修复配置文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=yzm
DB_USERNAME=root
DB_PASSWORD=123
2、设置路由 (D:\laravel\yzmedu\yzm2\routes\web.php); 设置路由
Route::get(''/user'',"IndexController@index");
3、切换到网站根目录,不是 public 目录
执行命令
php artisan make:controller IndexController
4、打开控制器 (D:\laravel\yzmedu\yzm2\app\Http\Controllers\IndexController.php) 操作控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class IndexController extends Controller
{
//index 方法
public function index(){
//echo "找呀找呀 终于找到了控制器";
$data=DB::table(''user'')->get();
return view(''user'')->with("data",$data);
}
}
5、需要新建页面 (D:\laravel\yzmedu\yzm2\resources\views\user.blade.php) (页面) 页面
@foreach($data as $value)
<tr>
<td>{{$value->id}}</td>
<td>{{$value->name}}</td>
<td>{{$value->pass}}</td>
<td>{{$value->statu}}</td>
<td>{{$value->time}}</td>
</tr>
@endforeach
6、用户在浏览器输入网址后,到返回界面中间经历了什么?
用户请求地址 ->【通过 路由 穿过 中间件 找到 控制器 】->
【 控制器 从 数据库 中获取数据】->
【 控制器 将数据展示到 页面 】-> 呈现给用户
其实可以就像这样从 mvc 的角度回答
图在正文中
7、laravel 中 mvc 分别对应的目录结构是什么?
M-(\app\User.php)
V-(\resources\views)
C-(\app\Http\Controllers)
M model 数据模型
D:\laravel\yzmedu\yzm2\app\User.php
V view 视图
D:\laravel\yzmedu\yzm2\resources\views
C controller 控制器
D:\laravel\yzmedu\yzm2\app\Http\Controllers
二、内容在总结中
laravel 工作原理:
我们今天的关于Laravel基础课 路由和MVC——模型和laravel路由实现原理的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 同时使用基于Web API和MVC的属性路由和基于约定的路由、Laravel Eloquent—模型间关系(关联)、laravel 基础课程 ---14、表单验证(lavarel 如何进行表单验证)、laravel 基础课程 ---1、laravel 安装及基础介绍(laravel 如何安装)的相关信息,可以在本站进行搜索。
本文标签: