Larvel 手册梳理

artisan 
  • 路由缓存:
          php artisan route:cache
          php artisan route:clear
  • 创建中间件
          php artisan make:middleware Middlewarename
  • 创建控制器
          php artisan make:controller PhotoController
  • 创建服务
          php artisan make:provider RiakServiceProvider
  • 数据库迁移
          php artisan make:migration create_users_table //--table和--create选项可以用于指定表名以及该迁移是否要创建一个新的数据表
          php artisan migrate
          php artisan migrate:rollback //回滚迁移
          php artisan migrate:reset //回滚所有应用迁移
          php artisan migrate:refresh //重建数据库
  • 数据填充器
          php artisan make:seeder UserTableSeeder
  • 生成 Eloquent 模型
          php artisan make:model User






  • 基本路由
          Route::get('/', function () { return 'Hello World'; });
          Route::post('foo/bar', function () { return 'Hello World'; });
          Route::put('foo/bar', function () { // });
          Route::delete('foo/bar', function () { // });
          Route::match(['get', 'post'], '/', function () { return 'Hello World'; });//多个动作注册路由
          Route::any('foo', function () { return 'Hello World'; });//相应所有动作
  • CSRF 保护
          表单中缴入隐藏字段
          
          
  • HTML 表单没有支持 PUT 、PATCH 或 DELETE 请求,可使用_method 字段,
  • 路由参数
          Route::get('user/{id?}/{name}', function($id=1)
          {
              //
          })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
          ?为可选参数,可设置参数默认值,或者使用正则表达式限制参数格式。
  • 取得路由参数
          $route->input('id');//使用input方法
          Route::get('user/{id}', function(Request $request, $id){ if ($request->route('id')) { // }});//使用Request
  • 命名路由
          Route::get('user/profile', [ 'as' => 'profile', 'uses' => 'UserController@showProfile']);
          将路由命名为profile,并且此路由使用控制器showProfile方法。
          $url = route('profile');//获取路由url,等价于url('user/profile');
          $redirect = redirect()->route('profile');//重定向到之前的路由
  • 路由群组
          Route::group(['prefix' => 'admin', 'middleware' => ['foo', 'bar'], 'namespace' => 'Admin'], function()
          {
              Route::get('/', function() { // Has Foo And Bar Middleware });
              Route::get('user/profile', function() { // Has Foo And Bar Middleware });
          });
          prefix关键字定义路由前缀
          middleware关键字定义使用的中间件
          namespace定义命名空间,控制器以及页面文件都在相应文件夹下的Admin子文件夹下
  • 抛出 404 错误
          abort(404);
  • 全局中间件
          app/Http/Kernel.php 的$middleware 属性清单列表中
  • 控制器
          $url = action('App\Http\Controllers\FooController@method');
          或者
          URL::setRootControllerNamespace('App\Http\Controllers'); $url = action('FooController@method');
  • 隐式控制器
          Route::controller('users', 'UserController', ['anyLogin' => 'user.login']);//将anyLogin()重命名了
          class UserController extends Controller
          {
              public function getIndex() { // }
              public function postProfile() { // }
              public function anyLogin() { // }
              public function getAdminProfile() {}//响应 users/admin-profile
          }
  • RESTful 资源控制器
          Route::resource('photo', 'PhotoController', ['only' => ['index', 'show']]);//使用only/except来规定或者排除特定方法
动词 路径 行为 路由名称
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
  • HTTP 请求
          取得特定输入数据你可以通过 Illuminate\Http\Request 的实例,经由几个简洁的方法取得所有的用户输入数据。不需要担心发出请求时使用的 HTTP 请求,取得输入数据的方式都是相同的。
         public function store(Request $request)
         {
              $name = $request->input('name');
             //
         }
    
          取得特定输入数据,若没有则取得默认值:$name = Request::input('name', 'Sally');
          确认是否有输入数据:if (Request::has('name')){ // }
          取得所有发出请求时传入的输入数据:$input = Request::all();
          取得部分发出请求时传入的输入数据:$input = Request::only('username', 'password'); $input = Request::except('credit_card');
          如果是「数组」形式的输入数据,可以使用「点」语法取得数组:$input = Request::input('products.0.name');
  • 旧输入数据
          将当前的输入数据存进 session中,所以下次用户发出请求时可以使用保存的数据:Request::flash();/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('username') }}
  • 上传文件
          取得上传文件$file = Request::file('photo');
          确认文件是否有上传if (Request::hasFile('photo')){ // }
          确认上传的文件是否有效if (Request::file('photo')->isValid()){ // }
          移动上传的文件Request::file('photo')->move($destinationPath); Request::file('photo')->move($destinationPath, $fileName);

          取得请求 URI$uri = Request::path();
          判断一个请求是否使用了 AJAXif (Request::ajax()){ // }
          取得请求方法$method = Request::method(); if (Request::isMethod('post')){ // }
          确认请求路径是否符合特定格式if (Request::is('admin/*')){ // }
          取得请求 URL$url = Request::url();
  • Http响应
          use Illuminate\Http\Response;
          return (new Response($content, $status)) ->header('Content-Type', $value);
          return response($content, $status) ->header('Content-Type', $value);

          return response()->view('hello')->header('Content-Type', $type);//在响应送出视图
          return response($content)->withCookie(cookie('name', 'value'));//附加 Cookies 到响应

          return redirect('user/login');//重定向
          return redirect('user/login')->with('message', 'Login Failed');//返回重定向并且加上快闪数据( Flash Data )

          return redirect()->back();//返回根据前一个 URL 的重定向
          return redirect()->back()->withInput();

          return redirect()->route('profile', [1]);//返回根据路由名称的重定向,并给予路由参数赋值如果你的路由有参数,你可以放进 route 方法的第二个参数。
          return redirect()->route('profile', [$user]);//如果你要重定向至路由且路由的参数为 Eloquent 模型的「ID」,你可以直接将模型传入,ID 将会自动被提取:
          return redirect()->route('profile', ['user' => 1]);//返回根据路由名称的重定向,并给予特定名称路由参数赋值,路由的 URI 为:profile/{user}

          return redirect()->action('App\Http\Controllers\HomeController@index');//返回根据控制器动作的重定向
          return redirect()->action('App\Http\Controllers\UserController@profile', [1]);
          return redirect()->action('App\Http\Controllers\UserController@profile', ['user' => 1]);//返回根据控制器动作的重定向,并给予特定名称参数赋值

  • 视图
          传递数据到视图(通过Blade的{{}}语句显示)
          使用传统的方法 $view = view('greeting')->with('name', 'Victoria');
          使用魔术方法 $view = view('greeting')->withName('Victoria');
          直接在 view 辅助方法的第二个参数直接传递一个数组$view = view('greetings', $data);

          默认情况下,Blade的{{ }}语句已经通过PHP的htmlentities函数处理以避免XSS攻击,如果你不想要数据被处理,可以使用如下语法:Hello, {!! $name !!}.

          确认视图是否存在if (view()->exists('emails.customer'))
          从一个文件路径产生视图return view()->file($pathToFile, $data);

          视图间共享数据,需要在服务提供者的boot方法中调用share方法,你可以将其添加到AppServiceProvider或生成独立的服务提供者来存放它们
          public function boot()
         {
             view()->share('key', 'value');
         }

  • Blade
          @section和@yield指令,前者正如其名字所暗示的,定义了一个内容的片段,而后者用于显示给定片段的内容
          通过如下方式显示name变量的内容
               Hello, {{ $name }}.
               The current UNIX timestamp is {{ time() }}.注意:Blade的{{}}语句已经经过PHP的htmlentities函数处理以避免XSS攻击。
               由于很多JavaScript框架也是用花括号来表示要显示在浏览器中的表达式,可以使用@符号来告诉Blade渲染引擎该表达式应该保持原生格式不作改动。比如:Hello, @{{ name }}.
               输出存在的数据{{ $name or 'Default' }}
               默认情况下,Blade的{{ }}语句已经通过PHP的htmlentities函数处理以避免XSS攻击,如果你不想要数据被处理,可以使用如下语法:Hello, {!! $name !!}.

          Blade还允许你在视图中定义注释:{{-- This comment will not be present in the rendered HTML --}}


  • 运行原生SQL查询
          $users = DB::select('select * from users where active = ?', [1]);
          $results = DB::select('select * from users where id = :id', ['id' => 1]);
          DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
          $affected = DB::update('update users set votes = 100 where name = ?', ['John']);
          $deleted = DB::delete('delete from users');
          DB::statement('drop table users');

          $users = DB::table('users')->get();//从一张表中取出所有行 
          $user = DB::table('users')->where('name', 'John')->first();//从一张表中获取一行/一列
          DB::table('users')->chunk(100, function($users) { foreach ($users as $user) { // } });//从一张表中获取组块结果集
          $titles = DB::table('roles')->lists('title');//获取数据列值列表
          $price = DB::table('orders') ->where('finalized', 1) ->avg('price');//count, max, min, avg, 和 sum等聚合函数
          $users = DB::table('users')->select('name', 'email as user_email')->get();
          $users = DB::table('users')->where('votes', '<>', 100)->get();
          $users = DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get();

          [ Laravel 5.1 文档 ] 数据库 —— 查询构建器

  • 编写迁移
          Schema::create('users', function ($table) { $table->increments('id'); });//创建表
          Schema::rename($from, $to);//重命名
          Schema::drop('users');
          Schema::dropIfExists('users');//删除表
          Schema::table('users', function ($table) { $table->string('email'); });//创建列
          
           [ Laravel 5.1 文档 ] 数据库 —— 迁移
          

  • Eloquent ORM
          默认规则是模型类名的复数作为与其对应的表名,你也可以在模型中定义table属性来指定自定义的表名:protected $table = 'my_flights';
          
    • [ Laravel 5.1 文档 ] Eloquent ORM

          

你可能感兴趣的:(Larvel 手册梳理)