Help us understand the problem. What is going on with this article?

【php】Web API関連メモ

【php】Web API関連メモ

自分用のメモです。

namespace

namespace 名前空間名;

  • 名前空間を定義する。
  • 同一名のクラスや関数などが定義できるようになる。(衝突によるエラーや上書きを防ぐ)
  • 一番上に書く。(HTMLやファイル読み込みよりも上)

▼使い方
名前空間\呼び出したいもの

  • 名前空間\関数名()
  • 名前空間\変数
(method.php)同一ファイルに同じ関数を書
<?php
namespace name1;

function hello(){
  return 'こんにちは';
}

namespace name2;

function hello(){
  return 'Hello';
} 
?>
(exec.php)関数の呼び出し
<?php

//ファイル読み込み
require_once 'method.py';

//関数の呼出し
echo name1\hello();
echo name2\hello();

?>

//出力
こんにちはHello

use as

use 名前空間名 as エイリアス名;
名前空間を作成し、エイリアス化する
名前空間が長い場合に使う。

use AAA\BBB\CCC\DDD as name3;
 └ 名前空間「AAA\BBB\CCC\DDD」を「name3」と定義。

▼asがない場合
use AAA\BBB\CCC\DDD
 └ 名前空間は「DDD」になる

function 関数名(array 引数)

(型 引数, 型 引数,,,)は型宣言。配列を指定。
渡された引数の方が指定と違う場合にエラーを返す。
間違いの早期発見用。

function test(array $list, int $val)

//$list:配列
//$val:整数

アロー演算子(->)

クラス名->$プロパティ名

クラス名->$プロパティ名
指定したクラスのプロパティを取得。

クラス内で呼び出す場合は、$this->$プロパティ名

※アロー関数はJS

インスタンス名->関数名()

インスタンス名->関数名()
インスタンスの中で関数を呼び出す。
 └ インスタンスの入った変数。

require dirname(DIR). '絶対パス';

ファイルを読み込む。

//以下は同じ
require dirname(__DIR__) . '/path/ファイル名.php';
require dirname(__FILE__) . '/path/ファイル名.php';
require ( __DIR__ . '/path/ファイル名.php');
require dirname(__DIR__) . '/vendor/test.php';

この場合、後から追加したライブラリ(vendorが保存場所)のtest.phpというファイルを読み込んでいる。

https://book.cakephp.org/2/ja/controllers/request-response.html

$this->request->controller;
$this->request['controller'];
$this->request->params['controller'];

コメントアウト + @(アットマーク)

パラメータや変数の説明。

//@param [型] 変数名 説明
//@var [型] 説明
//@return [型] 説明

▼使用例

class Userdb
{
    private $name;
    private $db;

    /**
     * コンストラクタ
     *
     * @param Users $name
     * @param Database $db
     */
    public function __construct(Users $name, Database $db)
    {
        $this->name = $name;
        $this->db = $db;
    }

キー=>値

連想配列のキーと値の指定は「=>」

array (key1=>値1, key2=>値2, key3=>値3,,,)
キーの名前で値を呼び出す

array_shift

array_shift(配列名)
配列の一番最初の要素を抜き出す。
破壊的。実行後、元の配列からその要素が抜ける。

$lists=array("aaa","bbb","ccc");
$data1=array_shift($lists);

echo "0番目の要素:".$data1."。<br>";
print_r($lists);


////出力
//0番目の要素:aaa
//("bbb","ccc");

argc, argv

$argc: 引数の個数(Argument Count)

▼ファイル実行時に、引数を渡し、その引数の値をつかう

if ($argc === 1) {
    echo '引数は1つです', PHP_EOL;
    exit(1);
}

$argv: 引数の値 (Argument Value)

//入力値 aaa bbb ccc
$argv[0] //aaa
$argv[1] //bbb
$argv[2] //ccc

//変数に格納
$answers = $argv

PHP_EOL

実行環境のOSで改行を行う。

実行環境に合わせ、下記に変換される。
・windows:「\r\n(CRLF)」
・Linux系: 「\n(LF)」

echo "aaa".PHP_EOL."bbb".PHP_EOL."ccc";

////出力
//aaa
//bbb
//ccc

eixt()

処理の終了

exit(整数)
エラーのステータスコードを整数にする。
画面表示はされない。

json_decode関数

JSON形式のデータを変換する。

$a = json_decode(JSON形式のデータ)
 └ オブジェクトを返す
 └ {"obj1":値1,"obj2":値2}
 └ $a{obj1} → 値1

$a = json_decode(JSON形式のデータ, true)
 └ 連想配列に変換
 └ array(obj1=>値1, obj2=>値2)
 └ $a[obj1] → 値1

Pimple

  • DIコンテナの一つ
  • インスタンスの生成を一括実行するファイル。
  • DI用の設定データを保存しているcontainer.php
  • 「$変数名= インスタンス生成処理」が省略できる
  • 引数の数が大幅に減る
use Pimple\Container;
$container = new Container();

//または
$container = new Pimple\Container();

DI

DI:Dependency Injection

依存性のあるデータ(インスタンスの生成)などを変数で与える。

