phpMyAdminインストール

cakePHP3のお勉強でDBを確認するためインストール 以下のサイトを参考

centossrv.com

/rootの直下にとりあえずダウンロード
svn checkout https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/tags/STABLE/phpMyAdmin phpmyadmin

リビジョン 13465 をチェックアウトしました。 と表示される。

ファイルを/var/wwwに移動

mv phpmyadmin /var/www

php-mysqlインストール 以下のエラーがでてしまいストップ

#rpm -q php-mysql
パッケージ php-mysql はインストールされていません。
#yum -y install php-mysql
Loaded plugins: fastestmirror, security
Determining fastest mirrors
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * remi-safe: repo1.sea.innoscale.net
 * updates: ftp.riken.jp
base                                                                             | 3.7 kB     00:00
extras                                                                           | 3.4 kB     00:00
mysql-connectors-community                                                       | 2.5 kB     00:00
mysql-tools-community                                                            | 2.5 kB     00:00
mysql56-community                                                                | 2.5 kB     00:00
remi-safe                                                                        | 2.9 kB     00:00
remi-safe/primary_db                                                             | 730 kB     00:00
updates                                                                          | 3.4 kB     00:00
updates/primary_db                                                               | 1.4 MB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php-mysql.x86_64 0:5.3.3-49.el6 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.3-49.el6 for package: php-mysql-5.3.3-49.el6.x86_64
--> Finished Dependency Resolution
Error: Package: php-mysql-5.3.3-49.el6.x86_64 (base)
           Requires: php-common(x86-64) = 5.3.3-49.el6
           Installed: php-common-5.6.30-1.el6.remi.x86_64 (@remi-php56)
               php-common(x86-64) = 5.6.30-1.el6.remi
           Available: php-common-5.3.3-49.el6.x86_64 (base)
               php-common(x86-64) = 5.3.3-49.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
[root@XXXX phpmyadmin]# yum -y install expect
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * remi-safe: repo1.sea.innoscale.net
 * updates: ftp.riken.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package expect.x86_64 0:5.44.1.15-5.el6_4 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package               Arch                  Version                          Repository           Size
========================================================================================================
Installing:
 expect                x86_64                5.44.1.15-5.el6_4                base                256 k

Transaction Summary
========================================================================================================
Install       1 Package(s)

Total download size: 256 k
Installed size: 553 k
Downloading Packages:
expect-5.44.1.15-5.el6_4.x86_64.rpm                                              | 256 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : expect-5.44.1.15-5.el6_4.x86_64                                                      1/1
  Verifying  : expect-5.44.1.15-5.el6_4.x86_64                                                      1/1

Installed:
  expect.x86_64 0:5.44.1.15-5.el6_4

Complete!

インストー

[root@www phpmyadmin]# mkpasswd -l 46
qcepdfVtgqr2eGgwlcobfhjoqkwwx>imbevsbnti3cnarr

phpMyAdmin設定 Apache設定 を実施し http://サーバー名/phpmyadmin/ へアクセス

You don’t have permission to access /phpMyAdmin/ on this server.

アクセスできない 以下を参考に名前を変更

https://www.deep-deep.jp/blog_engineer/archives/1996

ログイン画面が表示された

MySQLのユーザでログインできることを確認

mcryptは、以下の記事を参考にしたら解消した qiita.com

その他

easyramble.com

「CakePHP3でWebアプリ開発」の記事見てお勉強

CakePHP3でWebアプリ開発

以下の記事を見ながら実際にWebアプリを作ってみる。

qiita.com

現時点で作ったこと

  • ドットインストールのCakePHP3入門で何となく作り方のイメージが出来た

http://dotinstall.com/lessons/basic_cakephp_v2

認証機能の実装

記事のとおりに作成していく

1. userテーブルを作成

mysql> CREATE TABLE users (
    -> id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(50),
    -> password VARCHAR(255),
    -> role VARCHAR(20),
    -> created DATETIME DEFAULT NULL,
    -> modified DATETIME DEFAULT NULL
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql>

2. Model src/Model/Table/UsersTable.phpを作成する。

<?php

namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class UsersTable extends Table
{

    public function validationDefault(Validator $validator)
    {
        return $validator
            ->notEmpty('username', 'A username is required')
            ->notEmpty('password', 'A password is required')
            ->notEmpty('role', 'A role is required')
            ->add('role', 'inList', [
                'rule' => ['inList', ['admin', 'user']],
                'message' => 'Please enter a valid role'
            ]);
    }

}

3. src/Model/Entity/User.phpを作成

<?php

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{

    protected $_accessible = [
        '*' => true,
        'id' => false
    ];

    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }
}

