作为程序员一定要保持良好的睡眠,才能好编程

第六课 laravel env blade config相关说明

发布时间:2020-03-13

$data=[

    "user"=>"name",

    "age"=>18

];


$title="这是laravel课程";


return view("welcome",$data); //把数组$data 注入

return view("welcome")->with("user",$title);   //注入一个变量

return view("welcome",compact("data","title"));


以上是三种不同的注入方式,compact 这种方法最合适。    data 等于 $data  title 等于 $title

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>







组件&插槽

<!-- /resources/views/alert.blade.php -->

<div class="alert alert-danger">
    {{ $slot }}
</div>


{{ $slot }} 变量将包含我们想要注入到组件的内容。现在,我们使用 Blade 的 @component 指令构建这个组件

@component('alert')
    <strong>Whoops!</strong> Something went wrong!
@endcomponent


@component('alert', ['foo' => 'bar'])

    ...
@endcomponent






blade模版解析

{{$name}} 输出变量 $name


@{{$name}} 原样输出及解析  和 javascript框架 




@verbatim 指令

如果你在模板中显示了很大一部分的 JavaScript 变量,可以将 HTML 套嵌在 @verbatim 指令中,这样就不必在每个 Blade 回显语句前面加上 @ 符号了:

@verbatim
    <div class="container">
        Hello, {{ name }}.
    </div>
@endverbatim







{{$title or '没有'}}   //当$title 为空时,显示没有

{{isset($name)?$name:xxx}} //


<h1>{{$title}}</h1>
<h1>{{$bbb or "没有"}}</h1>
<h1>@{{$bbb or "没有"}}</h1>
{{isset($title)?$title:"xxx"}}

{{!!$str!!}}  显示非转义字符#


@if($data['aaa']>60)
    及格
@else
    不及格
@endif

@for($i=0;$i<10;$i++)
    
    {{$i}}

@endfor


循环
@foreach($arr as $key=>$val)

{{$val}}

@endforeach


基于foreach 来写的

@forelse($attr as $key=>$val)
{{$val}}
@empty
没有数据
@endforelse


@if( !empty($data) && $data->total())
    @foreach($data as $k=>$v)
        <tr>
            <td class="text-center">
                {{$k+1}}
            </td>
            <td class="text-center">
                {{$v->hospital_name}}
            </td>
            <td class="text-center">
                <a href="/clinic/countOrderList/?hospital_id={{$v->hospital_id}}" class="join_room">查看详情</a>
            </td>
        </tr>
    @endforeach
@else
    <tr>
        <td colspan="6" style="color: red">
            未找到相应的统计数据
        </td>
    </tr>
@endif





@switch($i)
    @case(1)
        First case...
        @break

    @case(2)
        Second case...
        @break

    @default
        Default case...
@endswitch


@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

@foreach ($users as $user)
    <p>This is user {{ $user->id }}</p>
@endforeach

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>No users</p>
@endforelse

@while (true)
    <p>I'm looping forever.</p>
@endwhile


@foreach ($users as $user)
    @continue($user->type == 1)

    <li>{{ $user->name }}</li>

    @break($user->number == 5)
@endforeach


循环变量 在循环体内有一个可用的 $loop 变量。该变量提供了用于访问诸如当前循环的索引、当前是否为第一次或最后一次循环之类的少数有用的信息的途径

