AmazonLinuxでデフォルトリポジトリ調査
EC2マシンイメージ (AMI):
Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type - ami-9c9443e3
#yum repolist all 読み込んだプラグイン:priorities, update-motd, upgrade-helper リポジトリー ID リポジトリー名 状態 amzn-main/latest amzn-main-Base 有効: 5,934 amzn-main-debuginfo/latest amzn-main-debuginfo 無効 amzn-main-source/latest amzn-main-source 無効 amzn-nosrc/latest amzn-nosrc-Base 無効 amzn-preview/latest amzn-preview-Base 無効 amzn-preview-debuginfo/latest amzn-preview-debuginfo 無効 amzn-preview-source/latest amzn-preview-source 無効 amzn-updates/latest amzn-updates-Base 有効: 474 amzn-updates-debuginfo/latest amzn-updates-debuginfo 無効 amzn-updates-source/latest amzn-updates-source 無効 epel/x86_64 Extra Packages for Enterprise Linux 6 - x86_64 無効 epel-debuginfo/x86_64 Extra Packages for Enterprise Linux 6 - x86_64 - Debug 無効 epel-source/x86_64 Extra Packages for Enterprise Linux 6 - x86_64 - Source 無効 epel-testing/x86_64 Extra Packages for Enterprise Linux 6 - Testing - x86_64 無効 epel-testing-debuginfo/x86_64 Extra Packages for Enterprise Linux 6 - Testing - x86_64 - Debug 無効 epel-testing-source/x86_64 Extra Packages for Enterprise Linux 6 - Testing - x86_64 - Source 無効 repolist: 6,408
EC2マシンイメージ (AMI):
Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-e99f4896
# yum repolist all 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd リポジトリー ID リポジトリー名 状態 amzn2-core/2/x86_64 Amazon Linux 2 core repository 有効: 9,144 amzn2-core-debuginfo/2/x86_64 Amazon Linux 2 core repository - debuginfo packages 無効 amzn2-core-source/2 Amazon Linux 2 core repository - source packages 無効 amzn2extra-docker/2/x86_64 Amazon Extras repo for docker 有効: 5 amzn2extra-docker-debuginfo/2/x86_64 Amazon Extras debuginfo repo for docker 無効 amzn2extra-docker-source/2 Amazon Extras source repo for docker 無効 repolist: 9,149
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その5
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その5
シンプルな認証機能を作る。メモとして書きます。
基本的はcakephpのAuthComponentを使うとほとんどやることをないです。
公式ドキュメントを参考にします。
シンプルな認証と認可のアプリケーション - 3.6
まずはMysqlにusersのTabelを作成します。
usersテーブルのにはログイン時のusernameとパスワードを保持させます。
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 );
usersテーブルができたら、次はプログラムを作成します。
基本ベースはbakeコマンドでuserテーブルを指定して作成されたプログラムを修正していくイメージです。
bakeコマンドでとりあえずAllで全部ありで作ります。
bin/cake bake All Users --------------------------------------------------------------- Baking table class for Users... Bake All complete. 成功!!!!
次はAuthComponentを適用するためにsrc/Controller/AppController.phpに下記に修正します。
今回はログイン後のリダイレクト先コントローラーとアクションの指定と
ログアウト後のリダイレクト先の指定となります。
ログイン認証時に利用するカラム名がデフォルトのusernameとpasswordの場合は、記述の省略が可能です。ログインアカウント登録画面は認証が不要なので、beforeFilterで'add'を認証除外にしています。
public function initialize() { parent::initialize(); $this->loadComponent('RequestHandler', ['enableBeforeRedirect' => false]); $this->loadComponent('Flash'); // AuthComponentようの設定 $this->loadComponent('Auth', [ 'loginRedirect' => [ 'controller' => 'Index', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Users', 'action' => 'login', 'home' ] ]); } public function beforeFilter(Event $event) { $this->Auth->allow(['add']); }
次にアカウント登録処理を作成します。
先ほどのbakeコマンド実行でコンントローラーのaddアクション処理とテンンプレート(/Template/Users/add.ctp)、モデルのベースは作成済みです。ありがたいーーーーー。
パスワードの登録データは平文ではなく、ハッッシュ化されたものをUsersテーブルに登録するため、修正します。
_setPasswordで入力された平文パスワードをハッシュ化します。
/Model/Entity/User.php
//追加 use Cake\Auth\DefaultPasswordHasher; class User extends Entity { //追加 protected function _setPassword($password) { if (strlen($password) > 0) { return (new DefaultPasswordHasher)->hash($password); } } }
次はログイン画面を作ります。
bakeコマンドではログイン関連は作成されないため、Usersコントローラにloginアクションとlogoutアクションの追加とlogin.ctpテンンプレートを作成します。
/Controller/UsersController.php
//追加 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()); }
/Template/Users/login.ctp
<!-- File: src/Template/Users/login.ctp --> <div class="users form"> <?= $this->Flash->render() ?> <?= $this->Form->create() ?> <fieldset> <legend><?= __('Please enter your username and password') ?></legend> <?= $this->Form->control('username') ?> <?= $this->Form->control('password') ?> </fieldset> <?= $this->Form->button(__('Login')); ?> <?= $this->Form->end() ?> </div>
/users/addにブラウザでアクセスするとアカウント追加画面が表示される。
usernameとパスワードと権限)(1)を入力して登録するとusersテーブルにデータが登録される。
login画面でusernameとパスワードを入力すればログインができる。
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その4
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その4
cakephpにbootstrapテーマを適用します。メモとして書きます。
"bootstrap無料テーマ"とか検索したら、良さそうなテーマあるので、
今回は”SB Admin 2”ってやつを使います。シンプルで良さそう。
github.com
テーマをダウンロードして、展開する。
/pages/index.htmlをベースに使えそう。
/distと/vendorにjsとcssが格納されている。
cakephpでは/src/Template/Layout/default.ctpがデフォルトレイアウトファイルとして使われる。
/src/Template/Layout/default.ctp
<div class="container clearfix"> <?= $this->fetch('content') ?> </div>
"fetch('content') ?>"で各Actionで指定したテンプレート(index.ctp)が描画される。
”SB Admin 2”のindex.htmlをコードdefault.ctpに貼り付けて、メインエリアに下記を貼り付けたら、
いい感じになった。
<div class="container clearfix"> <?= $this->fetch('content') ?> </div>
ただし、index.htmlをそのまま貼り付け場合は、不要なダッシュボードのウィジェットがあるのでhtmlタグを削除するのと、cssやjsのパスをcakephp(/webroot)用に変更してあげる必要がある。
今回のテーマ以外でも上記の作業をしてあげれば、使えそう。
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その3
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その3
TOPページをとりあえず作ります。
MVCモデルのControllerを用意します。
$this->render('index');でレンダリングしたいViewを名前を指定する。
デフォルトではアクション名(index)のView(index.ctp)がレンダリングされる。
今回は明示的に指定している。本来は不要。
src/Controller/IndexController.php
<?php namespace App\Controller; use App\Controller\AppController; class IndexController extends AppController { /** * Index method * * @return \Cake\Http\Response|void */ public function index() { //index.ctpをレンダリング $this->render('index'); } }
次にViewを用意する。ファイル名はControllerで指定したindex.ctp。
とりあえず空のviewを作ります。
src/Template/Index/index.ctp
<?php /** * @var \App\View\AppView $this * @var \App\Model\Entity\User[]|\Cake\Collection\CollectionInterface $users */ ?> <a>index</a>
最後にルーティングの設定を変更します。
"/"でアクセスされた場合はデフォルトではPagesのControllerのdisplayのactionを指定している。
これを"/"でアクセスされた場合はIndexのControllerのindexのactionを呼び出すように変更する。
config/routes.php
routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); ↓変更 $routes->connect('/', ['controller' => 'Index', 'action' => 'index']);
これで"/"アクセスした場合に、index.ctpが表示されます。
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その2
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その2
my_appデータベース作成
#mysql接続 rootユーザで前回設定したrootパスワードを入力 mysql -u root -p #データベースを確認 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.01 sec) #my_appデータベースの作成 mysql> CREATE DATABASE my_app; Query OK, 1 row affected (0.00 sec) #データベースを確認 "my_app"が作成されていることを確認 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | my_app | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec)
webrootディレクトリ移動&ドキュメントルートの変更
sudo vi /etc/httpd/conf/httpd.conf 変更 DocumentRoot "/var/www/cake/webroot" -> DocumentRoot "/var/www/cake" 変更(Directoryのパスと.htaccessの設定を無効化) ------------------------------------------------------------ <Directory "/var/www/cake"> AllowOverride All </Directory> ↓ <Directory "/var/www/cake/webroot"> AllowOverride None </Directory> ------------------------------------------------------------ #apache起動 sudo service httpd restart
.htaccessの無効化
cd /var/www/cake ls la sudo vi .htaccess ------------------------------------------------------------ 変更 RewriteEngine on -> RewriteEngine off ------------------------------------------------------------ .htaccessで設定した場合、リクエストがあるたびに.htaccessを探すので、 パフォーマンスは悪くなるらしい。
centos7.2 + Apache2.4 + php7 + cakephp3 + mysql5.6 で管理画面を作ります。 その1
centos7.2 + Apache2.4 + php7.0 + cakephp3 + mysql5.6 で管理画面を作ります。
リポジトリを最新にする
sudo yum update
php7.0インストール
#epelリポジトリ追加 sudo yum install epel-release #remi追加 sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm #php7とパッケージをインストール sudo yum install --enablerepo=remi,remi-php70 php php-devel php-pear php-mbstring php-pdo php-gd php-zip php-xml php-fpm php-mcrypt php-mysqlnd php-pecl-apcu php-pecl-zendopcache php-intl #phpのバージョン確認 php --version PHP 7.0.30 (cli) (built: Apr 24 2018 21:28:23) ( NTS ) #php.ini修正 sudo vi /etc/php.ini ------------------------------------------------------------ date.timezone = 'Asia/Tokyo' に変更 extension=intl.so を87行目に追加 ------------------------------------------------------------
Apache2.4インストール
sudo yum install httpd httpd -v Server version: Apache/2.4.6 (CentOS)
cakephp3インストール
sudo curl -s https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer mkdir /var/www/cake chown xxx:xxx /var/www/cake cd /var/www/cake composer create-project --prefer-dist cakephp/app ./ composer install
apache設定変更
sudo vi /etc/httpd/conf/httpd.conf ------------------------------------------------------------ 変更 DocumentRoot "/var/www/html" -> DocumentRoot "/var/www/cake" 変更 <Directory "/var/www/html"> -> <Directory "/var/www/cake"> 変更 AllowOverride none -> AllowOverride all ------------------------------------------------------------ #apache起動 service httpd start
mysqlインストール
yum -y install wget wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm rpm -Uvh mysql-community-release-el6-5.noarch.rpm yum -y install mysql-community-server mysql --version mysql Ver 14.14 Distrib 5.6.40, for Linux (x86_64) sudo /etc/init.d/mysqld restart mysql_secure_installation vi /etc/my.cnf 下記追加 -------------------------------------------------------------- [client] default-character-set=utf8 [mysqld] skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set=utf8 [mysql] default-character-set=utf8 -------------------------------------------------------------- #mysql再起動 /etc/init.d/mysqld restart
cakephpの設定
vi /var/www/html/config/app.php 220行目あたりが'Datasources' = DBの接続設定 (仮) 'username' => 'root', 'password' => 'XXX', 'database' => 'my_app', 'timezone' => '+09:00', vi /var/www/html/config/bootstrap.php ------------------------------------------------------------ date_default_timezone_set('Asia/Tokyo');に変更 ------------------------------------------------------------
ブラウザアクセス
cakeの初期画面が表示される。
Databaseにmy_appデータベースが存在しないため、エラーとなっているが、今回はここまで。
次回は"my_app"データベースの作成とドキュメントルートの変更を行う。
UITableViewCell
完成図はこんな感じ
プロジェクト新規作成 → 「SingleView Application」を選択 → product Nameは「SampleCell」で作成。
初期から存在するView Controllerに「TableView」をドラッグ&ドロップする。
ドロップしたTableVIewをViewControllerの全体に広げる。
TableViewの上にTableViewCellをドラッグ&ドロップする。
「Table View Cell」を選択し、Attributei nspecterの中のidentifierの項目に「Cell」を入力する。
ViewController.swiftを選択する。
下記のようにソースを修正する。
import UIKit // ①修正(UITableViewDataSource, UITableViewDelegate) class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //②追加 //テーブルの行数を返却する func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } //③追加 //テーブルの行ごとのセルを返却する func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = String(indexPath.row) return cell } }
②と③のメソッドはUITableViewDataSourceの必須メソッドなので、記述なしだとエラーになる。
UITableViewDelegateとUITableViewDataSourceプロトコルの処理を行うクラスを、UIViewControllerの継承先のViewContollerに関連づける。
「ViewControllerScene」ツリーの「View Controller」→「View」→「Table View」を選択した状態でControlキーを押しながら、「View Controller」にドラッグ&ドロップする。ポップアップ画面が表示されるので、「dataSource」を選択する。 ドラッグ&ドロップを再度行い、「delegate」を選択する。これで関連付けが完了する。
Xcodeで保存&ビルドを実行。