20
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel5.8から非推奨になるヘルパーメソッドを一括置換したときのメモ

Last updated at Posted at 2019-06-12

Laravel 5.8 から一部のヘルパーメソッドが非推奨に

対象は array_* 系や str_* 系とのこと。
世間一般でどうかは知らないけど、個人的にはめっちゃ使っていたのでショック。。
とくに array_get() はむっちゃ使ってたよ。

対応方法

非推奨となったメソッドは使わないように直すか、
別パッケージを使うことで引き続き使えるようにするか、大きく2つの方法が考えられます。

非推奨でも使い続ける方法

https://github.com/laravel/helpers
ヘルパーメソッドを追加するパッケージがあるので composer で追加する。

こうすることで とくにアプリケーション側は変更することなくいけそうです。
僕は使ってないけど。

非推奨になったメソッドを撲滅する方法

Laravelアプリケーションのディレクトリへ移動してから 下記コマンドで調査。

無くなるのが array_* str_* 系のメソッドということなので
対象メソッドがどれだけあるのかgrepしてみる。


$ grep 'function array_' vendor/laravel/framework/src/Illuminate/Support/helpers.php
    function array_add($array, $key, $value)
    function array_collapse($array)
    function array_divide($array)
    function array_dot($array, $prepend = '')
    function array_except($array, $keys)
    function array_first($array, callable $callback = null, $default = null)
    function array_flatten($array, $depth = INF)
    function array_forget(&$array, $keys)
    function array_get($array, $key, $default = null)
    function array_has($array, $keys)
    function array_last($array, callable $callback = null, $default = null)
    function array_only($array, $keys)
    function array_pluck($array, $value, $key = null)
    function array_prepend($array, $value, $key = null)
    function array_pull(&$array, $key, $default = null)
    function array_random($array, $num = null)
    function array_set(&$array, $key, $value)
    function array_sort($array, $callback)
    function array_sort_recursive($array)
    function array_where($array, callable $callback)
    function array_wrap($value)
    
$ grep 'function str_' vendor/laravel/framework/src/Illuminate/Support/helpers.php
    function str_after($subject, $search)
    function str_contains($haystack, $needles)
    function str_finish($value, $cap)
    function str_is($pattern, $value)
    function str_limit($value, $limit = 100, $end = '...')
    function str_plural($value, $count = 2)
    function str_random($length = 16)
    function str_replace_array($search, array $replace, $subject)
    function str_replace_first($search, $replace, $subject)
    function str_replace_last($search, $replace, $subject)
    function str_singular($value)
    function str_slug($title, $separator = '-')
    function str_start($value, $prefix)