  • クラスとの依存性が低くなるため、動的に変更可能になる。
  • クラスをいじらず、注入しているデータ元をいじれる(メンテ簡略化)

guzzle http

外部APIの実行。

//guzzleのりーソスを生成し、requestメソッドで送信
new GuzzleHttp\Client([
        'handler' => $handler,
        'base_uri' => 'http://www.example.com',
    ]);
  • base_uri: アクセスするURLのベースとなるもの。(必須)
  • handler: リクエストヘッダーにつけるパラメータを指定。配列形式で複数指定可能。(オプション)

▼応答データの取得(文字列)

$response->getBody()

request

Client->request('メソッド', 'URL');
 └ メソッド:GET or POST

指定したURL(またはパス)からデータを取得する。

$response = Client->request('POST','/test', ['json' => データ]);

・Client= GuzzleHttp\Client
・/testファイルにjson形式でデータを渡し、その結果をPOSTで受け取り、$responseに格納.

Cake PHP

ruby on railsの思想をベースに作成したPHP用のフレームワーク。

▼Cake PHP

  • コマンドや規則が充実。
  • スピード感重視で作成できる。
  • 自由度が低い。

▼Lravel

  • 自由度が高い
  • 最新技術も導入しやすい

簡単なサイト作成ならCake PHP, がっつり組みたいならLaravel。

インストール

composerで行う
 └ 作業ディレクトリ毎にインストール

composer install

MVCモデル

Model(Routing)
View
Controller

Controller(処理の割り振り) -> Model(データ処理)-> View(表示)

ディレクトリ構成

PJディレクトリ

ディレクトリ 内容
cake CakePHPの中心部分となるライブラリファイル類がまとめられている
plugins プラグインのプログラムを組み込むためのもの
app Webアプリケーションを配置していくディレクトリ あらかじめ定められたルールでファイルを配置し開発していく
venders ライブラリ類を後から追加するときに利用されるところ
gitignore git用のファイル
htaccess Webサーバの動作に関する設定ファイル
index.php CakePHPのディレクトリのインデックスファイル このディレクトリにアクセスしたときにこのページが表示される
README 最初に読むドキュメント
appディレクトリの中身
ディレクトリ 内容
config CakePHPで利用される各種の設定情報を保管。Routingファイルもこの中。
libs ライブラリファイルを追加する場所
controllers プログラムの制御に関するソースコードを追加していく
locale 言語・地域情報に関するファイルを保管する
models データベースアクセス関係のソースコードを追加していく
plugins 機能追加のためのプラグインファイルを追加する
tests テストに関するフレームワークを追加する
tmp プログラム実行中に作成される一時ファイルの保管場所
vendors ライブラリ類を後から追加するときに利用されるところ
views ページレイアウトのためのファイルを追加していく
webroot CakePHPによるWebアプリケーションのルートになる ここにファイルを入れるとルートに配置された状態で呼び出される
.htaccess,index.php このディレクトリのWebサーバの設定情報とデフォルトページ
  • cakeフォルダは基本触らない
  • 編集や追加をするのは基本appフォルダ

Configuration

環境設定:config/bootstrap.phpから読み込まれる。

初期状態は「config/app.php」のみ存在。
自分で、「config/bootstrap.php」を追加し設定を書き込むと、 bootstrap.php側の設定が読み込まれるようになる。

インスタンスの生成や、関数の作成を行う

$product = new 名前空間\クラス名();

$product['server_db'] = function ($c) {
    return new 名前空間2\クラス名(dirname(__DIR__) . '/var/server_db.txt');
};

Routing

「config/routes.php」で設定する。

Router::connect('入力URL', ['controller' => 'コントローラー名', 'action' => 'アクション名(開くページ)']);

config/routes.php
Router::connect('/top', ['controller' => 'Home', 'action' => 'index']);

(ドメイン)/topが入力されたら、HomeContorllerのindexというアクションを実行する。

パラメータの取得と呼び出し

▼格納
:プレースホルダ名

▼呼び出し
['プレースホルダ名' => '\d+']

config/routes.php
Router::connect('/top/:top_id', ['controller' => 'Home', 'action' => 'index'], ['top_id' => '\d+']);

Request

  • デフォルトのリクエストを扱うクラス。
  • リクエストのデータの管理・操作を行うときに使用
  • 大本のデータはCake\Network\Request
  • 呼び出し:$this->request
  • requestの中にパラメータが入っている。
  • Controller、View、Cell、Helperからアクセス可能。

▼パラメータへのアクセス方法

//param or params
$this->request->params['controller']; // 複数形(params)
$this->request->param('controller'); // 単数形(param)

▼GETのパラメータ
$this->request->query
取得データは連想配列になっている。

/home?name=aaa&age=25

$this->request->query; # array('name' => 'aaa','age' => '25')

▼POSTの場合

$this->request->data('name.aaa');
$this->request->data['name'];

Controller

▼ファイルの場所
src/Controllers/コントローラー名Contoller.php

  • 各ControllerはAppController(src/Controllers/AppController.php)を継承

→冒頭に「namespace App\Controller;」がある。

saveメソッド

$this->Model->save("キー名", 値)

$this->db->save('name', 'tanaka');

▼保存したデータの取得
fetchを使う

$this->db->fetch('name');
yuta-38
メモとして活用してます
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした