Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CodeIgniter4
CodeIgniter4
CodeIgniter3
Tetsuro Yoshikawa
@iBotchME
1 / 57
!
CodeIgniter4 CodeIgniter3
CodeIgniter4
2 / 57
3 / 57
[ ] CodeIgniter 3 4
4 / 57
[ ] CodeIgniter 3 4
CodeIgniter3 CodeIgniter4
CI_Controller Config/Services
PHP5.2 (PHP5.4 )
CI3.1.x 5.3 5.5
PHP7
namespace...
[ ]
6 / 57
[ ]
CodeIgniter3 CodeIgniter4
_
)
getX null
isX boolean
etc...
|| && ! || && !
7 / 57
Directory
8 / 57
CI3
└──	
  application
	
  	
  	
  	
  ├──	
  cache
	
  	
  	
  	
  ├──	
  config
	
  	
  	
  	
  ├──	
  controllers
	
  	...
CI3
└──	
  application
	
  	
  	
  	
  ├──	
  cache
	
  	
  	
  	
  ├──	
  config
	
  	
  	
  	
  ├──	
  controllers
	
  	...
CI3
└──	
  system
	
  	
  	
  	
  ├──	
  core
	
  	
  	
  	
  ├──	
  database
	
  	
  	
  	
  ├──	
  fonts
	
  	
  	
  	
 ...
CI3
└──	
  system
	
  	
  	
  	
  ├──	
  core
	
  	
  	
  	
  ├──	
  database
	
  	
  	
  	
  ├──	
  fonts
	
  	
  	
  	
 ...
[ ] CodeIgniter4 Directory
CI4
├──	
  public
│	
  	
  	
  ├──	
  favicon.ico
│	
  	
  	
  ├──	
  index.php
│	
  	
  	
  └─...
Directory
Directory
writable
index.php
system core
14 / 57
[ ] CodeIgniter.php
index.php
15 / 57
[ ] index.php
16 / 57
[ ] index.php
CodeIgniter3 CodeIgniter4
1. APPPATH FCPATH 1. APPPATH FCPATH
2.
3.
4. Exception
2. CodeIgniter.php (require...
[ ] CodeIgniter.php
18 / 57
[ ] CodeIgniter.php
CodeIgniter3 CodeIgniter4
1. PHP
2. core 1. Request Response Cache
3. Router Controller method 2. Requ...
[ ] CodeIgniter.php index.php
AutoLoader
CodeIgniter.php
Controller
Exception 404
Filter
20 / 57
[ ] MVC
21 / 57
[ ] Controller
22 / 57
[ ] Controller::CodeIgniter3
<?php
class	
  Home	
  extends	
  CI_Controller
{
	
  	
  	
  	
  public	
  function	
  __con...
[ ] Controller::CodeIgniter4
<?php	
  namespace	
  AppControllers;
class	
  Home	
  extends	
  CodeIgniterController
{
	
 ...
[ ] Controller::CodeIgniter4
constructor injection
request RequestInterface
response ResponseInterface
logger LogLogger
25...
[ ] Model
26 / 57
[ ] Model::CodeIgniter3
<?php
class	
  Hogehoge	
  extends	
  CI_Model
{
	
  	
  	
  	
  public	
  function	
  __construct...
[ ] Model::CodeIgniter4
<?php	
  namespace	
  AppModel;
class	
  HogehogeModel	
  extends	
  CodeIgniterModel
{
	
  	
  	
...
ORM
29 / 57
Model::CodeIgniter 4 ORM
<?php	
  namespace	
  AppModel;
class	
  HogehogeModel	
  extends	
  CodeIgniterModel
{
	
  	
  	...
View
31 / 57
[ ] View::CodeIgniter3
<!DOCTYPE	
  html>
<html>
	
  	
  	
  	
  <head>
	
  	
  	
  	
  	
  	
  	
  	
  <title>Hogehgoe</t...
[ ] View::CodeIgniter4
<!DOCTYPE	
  html>
<html>
	
  	
  	
  	
  <head>
	
  	
  	
  	
  	
  	
  	
  	
  <title>Hogehgoe</t...
[ ]
$this new
ORM
ORM CI3 QueryBuilder
namespace
34 / 57
35 / 57
CodeIgniter4
Todo
36 / 57
[ ] Controller::Todo
<?php	
  namespace	
  AppControllers;
use	
  AppModels	
  as	
  Model;
class	
  Todo	
  extends	
  Co...
[ ] Controller::Todo On/Off
...
	
  	
  public	
  function	
  dead_or_live(string	
  $id	
  =	
  null)
	
  	
  {
	
  	
  	...
[ ] Controller::Todo /
...
	
  	
  public	
  function	
  save()
	
  	
  {
	
  	
  	
  	
  if	
  ($this-­‐>request-­‐>getMe...
[ ] TodoUseORMModel::ORM
<?php	
  namespace	
  AppModels;
//	
  CI_Model	
  =>	
  CodeIgniterModel
class	
  TodoUseORMMode...
[ ] Model ORM
primaryKey string id PrimaryKey
returnType string array (array|object)
useSoftDeletes boolean false
Delete
t...
[ ] TodoUseORMModel::
//	
  UseORM ORM find 使 実装
	
  	
  public	
  function	
  exists($id)
	
  	
  {
	
  	
  	
  	
  //	
 ...
[ ] TodoModel::
<?php	
  namespace	
  AppModels;
use	
  AppLibrariesValidation;
class	
  TodoModel
{
	
  	
  private	
  $v...
[ ] TodoModel::
	
  	
  public	
  function	
  doSave($input)
	
  	
  {
	
  	
  	
  	
  $this-­‐>validator-­‐>resetValue($i...
[ ] View::Session
<?php	
  //	
  第一引数 string 入 良 session 楽?>
<?php	
  if	
  (session('success_msg')):?>
	
  	
  <div	
  cl...
[ ] View::ServiceLocater
<form	
  action="http://192.168.33.40/todo/save"	
  method="POST">
	
  	
  <input	
  type="hidden...
[ ] Controller Filter
...
	
  	
  //	
  Filter
	
  	
  public	
  $aliases	
  =	
  [
	
  	
  	
  	
  'csrf'	
  	
  	
  	
  ...
[ ] Controller Filter
	
  	
  //	
   分 事
	
  	
  public	
  $methods	
  =	
  [
	
  	
  	
  	
  	
  'post'	
  =>	
  ['csrf']...
[ ] ::Model
<?php	
  namespace	
  AppModels;
class	
  TodoUseORMModelTest	
  extends	
  CIDatabaseTestCase
{
	
  	
  prote...
[ ] ::Library
<?php	
  namespace	
  AppLibrariesValidation;
class	
  RulesRunnerTest	
  extends	
  CIUnitTestCase{
	
  	
 ...
[ ]
AutoLoader
Test
51 / 57
[ ]
AutoLoader
Test
52 / 57
[ ]
AutoLoader
Test
ValidationLibrary
( )
site_url
CodeIngniter
53 / 57
54 / 57
CodeIgniter4 CodeIgniter3
CodeIgniter4
CI PR
55 / 57
CodeIgniter4 PR
github GPG
$	
  git	
  commit	
  -­‐s
https://bcit-ci.github.io/CodeIgniter4/contributing/signing.html
56 ...
Comming soon 2017/04
57 / 57
Upcoming SlideShare
Loading in …5
×

Codeigniter4の比較と検証

3,818 views

Published on

開発中のCoeIgniter4がCodeIgniter3と全然違った

Published in: Engineering
  • Be the first to comment

Codeigniter4の比較と検証

  1. 1. CodeIgniter4 CodeIgniter4 CodeIgniter3 Tetsuro Yoshikawa @iBotchME 1 / 57
  2. 2. ! CodeIgniter4 CodeIgniter3 CodeIgniter4 2 / 57
  3. 3. 3 / 57
  4. 4. [ ] CodeIgniter 3 4 4 / 57
  5. 5. [ ] CodeIgniter 3 4 CodeIgniter3 CodeIgniter4 CI_Controller Config/Services PHP5.2 (PHP5.4 ) CI3.1.x 5.3 5.5 PHP7 namespace namespace Class 5 / 57
  6. 6. [ ] 6 / 57
  7. 7. [ ] CodeIgniter3 CodeIgniter4 _ ) getX null isX boolean etc... || && ! || && ! 7 / 57
  8. 8. Directory 8 / 57
  9. 9. CI3 └──  application        ├──  cache        ├──  config        ├──  controllers        ├──  core        ├──  helpers        ├──  hooks        ├──  index.html        ├──  language        ├──  libraries        ├──  logs        ├──  migrations        ├──  models        ├──  third_party        └──  views [ ] application Directory 9 / 57
  10. 10. CI3 └──  application        ├──  cache        ├──  config        ├──  controllers        ├──  core        ├──  helpers        ├──  hooks        ├──  index.html        ├──  language        ├──  libraries        ├──  logs        ├──  migrations        ├──  models        ├──  third_party        └──  views CI4 └──  application        ├──  Config        ├──  Controllers          ├──  Database          ├──  Filters        ├──  Helpers        ├──  Language        ├──  Libraries        ├──  Models        └──  Views [ ] application Directory 10 / 57
  11. 11. CI3 └──  system        ├──  core        ├──  database        ├──  fonts        ├──  helpers        ├──  language        └──  libraries [ ] system Directory 11 / 57
  12. 12. CI3 └──  system        ├──  core        ├──  database        ├──  fonts        ├──  helpers        ├──  language        └──  libraries CI4 ├──  system          ├──  Autoloader          ├──  CLI          ├──  Cache          ├──  Commands          ├──  Config          ├──  Database          ├──  Debug          ├──  Filters          ├──  HTTP        ├──  Helpers        ├──  Hooks        ├──  Language        ├──  Log          ├──  Pager          ├──  Router          ├──  Security        ├──  Session          ├──  Test          ├──  ThirdParty          └──  View [ ] system Directory 12 / 57
  13. 13. [ ] CodeIgniter4 Directory CI4 ├──  public │      ├──  favicon.ico │      ├──  index.php │      └──  robots.txt └──  writable        ├──  cache        ├──  logs          └──  uploads 13 / 57
  14. 14. Directory Directory writable index.php system core 14 / 57
  15. 15. [ ] CodeIgniter.php index.php 15 / 57
  16. 16. [ ] index.php 16 / 57
  17. 17. [ ] index.php CodeIgniter3 CodeIgniter4 1. APPPATH FCPATH 1. APPPATH FCPATH 2. 3. 4. Exception 2. CodeIgniter.php (require) 5. CodeIgniter class run 17 / 57
  18. 18. [ ] CodeIgniter.php 18 / 57
  19. 19. [ ] CodeIgniter.php CodeIgniter3 CodeIgniter4 1. PHP 2. core 1. Request Response Cache 3. Router Controller method 2. Request class method 3. TryCatch Exception 404 4. before Filter 4. Controller Routing 5. Controller Routing 6. after Filter 5. Output 7. Response 19 / 57
  20. 20. [ ] CodeIgniter.php index.php AutoLoader CodeIgniter.php Controller Exception 404 Filter 20 / 57
  21. 21. [ ] MVC 21 / 57
  22. 22. [ ] Controller 22 / 57
  23. 23. [ ] Controller::CodeIgniter3 <?php class  Home  extends  CI_Controller {        public  function  __construct()        {                //  CI_Controller $this core/* 突 込                  parent::__construct();                //  神 入 Loader                  $this-­‐>load-­‐>model('hogehoge');        }        public  function  index()        {                $data  =  $this-­‐>hogehoge-­‐>get_view_data();                  $this-­‐>load-­‐>view('hogehoge',  $data);        } } 23 / 57
  24. 24. [ ] Controller::CodeIgniter4 <?php  namespace  AppControllers; class  Home  extends  CodeIgniterController {        public  function  index()        {                  //  new                    $hogehoge_model  =  new  AppModelsHogehogeModel();                  //  使 使 別 ORM 実装                    $data  =  $hogehoge_model-­‐>findWhere('is_active',  1);                    return  view('Hogehoge',  $data);        } } 24 / 57
  25. 25. [ ] Controller::CodeIgniter4 constructor injection request RequestInterface response ResponseInterface logger LogLogger 25 / 57
  26. 26. [ ] Model 26 / 57
  27. 27. [ ] Model::CodeIgniter3 <?php class  Hogehoge  extends  CI_Model {        public  function  __construct()        {              //  magic  method $this-­‐>db              //  CI 変数内 入 取                $this-­‐>load-­‐>model('hoge');        }        public  function  get_view_data()        {              //  QueryBuilder DB              $this-­‐>db-­‐>where('is_active',  1);              $query  =  $this-­‐>db-­‐>get('hogehoge',  3);              return  $query-­‐>result();        } } 27 / 57
  28. 28. [ ] Model::CodeIgniter4 <?php  namespace  AppModel; class  HogehogeModel  extends  CodeIgniterModel {        //  ORM対応        protected  $table                  =  'hogehoge';        protected  $allowedFields  =  ['fuga',  'is_active']; } 28 / 57
  29. 29. ORM 29 / 57
  30. 30. Model::CodeIgniter 4 ORM <?php  namespace  AppModel; class  HogehogeModel  extends  CodeIgniterModel {        public  function  get_view_data()        {            //  CodeIgniter3 QueryBuilder 書 事              $query  =  $this-­‐>db-­‐>table('hogehoge')                  -­‐>where('is_active',  1)                  -­‐>get(3);            return  $query-­‐>getResult();        } } 30 / 57
  31. 31. View 31 / 57
  32. 32. [ ] View::CodeIgniter3 <!DOCTYPE  html> <html>        <head>                <title>Hogehgoe</title>        </head>        <body>                <!-­‐-­‐  CI_Controller 変数 参照渡  -­‐-­‐>                <!-­‐-­‐  $this-­‐>db 呼 出  -­‐-­‐>                  <?php  echo  $this-­‐>pagination-­‐>create_links();?>        </body> </html> 32 / 57
  33. 33. [ ] View::CodeIgniter4 <!DOCTYPE  html> <html>        <head>                <title>Hogehgoe</title>        </head>        <body>                <!-­‐-­‐  Controller pager 渡  -­‐-­‐>                  <?=  $pager-­‐>links();?>        </body> </html> 33 / 57
  34. 34. [ ] $this new ORM ORM CI3 QueryBuilder namespace 34 / 57
  35. 35. 35 / 57
  36. 36. CodeIgniter4 Todo 36 / 57
  37. 37. [ ] Controller::Todo <?php  namespace  AppControllers; use  AppModels  as  Model; class  Todo  extends  CodeIgniterController {    //   設定      protected  $helpers  =  ['url'];    public  function  index()    {        //   風 書          //  helper('url');        //  session引数 空 Session 取          session()-­‐>start();        $todo_use_orm_model  =  new  ModelTodoUseORMModel();        //  Model CodeIgniter3 pagination相当 引 付        $data  =  [              'todo_data'  =>  $todo_use_orm_model-­‐>paginate(10),              'pager'          =>  $todo_use_orm_model-­‐>pager        ];        return  view('todo',  $data);    }        ... 37 / 57
  38. 38. [ ] Controller::Todo On/Off ...    public  function  dead_or_live(string  $id  =  null)    {        if  ($this-­‐>request-­‐>getMethod()  !==  'post')        {            //  404NotFound用Exception              throw  new  CodeIgniterPageNotFoundException();        }        $todo_use_orm_model  =  new  ModelTodoUseORMModel();          $active                          =  (bool)$this-­‐>request-­‐>getPost('deleted');        //  ORM!!!ORM!!!          $todo_use_orm_model-­‐>update($id,  ['deleted'  =>  $active]);        //  RedirectHeader 設定 Exception 発行          $this-­‐>response-­‐>redirect('http://192.168.33.40/todo/index');    } ... 38 / 57
  39. 39. [ ] Controller::Todo / ...    public  function  save()    {        if  ($this-­‐>request-­‐>getMethod()  !==  'post')        {            throw  new  CodeIgniterPageNotFoundException();        }        $todo_use_orm_model  =  new  ModelTodoUseORMModel();        //            $todo_model                  =  new  ModelTodoModel($todo_use_orm_model);        $save_data                    =  $this-­‐>request-­‐>getPost(['todo',  'id']);        $todo_model-­‐>doSave($save_data);        $this-­‐>response-­‐>redirect('http://192.168.33.40/todo/index');    } ... 39 / 57
  40. 40. [ ] TodoUseORMModel::ORM <?php  namespace  AppModels; //  CI_Model  =>  CodeIgniterModel class  TodoUseORMModel  extends  CodeIgniterModel {    //  table名      protected  $table  =  'todo';    //  編集可能 名      protected  $allowedFields  =  ['deleted',  'todo'];    ... 40 / 57
  41. 41. [ ] Model ORM primaryKey string id PrimaryKey returnType string array (array|object) useSoftDeletes boolean false Delete true deleted ) useTimestamps boolean false dateFormat string datetime createField string created_at updatedField string updated_at 41 / 57
  42. 42. [ ] TodoUseORMModel:: //  UseORM ORM find 使 実装    public  function  exists($id)    {        //  $this-­‐>db-­‐>table builderObject取得          $builder  =  $this-­‐>db-­‐>table($this-­‐>table);        $builder-­‐>where('id',  $id);        $query  =  $builder-­‐>get(1);        return  (  isset($query)  &&  !  empty($query-­‐>getRow())  );    } 42 / 57
  43. 43. [ ] TodoModel:: <?php  namespace  AppModels; use  AppLibrariesValidation; class  TodoModel {    private  $validator;    private  $session;    private  $dao;    //  Autoloader CodeIgniterModel 継承    //   化      public  function  __construct(TodoUseORMModel  $use_orm)    {        $this-­‐>use_orm      =  $use_orm;        $this-­‐>session      =  session();        //  資料作成時 実装 Validation 自作        $this-­‐>validator  =  ValidationFactory::make([],  [            ['id'      =>  ['is_natural',  'min[1]',  [$use_orm,  'exists']]],            ['todo'  =>  'required|lenmax[100]']        ],  ['todo'  =>  '項目']);    } ... 43 / 57
  44. 44. [ ] TodoModel::    public  function  doSave($input)    {        $this-­‐>validator-­‐>resetValue($input);        $this-­‐>session-­‐>start();        if  (  !  $this-­‐>validator-­‐>run()  )        {            $error_msg  =  $this-­‐>validator-­‐>getErrorMessage();              $this-­‐>session-­‐>setFlashdata('error_msg',  $error_msg);            return  false;        }        if  (  empty($input['id']))    unset($input['id']);        //  ORM allowedFields 空 場合 protect 解除          //  $this-­‐>use_orm-­‐>protect(false);        if  (  !  $this-­‐>use_orm-­‐>save($input)  )        {            $this-­‐>session-­‐>setFlashdata('error_msg',  'Todo 更新 失敗 ');            return  false;        }        $this-­‐>session-­‐>setFlashdata('success_msg',  'Todo 更新 成功 ');        return  true;    } ... 44 / 57
  45. 45. [ ] View::Session <?php  //  第一引数 string 入 良 session 楽?> <?php  if  (session('success_msg')):?>    <div  class="success_msg">        <?=  session('success_msg');?>    </div> <?php  endif;?> <?php  if  (session('error_msg')):?>    <div  class="error_msg">        <?=  session('error_msg');?>    </div> <?php  endif;?> 45 / 57
  46. 46. [ ] View::ServiceLocater <form  action="http://192.168.33.40/todo/save"  method="POST">    <input  type="hidden"  name="id"  value="">    <input  type="text"  name="todo"  value="">    <?php  //  ServiceLocater security 取得 ?>    <input  type="hidden"            name="<?=  service('security')-­‐>getCSRFTokenName();?>"          value="<?=  service('security')-­‐>getCSRFHash();?>">    <input  type="submit"  value="Todo!!"> </form> 46 / 57
  47. 47. [ ] Controller Filter ...    //  Filter    public  $aliases  =  [        'csrf'        =>  AppFiltersCSRF::class,        'toolbar'  =>  AppFiltersDebugToolbar::class,    ];    public  $globals  =  [        //  csrf 書 alias csrf 動作          'before'  =>  ['csrf'],        'after'    =>  ['toolbar']    ]; ... Controller CSRF Filter 47 / 57
  48. 48. [ ] Controller Filter    //   分 事    public  $methods  =  [          'post'  =>  ['csrf']    ];    //特定 以下 設定 事 可能    public  $filters  =  [          'csrf'  =>  ['before'  =>  ['todo/*']]    ];    ... Filter 48 / 57
  49. 49. [ ] ::Model <?php  namespace  AppModels; class  TodoUseORMModelTest  extends  CIDatabaseTestCase {    protected  $refresh  =  true;    protected  $seed  =  'TestTodoUseORMSeeder';    public  function  setUp()    {        parent::setUp();        //  CodeIgniterModel 第一引数 DB        //  第二引数 BaseConfig 入 構造        //  DatabaseTestCase DB 突 込          $this-­‐>todo_use_orm_model  =  new  TodoUseORMModel($this-­‐>db);    }    public  function  testTodo 入 ()    {        $this-­‐>assertTrue($this-­‐>todo_use_orm_model-­‐>exists('1'));    } ... 49 / 57
  50. 50. [ ] ::Library <?php  namespace  AppLibrariesValidation; class  RulesRunnerTest  extends  CIUnitTestCase{    /**      *  @dataProvider  runnerProvider      **/      public  function  test 正 実行 (          $class_method,            $value,            $expected)      {          //  AutoLoader 自作Libarary new            $rules_runner  =  new  RulesRunner();          $run_result      =  $rules_runner-­‐>run($class_method,  $value);          $this-­‐>assertEquals($expected,  $run_result);      } ... 50 / 57
  51. 51. [ ] AutoLoader Test 51 / 57
  52. 52. [ ] AutoLoader Test 52 / 57
  53. 53. [ ] AutoLoader Test ValidationLibrary ( ) site_url CodeIngniter 53 / 57
  54. 54. 54 / 57
  55. 55. CodeIgniter4 CodeIgniter3 CodeIgniter4 CI PR 55 / 57
  56. 56. CodeIgniter4 PR github GPG $  git  commit  -­‐s https://bcit-ci.github.io/CodeIgniter4/contributing/signing.html 56 / 57
  57. 57. Comming soon 2017/04 57 / 57

×