使う場所は app/* または resouces/* 配下になるので さっきの結果を利用して調べてみる。


$ grep -r -e 'array_add' -e 'array_collapse' -e 'array_divide' -e 'array_dot' -e 'array_except' -e 'array_first' -e 'array_flatten' -e 'array_forget' -e 'array_get' -e 'array_has' -e 'array_last' -e 'array_only' -e 'array_pluck' -e 'array_prepend' -e 'array_pull' -e 'array_random' -e 'array_set' -e 'array_sort' -e 'array_sort_recursive' -e 'array_where' -e 'array_wrap' app/*
$ grep -r -e 'array_add' -e 'array_collapse' -e 'array_divide' -e 'array_dot' -e 'array_except' -e 'array_first' -e 'array_flatten' -e 'array_forget' -e 'array_get' -e 'array_has' -e 'array_last' -e 'array_only' -e 'array_pluck' -e 'array_prepend' -e 'array_pull' -e 'array_random' -e 'array_set' -e 'array_sort' -e 'array_sort_recursive' -e 'array_where' -e 'array_wrap' resources/*

$ grep -r -e 'str_after' -e 'str_contains' -e 'str_finish' -e 'str_is' -e 'str_limit' -e 'str_plural' -e 'str_random' -e 'str_replace_array' -e 'str_replace_first' -e 'str_replace_last' -e 'str_singular' -e 'str_slug' -e 'str_start' app/*
$ grep -r -e 'str_after' -e 'str_contains' -e 'str_finish' -e 'str_is' -e 'str_limit' -e 'str_plural' -e 'str_random' -e 'str_replace_array' -e 'str_replace_first' -e 'str_replace_last' -e 'str_singular' -e 'str_slug' -e 'str_start' resources/*

修正した後で対応漏れがないか確認する時にもこのコマンドを使って確認する。

awk コマンドが便利だった

これ使うことでコマンドごとにカウントできた。


$ grep -r -e 'array_add' -e 'array_collapse' -e 'array_divide' -e 'array_dot' -e 'array_except' -e 'array_first' -e 'array_flatten' -e 'array_forget' -e 'array_get' -e 'array_has' -e 'array_last' -e 'array_only' -e 'array_pluck' -e 'array_prepend' -e 'array_pull' -e 'array_random' -e 'array_set' -e 'array_sort' -e 'array_sort_recursive' -e 'array_where' -e 'array_wrap' app/* | awk 'match($0, /(array_[a-z]+)/, a) { print a[1] }' | sort | uniq -c
$ grep -r -e 'array_add' -e 'array_collapse' -e 'array_divide' -e 'array_dot' -e 'array_except' -e 'array_first' -e 'array_flatten' -e 'array_forget' -e 'array_get' -e 'array_has' -e 'array_last' -e 'array_only' -e 'array_pluck' -e 'array_prepend' -e 'array_pull' -e 'array_random' -e 'array_set' -e 'array_sort' -e 'array_sort_recursive' -e 'array_where' -e 'array_wrap' resources/* | awk 'match($0, /(array_[a-z]+)/, a) { print a[1] }' | sort | uniq -c
$ grep -r -e 'str_after' -e 'str_contains' -e 'str_finish' -e 'str_is' -e 'str_limit' -e 'str_plural' -e 'str_random' -e 'str_replace_array' -e 'str_replace_first' -e 'str_replace_last' -e 'str_singular' -e 'str_slug' -e 'str_start' app/* | awk 'match($0, /(str_[a-z]+)/, a) { print a[1] }' | sort | uniq -c
$ grep -r -e 'str_after' -e 'str_contains' -e 'str_finish' -e 'str_is' -e 'str_limit' -e 'str_plural' -e 'str_random' -e 'str_replace_array' -e 'str_replace_first' -e 'str_replace_last' -e 'str_singular' -e 'str_slug' -e 'str_start' resources/* | awk 'match($0, /(str_[a-z]+)/, a) { print a[1] }' | sort | uniq -c

$ #こんな感じで結果が出るよ
$ grep -r -e 'array_add' -e 'array_collapse' -e 'array_divide' -e 'array_dot' -e 'array_except' -e 'array_first' -e 'array_flatten' -e 'array_forget' -e 'array_get' -e 'array_has' -e 'array_last' -e 'array_only' -e 'array_pluck' -e 'array_prepend' -e 'array_pull' -e 'array_random' -e 'array_set' -e 'array_sort' -e 'array_sort_recursive' -e 'array_where' -e 'array_wrap' app/* | awk 'match($0, /(array_[a-z]+)/, a) { print a[1] }' | sort | uniq -c
    403 array_get
     33 array_has
     22 array_set

さぁ置換してみよう

使っているエディタとかによって色々方法はあるんだろうけど、僕はこんな感じでやってみました。


$ # array_getの置換
$ find ./app -type f -name "*.php" -print0 | xargs -0 sed -i.bak 's/array_get/\\Illuminate\\Support\\Arr::get/g'
$ find . -type f -name "*.bak" -print0 | xargs -0 rm -f

$ # array_hasの置換
$ find ./app -type f -name "*.php" -print0 | xargs -0 sed -i.bak 's/array_has/\\Illuminate\\Support\\Arr::has/g'
$ find . -type f -name "*.bak" -print0 | xargs -0 rm -f

$ # array_setの置換
$ find ./app -type f -name "*.php" -print0 | xargs -0 sed -i.bak 's/array_set/\\Illuminate\\Support\\Arr::set/g'
$ find . -type f -name "*.bak" -print0 | xargs -0 rm -f

実際に新規で書いていく場合は しっかり名前空間を書くのはダルいので useとかして
Arr::get() みたいに書きたいと思います。

https://github.com/laravel/laravel/blob/v5.8.0/config/app.php
5.8からヘルパーメソッドで array_系とstr_系が無くなるかわりに ファサードとして「Arr」や「Str」があるので useしなくてもいけるっぽい

20
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?