laravel入门笔记

 : jank    :   : 2762    : 2016-07-26 10:09  php

<?php

laravel

    首先安装好composer,注:composer需要使用普通用户安装

    1.下载composer:“curl -sS https://getcomposer.org/installer | php”如果报错则使用’php -r "readfile('https://getcomposer.org/installer');" | php‘,把下载好的composer.phar文件mv ./composer.phar /usr/local/bin/composer 方便全局调用,直接composer不需要php oomposer.phar 来执行命令。

    2.使用composer 下载laravel:‘ composer global require "laravel/installer=~1.1" ’。

    3.把普通用户目录下的‘.composer/vendor/bin’路径放在/etc/profile中的path上,使得laravel可以直接当做命令执行。

    4.laravel new blog 创建一个名为blog的laravel框架

    5.进入blog下的public 执行 php -S 0.0.0.0:1024

    6.打开网站:ai.jankl.com:1024 如果出现laravel界面说明安装成功

    7.修改blog目录下的隐藏配置文件.evn 修改其中的mysql配置

    8.创建用户首先执行:php artisan make:auth,

    9.执行命令:php artisan migrate 进行数据迁移,在blogs数据库中创建了三张表:migrations,password_resets,users

    10.进入网页注册用户将会在数据库blogs中出现users表并有新的用户写入

    11. 一。使用laravel中的migration创建数据表 php artisan make:migration create_articles_table

        二。在database/migrations/新建的文件 中的up方法中加入:

        Schema::create('articles', function(Blueprint $table)

            {

                $table->increments('id');

                $table->string('title');

                $table->text('body')->nullable();

                $table->integer('user_id');

                $table->timestamps();  //注:默认必须加

            });

        三。php artisan migrate

    12.使用artisan生成Seeder

       Seeder 是我们接触到的一个新概念,字面意思为播种机。Seeder 解决的是我们在开发 web 应用的时候,需要手动向数据库中填入假数据的繁琐低效问题。

       php artisan make:seeder ArticleSeeder

        1.我们会发现 learnlaravel5/database/seeds 里多了一个文件 ArticleSeeder.php,修改此文件中的 run 函数为:

        public function run()  

        {

            DB::table('articles')->delete();


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

                AppArticle::create([

                    'title'   => 'Title '.$i,

                    'body'    => 'Body '.$i,

                    'user_id' => 1,

                ]);

            }

        }

        2.修改database/seeds/DatabaseSeeder.php 中的 run 函数为:

            public function run()  

            {

                $this->call(ArticleSeeder::class);

            }

        3.由于 database 目录没有像 app 目录那样被 composer 注册为 psr-4 自动加载,采用的是 psr-0 classmap 方式,所以我们还需要运行以下命令把 ArticleSeeder.php 加入自动加载系统,避免找不到类的错误:

          composer dump-autoload  注:非root用户执行

        4.執行php artisan db:seed  


dd()函数是laravel自定义的打印函数,注一个方法中只能使用一次,并且后面的不执行。


