GVKun编程网logo

Laravel基础课 路由和MVC——模型(laravel路由实现原理)

22

此处将为大家介绍关于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路由实现原理)

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的属性路由和基于约定的路由

c# – 同时使用基于Web API和MVC的属性路由和基于约定的路由

我有一个使用基于约定的路由的 Asp.net MVC Web应用程序.我最近添加了一些Web Api 2控制器,我使用了属性路由.尽管文档声称您可以同时使用两者,但我可以使(属性路由)API方法起作用,或者(常规路由)Web应用程序方法.

这是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}路由.

解决方法

发生的事情是“首次注册”路线正在生效.如果我将MVC路由定义为
{控制器} / {行动} / {ID}

和定义为的Web API路由

{控制器} / {行动} / {ID}

第一条注册路线将生效.

为什么会这样?想象一下,您向服务器发送请求

富/酒吧/ 1

这匹配哪条路线?

都!

无论使用何种路由,它都将选择与路由匹配的第一个结果.如果您想了解如何使这些路由工作的示例,请查看此link

Laravel Eloquent—模型间关系(关联)

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 如何进行表单验证)

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

英 [krɪpt]  美 [krɪpt] 
  • 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 如何安装)

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 如何安装)的相关信息,可以在本站进行搜索。

本文标签: