エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】直前にアクセスしたページのURLを取得する【188日目】

引数を入れた時どうなるかも書きました

取得失敗した時の動作が書かれているよ。

willow710kut.hatenablog.com

直前にアクセスしたURL、ページに来るためのリクエスト元のURL

こうかく

url()->previous();

結果

"http://blog.hatena.ne.jp/willow710kut" みたいにStringで取得出来る。

余談、 /willow710kutの部分を取得するならPHPparse_url()使って

parse_url(url()->previous();, PHP_URL_PASS);

こんな感じ。

公式ドキュメント

ヘルパ関数 5.3 Laravel

PHP: parse_url - Manual

【Docker】phpでPDOにmysqlを使うと、could not find driverと出る【186日目】

Dockerfile

FROM php:7.1-fpm

phpファイル

$dbh = new PDO('mysql:host=mysqlaaa;dbname=dbname',
                'username',
                'password);

エラー

could not find driver

対処法

RUN docker-php-ext-install pdo_mysqlの一文をDockerfileに付け足す

FROM php:7.1-fpm
RUN docker-php-ext-install pdo_mysql

なぜか

PDOのプラグインmysqlが入っていないから。

phpinfo();でPDOを検索するとわかりやすい。

おまけ:初心者がDockerを勉強した本

■対象の人:環境構築わからない・・・インフラ用語わからない・・・

プログラム書けるけど、インフラ用語わからない、環境構築してみたいけどできない。

私がそうでしたが、以下の本で勉強しました。

インフラの用語を一から説明してくれて、その後にDockerの話をしてくれるので初心者向けです。
Laravelの環境くらいなら、一人で書けるようになりました。

アフィリエイトリンク貼ると、胡散臭くなるけど、単純におすすめしたい本(`・ω・´)ゞ

【Laravel】routeに名前空間(namespace)を使って、見やすい構成に【179日目】

こんな書き方あるよ

Route::group(['namespace' => 'Admin'], function () {
    // "App\Http\Controllers\Admin"名前空間下のコントローラ
});

何が嬉しいの?

App\Http\Controllers\Admin\SomeController.php
App\Http\Controllers\Admin\AnyController.php
App\Http\Controllers\User\SomeController.php
App\Http\Controllers\User\AnyController.php

こんな構成なら、下のように
■同じコントローラー名でも見やすく書ける
ディレクトリに分けてルートが書ける

Route::group(['namespace' => 'Admin'], function () {
    Route::get('admin/some', 'SomeController@show');
    Route::get('admin/any', 'AnyController@show');
});

Route::group(['namespace' => 'User'], function () {
    Route::get('some', 'SomeController@show');
    Route::get('any', 'AnyController@show');
});

参考ページ

ルーティング 5.3 Laravel

【PHP】null合体演算子とエルビス演算子(三項演算子)の違い【163日目】

ちょっと間違えていたので

こちらの方で内容を変えて書いています。こちらもご参考に

www.nyamucoro.com

null合体演算子とは

null合体演算子(A ?? B)は、
Aが nullundefinedの時に、Bを出力し、
非nullの時にはAを出力するものです。

例がundefinedやnullの場合の処理を考える時に便利です。

// undefinedなので、''が出力される
echo $item ?? '';

// nullなので、''が出力される
$item = null;
echo $item ?? '';

// 非nullなので、10が出力される
$item = 10;
echo $item ?? '';

エルビス演算子(三項演算子)とは

エルビス演算子(?:)は、評価がtrueかによって分岐します。
三項演算子とも呼ばれます。

シンプルなif文を短く書いたり、見やすくするために使われたりしますが、
三項演算子を好まない人もいるので、チームメンバーと事前に使うかどうか決めておくとより良いです。

$item = 10;

// isset($item)がtrueなので、$itemが出力される
echo isset($item) ? $item : '';

// 上の式は下と一緒
if (isset($item)) {
    echo $item;
} else {
    echo '';
}

$item = 1;
// ?と:の間を省略すると、
// $itemが1なので、trueと同等であることから、$itemが出力されます。
echo $item ?: '';

// 上の式は下と一緒
if ($item) {
    echo $item;
} else {
    echo '';
}

それぞれの公式ドキュメント

null 合体演算子 (??)

この演算子は、もし第一オペランドが非 NULL の値であればそれを返し、 そうでない場合は第二オペランドを返します。

http://php.net/manual/ja/migration70.new-features.php

エルビス演算子三項演算子)(?:)

(expr1) ? (expr2) : (expr3) という式は、式1 が TRUE の場合に 式2 を、 式1 が FALSE の場合に 式3 を値とします。

式 expr1 ?: expr3 の結果は、expr1 が TRUE と同等の場合は expr1、 それ以外の場合は expr3 となります。

http://php.net/manual/ja/language.operators.comparison.php

【PHP】多態性(ポリモーフィズム)について勉強中【162日目】

元となる抽象クラス

<?php
abstract class baseClass
{
    abstract public function action();
}

継承先のクラス2つ

class ringoClass extends baseClass
{
    public function action() 
    {
        echo '私はりんごだよ';
    }
}
class orangeClass extends baseClass
{
    public function action() 
    {
        echo '私はオレンジだよ';
    }
}

動作させるコード

$r_class = new ringoClass;
$o_class = new orangeClass;

$r_class->action();
$o_class->action();

同じクラスを継承して、『同名のクラスを持つけど、別の動作してる』って話・・・?

Javaだと、$r_classと$o_classをbaseClass型で受け取るから、イメージがついた感じしたけど、
PHPで作ってみて、ポリモーフィズムがますますわからなくなった・・・

【PHP】??。undefinedに対してifを書くときにissetを使わない方法。【161日目】

undefindedの時に、空文字を出したい

if (isset($item)) {
    echo $item;
} else {
    echo '';
}

あるいは、三項演算子を使って

    echo (isset($item) ? $item : '')

これをnull 合体演算子 (??)を使って書く

null合体演算子

    echo ($item ?? '');

短い。見やすい。便利ね。

公式ドキュメント

PHP: 新機能 - Manual

【PHP】フレームワーク使わずルーティングしたかった【144日目】

前提・ゴール

nginx等で、強制的にindex.phpを読み込ませる

index.phpから、URIに合わせて、別ファイルを読み込ませるのをゴール

手順

URIを取得

②クエリと分ける

URIに合わせてinclueするファイル分ける

書いたコード

index.php(①と②を担当)

<?php
$uri = $_SERVER['REQUEST_URI'];
$query = $_SERVER['QUERY_STRING'];
$uri = str_replace('?' . $query, '', $uri);

include 'route/route.php';

route.php

<?php
if ($uri === '/hogehoge') {
    include 'answer/hogehoge.php';
} else if ($uri === '/hugahuga') {
    include 'answer/hugahuga.php';
} else {
    include 'answer/other.php';
}

悩み

includeでファイル見つからなかった時の対応書けてない

そもそもinclude、require以外でルーティング実装する方法思いつかなかった

どなたかアドバイスいただけたら嬉しいです。
こんなものなのかなぁ・・・

laravelの環境構築で参考にしたサイト一覧【125日目】

基本形

qiita.com

Nginx + php-fpmの環境を作ろうとしたらPHPファイルがダウンロードされる

utano.jp

mcryptをphp7.2でもインストールする方法

blog.apar.jp

ぼやき

とりあえずわからないところは極力削って環境構築。

わからないままコピペよくない。

一応手元でLaravelの基本ページを表示出来るとこまでいけました。

さて、切りが良いので次はGoの勉強に戻ります。また落ち着いたらLaravelでてきとーなサイトをECS使いながら公開するとこまで行きたいところ。

動作が落ち着いたらgithubで公開しますね。