2016 10/10

    中间件

        1.作用: 除身份验证,中间件也可以被用来执行各式各样的任务,CORS 中间件负责替所有即将离开程序的响应加入适当的响应头,一个日志中间件可以记录所有传入应用程序的请求。

        Laravel 框架已经内置一些中间件,包括维护、身份验证、CSRF 保护,等等。所有的中间件都位于

        app/Http/Middleware 目录内。 HTTP 请求在实际碰触到应用程序之前,最好是可以层层通过许多中间件,每一层都可以对请求进行检查,甚至是完全拒绝请求。

        2.新建中间件:php artisan make:middleware HomeMiddleware   

            注意:php -v 查看当前php版本是否大于5.9,laravel5.1要求

    控制器

        1.控制器可将相关的 HTTP 请求处理逻辑组成一个类。控制器通常存放在 app/Http/Controllers 此目录中。

        2.创建控制器:php artisan make:controller HomeController

        3.控制器使用中间件的两种方法:

            1.在路由中配置:

                Route::get('article', [

                    'middleware' => 'auth',

                    'uses' => 'UserController@article'

                ]);

            2.在控制器自动加载函数中配置:

                public function __construct()

                {

                    $this->middleware('auth');


                    $this->middleware('log', ['only' => ['fooAction', 'barAction']]);


                    $this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);

                }

        4.restful资源控制器

            Route::resource('photo', 'PhotoController');

            有如下几种自带函数:

                动词  路径              行为  路由名称

                GET /photo              索引  photo.index

                GET /photo/create       创建  photo.create

                POST/photo              保存  photo.store

                GET /photo/{photo}      显示  photo.show

                GET /photo/{photo}/edit 编辑  photo.edit

                PUT/PATCH /photo/{photo}更新  photo.update

                DELETE  /photo/{photo}  删除  photo.destroy

    请求

        1.取得输入数据

            取得特定输入数据

            例:

            use IlluminateHttpRequest;           //使用Request时需添加


            public function article(Request $request){

                $name = $request->input('name', 'jank');//接收name,默认值为jank


                if($request->has('name')){//判断是否有输入数据

                    echo $request->input('name'); 

                }


                $all = $request->all();//取得所有输入数据


                //取得部分发出请求时传入的输入数据:

                $input = $request->only('username', 'password');


                $input = $request->except('credit_card');

                //如果是「数组」形式的输入数据,可以使用「点」语法取得数组:

                $input = $request->input('products.0.name');


                //flash 方法会将当前的输入数据存进 session中,所以下次用户发出请求时可以使用保存的数据:

                Request::flash();


                //将部分输入数据存成一次性 Session

                Request::flashOnly('username', 'email');


                Request::flashExcept('password');


                //快闪及重定向


                // 你很可能常常需要在重定向至前一页,并将输入数据存成一次性 Session。只要在重定向方法后的链式调用方法中传入输入数据,就能简单地完成。

                return redirect('form')->withInput();


                return redirect('form')->withInput(Request::except('password'));


                //若想要取得前一次请求所保存的一次性 Session,你可以使用 Request 实例中的 old 方法。

                $username = Request::old('username');

                

                //如果你想在 Blade 模板显示旧输入数据,可以使用更加方便的辅助方法 old :

                {{ old('username') }}


            }

        2.Cookie

            SymfonyComponentHttpFoundationCookie 实例。可以在 Response 实例之后连接 withCookie 方法带入 cookie 至响应:


            $response = new IlluminateHttpResponse('Hello World');


            $response->withCookie(cookie('name', 'value', $minutes));//设置cookie

            $response->withCookie(cookie()->forever('name', 'value'));//设置永不过期的cookie

        3.上传文件

            //上传页面

            public function upfile(){

                return view('upfile');

            }

            

            <html>

                <head>

                    <title>

                    上传文件

                    </title>

                </head>

                    <body>

                        <form action="upfiles" method="post" enctype="multipart/form-data">

                            <input type="file" name="filefield">

                            <input type="hidden" name="_token" value="{{ csrf_token() }}" />

                            <input type="submit">

                        </form>

                    </body>

            </html>

            //上传方法

            public function upfiles(){                

                $file = Request::file('filefield');

                $clientname = $file -> getClientOriginalName();   //获取上传文件名

                $houzhui = $file->getClientOriginalExtension();   //获取上传文件后缀

                echo $houzhui;

                $path = $file->move("./", $clientname);

            }

            //配置路由

                Route::get('upfile', 'HomeController@upfile');

                Route::post('upfiles', 'HomeController@upfiles');

        4.其他请求

            1.取得请求url

            $url = Request::path();


            $url = Request::url();

            2.判断一个请求是否使用了ajax

            if(Request::ajax()){

                echo '该请求使用了ajax';

            }


            3.判断请求方法

            if(Request::isMethod('post')){

                echo '该请求方法为post';

            }


            4.取得请求方法

            $method = Request::method();


            5.确认请求路径是否符合特定格式


            if (Request::is('admin/*'))

            {

                echo '当前请求符合特定格式';

            }


    CRUD方法:

        1.新建

            //上传信息

            $ok = DB::table('coments')->insert(['user_name' => 'jank', 'age' => 23]);


            //上传信息,并返回行id

            $id = DB::table('coments')->insertGetId(['user_name' => 'jank', 'age' => 23]);


            //一次上传多列信息

            $ok = DB::table('coments')->insert(

                ['user_name' => 'jank', 'age' => 23],

                ['user_name' => 'jank1', 'age' => 23],

                ['user_name' => 'jank2', 'age' => 23]

            );


        2.修改

            //修改一个列

            DB::table('coments')->where('id', 1)->update(['age' => 22]);


            //自增或自减一个字段的值

            DB::table('users')->increment('age');


            DB::table('users')->increment('age', 5);


            DB::table('users')->decrement('age');


            DB::table('users')->decrement('age', 5);

            

            //也能够同时指定其他要更新的字段:

            DB::table('users')->increment('age', 1, ['name' => 'John']);


        3.删除

            //删除数据表中的数据

            DB::table('coments')->where('age', '>', 132)->delete();

   

            //删除数据表中的所有数据

            DB::table('coments')->delete();

   

            //清空数据表

            DB::table('coments')->truncate();


        4.查询

            //get所有数据

            DB::table('coments')->get();


            //从数据表中取得单一数据列

            $user = DB::table('users')->where('name', 'John')->first();

            var_dump($user->name);


            //从数据表中取得单一数据列的单一字段

            $name = DB::table('users')->where('name', 'John')->pluck('name');

            

            //取得单一字段值的列表,得到数组

            $roles = DB::table('roles')->lists('title');


            //指定查询子句 (Select Clause)

            $users = DB::table('users')->select('name', 'email')->get();

            $users = DB::table('users')->distinct()->get();

            $users = DB::table('users')->select('name as user_name')->get();


            //增加查询子句到现有的查询中

            $query = DB::table('users')->select('name');

            $users = $query->addSelect('age')->get();


            //使用 where 及运算符

            $users = DB::table('users')->where('votes', '>', 100)->get();

            //or」语法

            $users = DB::table('users')

                                ->where('votes', '>', 100)

                                ->orWhere('name', 'John')

                                ->get();

            //使用 Where Between

            $users = DB::table('users')->whereBetween('votes', [1, 100])->get();


            //使用 Where Not Between

            $users = DB::table('users')

                                ->whereNotBetween('votes', [1, 100])->get();

            //使用 Where In 与数组

            $users = DB::table('users')->whereIn('id', [1, 2, 3])->get();


            $users = DB::table('users')->whereNotIn('id', [1, 2, 3])->get();


            //使用 Where Null 找有未配置的值的数据

            $users = DB::table('users')->whereNull('updated_at')->get();


            //排序(Order By)、分群(Group By) 及 Having

            $users = DB::table('users')

                                ->orderBy('name', 'desc')

                                ->groupBy('count')

                                ->having('count', '>', 100)

                                ->get();


            //偏移(Offset) 及 限制(Limit)

            $users = DB::table('users')->skip(10)->take(5)->get();

            

            //基本的 Join 语法

            DB::table('users')

                        ->join('contacts', 'users.id', '=', 'contacts.user_id')

                        ->join('orders', 'users.id', '=', 'orders.user_id')

                        ->select('users.id', 'contacts.phone', 'orders.price')

                        ->get();


            //Left Join 语法

            DB::table('users')

                    ->leftJoin('posts', 'users.id', '=', 'posts.user_id')

                    ->get();


            //你也可以指定更高级的 join 子句:

            DB::table('users')

                    ->join('contacts', function($join)

                    {

                        $join->on('users.id', '=', 'contacts.user_id')->orOn(...);

                    })

                    ->get();


    发表评论

    public function store(){

        $user = Request::input('user');

        $body = Request::input('body');

        $file = Request::file('filename');

        $insert = "['user_name' => $user, 'body' => $body]";

        if(!empty($file)){

            $clientname = date('YmdHis') . '.' . $file -> getClientOriginalExtension();

            $path = $file->move("./text", $clientname);

            $filepath = "http://ai.jankl.com/blog/public/text/$clientname";

            $jank = DB::table('coments')->insert(['user_name' => $user, 'body' => $body, 'photo' => $filepath]);

        }else{

            $jank = DB::table('coments')->insert(['user_name' => $user, 'body' => $body]);

        }

    }




   

备案编号:赣ICP备15011386号

联系方式:qq:1150662577    邮箱:1150662577@qq.com