@foreach ($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif

    @if ($loop->last)
        This is the last iteration.
    @endif

    <p>This is user {{ $user->id }}</p>
@endforeach


$loop->index	当前迭代的索引 (从 0 开始计数)。
$loop->iteration	当前循环迭代 (从 1 开始计算)。
$loop->remaining	循环中剩余迭代的数量。
$loop->count	被迭代的数组元素的总数。
$loop->first	是否为循环的第一次迭代。
$loop->last	是否为循环的最后一次迭代。
$loop->even	是否是循环中的偶数迭代。
$loop->odd	是否是循环中的奇数迭代。
$loop->depth	当前迭代的嵌套深度级数。
$loop->parent	嵌套循环中,父循环的循环变量。

@php    


@endphp







引入头部和底部

@include("Common.header")

页面代码放在这里

@include("Common.footer")

Common.footer  这个文件位于  Views/Common/footer.blade.php



也可以使用模版文件

建立:
layouts/home.blade.php
代码如下:

<!DOCTYPE html>
<html>
    <head>
        <title>Laravel</title> 
    </head>
    <body>
        <div class="container">
            <div class="content">
               
               @yield("content");
                              
            </div>
        </div>
    </body>
</html>

建立:
t.blade.php

代码如下:

@extends("layouts.home");


y1.png

y2.pngy3.png


这是@include 方法引入的。




下面来看看layouts如何使用


y4.png

y5.png



第二种:


y8.png


y9.png


具体看代码吧

layouts.home2.blade.php

<!DOCTYPE html>
<html>
    <head>
        <title>Laravel</title>
        <style type="text/css">
            .header{
                height: 100px;
                background: pink;
            }
            .mainer{
                height: 450px;
                background:palegreen;
            }
            
            .footer{
                height: 100px;
                background: #0066ff;
            }
        </style>
    </head>
    <body>

    <div class="header">
        header
    </div>


    @section("content")

        末班

    @show

    <div class="footer">
        footer
    </div>


    </body>
</html>


m3.blade.php

@extends("layouts.home2")

@section('content')

    @parent

    <br>

    <h1>asdfasdfasdf</h1>

@endsection







Laravel如何连接数据库


修改.env配置文件

位于项目的根目录 .env


y22.png


修改数据库的配置文件

<?php

public function index(){

    $pdo=DB::connection()->getPdo();
    
    dd($pdo);
    
    
    
    $users=DB::table("user")->get();
    
    $users=DB::table("user")->where("user_id",">",1)->get();

}


?>


使用上述代码来链接数据库,这并不是全部,需要再去查看文档,看使用方法


env("DB_HOST","127.0.0.1");  直接读取  .env 的配置文件,如果不存在DB_HOST  就返回   127.0.0.1


config("app.key");   读取 config/app.php 文件中的 key 内容



其他blade命令:

1、如何在页面模版中声明变量

某些情况下,在视图中嵌入 PHP 代码很有用。可以在模板中使用 @php 指令执行原生的 PHP 代码块:

@php

$User_Agent=app('request')->header('User-Agent');

@endphp


{{$User_Agent}}

useragent.png

2、blade注释命令

Blade 也允许在视图中定义注释。不过与 HTML 注释不同,Blade 注释不会包含在返回给应用的 HTML 中:

{{-- This comment will not be present in the rendered HTML --}}


3、包含文件 引入子视图

@include

@include('shared.errors')


@include('view.name', ['some' => 'data'])


@includeIf('view.name', ['some' => 'data'])


@includeWhen($boolean, 'view.name', ['some' => 'data'])

@includeFirst(['custom.admin', 'admin'], ['some' => 'data'])


@include('view.name', ['some' => 'data'])

如果传递给 @include 一个不存在的视图,Laravel 会抛出错误。想要包含一个不能确定存在与否的视图,需要使用 @includeIf 指令:


@includeIf('view.name', ['some' => 'data'])

想要包含一个依赖于给定布尔条件的视图,可以使用 @includeWhen 指令:


@includeWhen($boolean, 'view.name', ['some' => 'data'])

要包含给定视图数组中第一个存在的视图,可以使用 includeFirst 指令:


@includeFirst(['custom.admin', 'admin'], ['some' => 'data'])

应当尽量避免在 Blade 视图中使用 __DIR__ 和 __FILE__ 魔术常量,因为它们将指向缓存中经过编译的视图的位置




4、Method 域

HTML 表单不能发出 PUT、 PATCH 及 DELETE 请求,需要加入隐藏的 _method 域来模仿这些 HTTP 动词。Blade 的 @method 指令能够帮你创建这个域:

<form action="/foo/bar" method="POST">
    @method('PUT')
    ...
</form>



5、CSRF 域

只要在应用中定义了 HTML 表单,就一定要在表单中包含隐藏的 CSRF 令牌域,这样一来 CSRF 保护 中间件就能校验请求。可以使用 Blade 的 @csrf 指令生成令牌域:


<form method="POST" action="/profile">
    @csrf
    ...
</form>



6、其他指令

显示数据
Route::get('greeting', function () {
    return view('welcome', ['name' => 'Samantha']);
});
就可以这样利用 name 变量显示其内容:
Hello, {{ $name }}.
不限于显示传递给视图的变量的内容,你还可以显示任一 PHP 函数的结果。实际上,你可以在 Blade 的回显语句中放置你想要的任意 PHP 代码:
The current UNIX timestamp is {{ time() }}.
默认情况下, Blade 中 {{ }} 语句自动经由 PHP 的 htmlspecialchars 函数传递以防范 XSS 攻击。如果不希望数据被转义,可以使用下面的语法:
显示非转义字符
Hello, {!! $name !!}.
渲染 JSON
<script>
    var app = @json($array);
</script>
@switch($i)
    @case(1)
        First case...
        @break
    @case(2)
        Second case...
        @break
    @default
        Default case...
@endswitch
@foreach ($users as $user)
    @if ($user->type == 1)
        @continue
    @endif
    <li>{{ $user->name }}</li>
    @if ($user->number == 5)
        @break
    @endif
@endforeach
@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach
@endforeach
$loop 变量还包含其它几种有用的属性:
属性描述
$loop->index当前迭代的索引(从 0 开始计数)。
$loop->iteration当前循环迭代 (从 1 开始计算)。
$loop->remaining循环中剩余迭代的数量。
$loop->count被迭代的数组元素的总数。
$loop->first是否为循环的第一次迭代。
$loop->last是否为循环的最后一次迭代。
$loop->depth当前迭代的嵌套深度级数。
$loop->parent嵌套循环中,父循环的循环变量








Model类如如何使用?


php artisan make:model Article


这样来创建一个Article Model类,创建的文件默认会在根目录下。


如何去把它放在其他目录呢?  放在 app/Http/Model 这个目录下:


把 namespace 修改成对应的目录


Laravel默认以上以复数形式展现,自动的。所以要改一下表名:


protected $table=""

protected $primarykey=""

protected $timestamps=false