11
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

CakePHP3勉強会 in Fusic ハンズオン資料 part.2

前. CakePHP3勉強会 in Fusic ハンズオン資料 part.1
http://qiita.com/Junkins/items/f1f830b33e52dc1cbc38

3. Auth

ログイン画面の作成

参考URL

  • src/Controller/AppController.php の修正
command
    vim src/Controller/AppController.php
vim
    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => [
                    'userModel' => 'Accounts',
                    'fields' => [
                        'username' => 'username',
                        'password' => 'password'
                    ]
                ]
            ],
            'loginRedirect' => [
                'controller' => 'Accounts',
                'action' => 'index'
            ],
            'loginAction' => [
                'controller' => 'Accounts',
                'action' => 'login',
            ],
        ]);
    }
  • src/Controller/AccountsController.php の修正
command
    vim src/Controller/AccountsController.php
vim
    public function login()
    {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Flash->error(__('Invalid username or password, try again'));
        }
    }

    public function logout()
    {
        return $this->redirect($this->Auth->logout());
    }
  • src/Template/Accounts/login.ctp の作成
command
    vim src/Template/Accounts/login.ctp
vim
    <!-- File: src/Template/Users/login.ctp -->
    <div class="users form">
        <?= $this->Flash->render('auth') ?>
        <?= $this->Form->create() ?>
            <fieldset>
                <legend><?= __('Please enter your username and password') ?></legend>
                <?= $this->Form->input('username') ?>
                <?= $this->Form->input('password') ?>
            </fieldset>
        <?= $this->Form->button(__('Login')); ?>
        <?= $this->Form->end() ?>
    </div>
  • src/Model/Entity/Account.php の修正
command
    vim src/Model/Entity/Account.php 
vim
    use Cake\Auth\DefaultPasswordHasher;
vim
    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }

4. Query Builder

Query Builderで遊ぼう

参考URL

  • Query Builder デバック
comannd
    vim src/Controller/AccountsController.php
vim
    public function debug()
    {
        $this->autoRender = false;
        $query = $this->Accounts->find();
        debug($query);
    }
  • サンプル
vim
    $this->autoRender = false;
    $query = $this->Accounts->find();
    $query->where([$this->Accounts->alias() . '.name' => 'AccountA']);
    debug($query);
    // SQLの実行
    debug($query->firstOrFail());
vim
    public function sql1()
    {
        $this->autoRender = false;
        $query = $this->Accounts->find();
        $query->where([$this->Accounts->alias() . '.name' => 'AccountA']);
        debug($query);
        // SQLの実行
        debug($query->firstOrFail());
    }
vim
    public function sql2()
    {
        $this->autoRender = false;
        $query = $this->Accounts->find();
        $query->matching('Projects', function ($q) {
            return $q->where(['Projects.name' => 'ProjectB']);
        });

        debug($query);
        // SQLの実行
        debug($query->all());
    }
vim
    public function sql3()
    {
        $this->autoRender = false;
        $query = $this->Accounts->find();
        $query->matching(
            'Projects.Tasks', function ($q) {
                return $q->where(['Tasks.name' => 'TaskE']);
            }
        );

        debug($query);
        // SQLの実行
        debug($query->all());
    }

前. CakePHP3勉強会 in Fusic ハンズオン資料 part.1
http://qiita.com/Junkins/items/f1f830b33e52dc1cbc38

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
11
Help us understand the problem. What are the problem?