4. Controller src/Controller/AppController.phpを修正

認証機能を有効にする 以下の記事だとコメントが書いてあるので読んでみた jmatsuzaki.com

    /**
     * Initialization hook method.
     *
     * Use this method to add common initialization code like loading components.
     *
     * e.g. `$this->loadComponent('Security');`
     *
     * @return void
     */
    public function initialize()
    {
        parent::initialize();

        $this->viewBuilder()->layout('my_layout');

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');

        // 20170612 ADD 認証機能を有効
        $this->loadComponent('Auth', [
                'authorize' => ['Controller'],
                'loginRedirect' => [
                    'controller' => 'Users',
                    'action' => 'index'
                ],
                'logoutRedirect' => [
                    'controller' => 'Users',
                    'action' => 'login'
                ]
        ]);

        /*
         * Enable the following components for recommended CakePHP security settings.
         * see http://book.cakephp.org/3.0/en/controllers/components/security.html
         */
        //$this->loadComponent('Security');
        //$this->loadComponent('Csrf');
    }

5. UsersController src/Controller/UsersController.phpを作成

<?php

namespace App\Controller;

use App\Controller\AppController;
use Cake\Event\Event;

class UsersController extends AppController
{

    public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);
        $this->Auth->allow(['add', 'logout']);
    }

    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());
    }

    public function isAuthorized($user) 
    {
        return true;
    }   

    public function index()
    {
        $this->set('users', $this->Users->find('all'));
    }

    public function view($id)
    {
        $user = $this->Users->get($id);
        $this->set(compact('user'));
    }

    public function add()
    {
        $user = $this->Users->newEntity();
        if ($this->request->is('post')) {
            $user = $this->Users->patchEntity($user, $this->request->data);
            if ($this->Users->save($user)) {
                $this->Flash->success(__('The user has been saved.'));
                return $this->redirect(['action' => 'add']);
            }
            $this->Flash->error(__('Unable to add the user.'));
        }
        $this->set('user', $user);
    }

}

beforeFilter:Actionが実行されるよりも前に常にこのbeforeFilterの処理が先行して処理される cakephp.euonymus.info

6. View

src/Template/Users/add.ctpを作成

<div class="users form">
<?= $this->Form->create($user) ?>
    <fieldset>
        <legend><?= __('Add User') ?></legend>
        <?= $this->Form->input('username') ?>
        <?= $this->Form->input('password') ?>
        <?= $this->Form->input('role', [
            'options' => ['admin' => 'Admin', 'user' => 'user']
        ]) ?>
   </fieldset>
<?= $this->Form->button(__('Submit')); ?>
<?= $this->Form->end() ?>
</div>

7 .ログイン画面のテンプレートを定義するため、src/Template/Users/login.ctpを作成

<div class="users form">
<?= $this->Flash->render('auth') ?>
<?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __('ログイン'); ?></legend>
        <?= $this->Form->input('username', array('label' => 'ユーザ:')) ?>
        <?= $this->Form->input('password', array('label' => 'パスワード:')) ?>
    </fieldset>
<?= $this->Form->button(__('Login')); ?>
<?= $this->Form->end() ?>
</div>

8. ユーザ一覧画面のテンプレートを定義するため、src/Template/Users/index.ctpを作成

<h1>users</h1>
<table>
    <tr>
        <th>Id</th>
        <th>Username</th>
    </tr>
    <?php foreach ($users as $user): ?>
    <tr>
        <td><?= $user->id ?></td>
        <td><?= $this->Html->link($user->username, ['action' => 'view', $user->id]) ?></td>
    </tr>
    <?php endforeach; ?>
</table>

画面を確認することが出来ました。

cakephp

 cakePHP3でBootStrapを使うまで

 

qiita.com

 

ja.stackoverflow.com

 

 

qiita.com

Composer で friendsofcake/bootstrap-ui をインストー

cakePHPプロジェクトの直下で以下を実行

composer.pear require friendsofcake/bootstrap-ui:~0.3

 

 

sh-yoshida.hatenablog.com

 

 

yosuke-furukawa.hatenablog.com

rootで以下を実行するとエラーがでる

bower init

 以下の記事より、.bowerrcを作成してから実行する

qiita.com

 

public function initialize()
{

$this->loadHelper('Html', ['className' => 'BootstrapUI.Html']);

$this->loadHelper('Form', ['className' => 'BootstrapUI.Form']);

$this->loadHelper('Flash', ['className' => 'BootstrapUI.Flash']);
/*
$this->loadHelper('Paginator', ['className' => 'BootstrapUI.Paginator']);
*/
}