{"id":30545,"date":"2023-10-13T12:26:25","date_gmt":"2023-09-17T21:09:40","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/"},"modified":"2025-08-12T19:41:52","modified_gmt":"2025-08-12T11:41:52","slug":"%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/","title":{"rendered":"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f"},"content":{"rendered":"<h1>\u6f14\u793a\u7f51\u7ad9\u4f46\u5b83\u6ca1\u6709\u5de5\u4f5c\u3002 t\u0101 .)<\/p>\n<h1>\u7814\u53d1\u73af\u5883<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/3-2.png\" alt=\"image.png\" \/><\/p>\n<h2>\u5c06Web\u76ee\u5f55\u8fdb\u884c\u91cd\u5199\/MiniBlog\/web\/\u30d5\u30a9\u30eb\u30c0\u3092 \u4e8b\u5b9f\u4e0a\u306e \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30eb\u30fc\u30c8\u306b\u3059\u308b\u305f\u3081<\/p>\n<pre class=\"post-pre\"><code>MiniBlog\r\n\u251c\u2500\u2500 web &lt;- \u3053\u3053\u4ee5\u4e0b\u306e\u30d5\u30a9\u30eb\u30c0\u4ee5\u5916\u306e\u30a2\u30af\u30bb\u30b9\u306f\u30ea\u30e9\u30a4\u30c8\u3055\u305b\u308b\u3002\r\n\u2502   \u251c\u2500\u2500 css\r\n\u2502   \u2502   \u2514\u2500\u2500 style.css\r\n\u2502   \u251c\u2500\u2500 img\r\n\u2502   \u2502   \u2514\u2500\u2500 img01.png\r\n\u2502   \u251c\u2500\u2500 index.php\r\n\u2502   \u2514\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 .htaccess &lt;-- \u30ea\u30e9\u30a4\u30c8\u51e6\u7406\u3059\u308b\u30d5\u30a1\u30a4\u30eb\r\n\u2514\u2500\u2500 file.php &lt;-web\u30d5\u30a9\u30eb\u30c0\u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u306fURL\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u3088\u3046\u306b\u3059\u308b\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">.htaccess\u306fApache\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u308b\u30d5\u30a1\u30a4\u30eb<\/ul>\n<\/li>\n<\/ul>\n<p>.htaccess \u8a73\u7d30\u30b5\u30a4\u30c8<\/p>\n<p>MiniBlog \u4ee5\u4e0b\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3059\u3079\u3066\u306b\u9069\u7528\u3055\u308c\u308b\u3002<\/p>\n<p>url \u304b\u3089 MiniBlog \u4ee5\u4e0b\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308c\u3070\u3001\/MiniBlog\/web\/ \u306b\u30a4\u30f3\u30ca\u30fc\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u305b\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;<span class=\"n\">IfModule<\/span> <span class=\"n\">mod_rewrite<\/span>.<span class=\"n\">c<\/span>&gt;\r\n<span class=\"c\"># \u30ea\u30e9\u30a4\u30c8\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u8a2d\u5b9a\r\n<\/span>    <span class=\"n\">RewriteEngine<\/span> <span class=\"n\">On<\/span>\r\n    <span class=\"n\">RewriteRule<\/span> ^(.*)$ \/<span class=\"n\">MiniBlog<\/span>\/<span class=\"n\">web<\/span>\/$<span class=\"m\">1<\/span> [<span class=\"n\">QSA<\/span>,<span class=\"n\">L<\/span>]\r\n<span class=\"c\"># ^(.*)$ \u306e\u5bfe\u8c61\u6587\u5b57\u5217\u306f .htaccess \u304c\u304a\u304b\u308c\u305f \u5834\u6240\u306e \u76f8\u5bfe\u30d1\u30b9 \u306b\u306a\u308b\u3002\r\n#  \u96a3\u306e \/MiniBlog\/web\/$1 \u306f \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306e\u30d1\u30b9\r\n# \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306e\u30d1\u30b9\u306f \u30c9\u30e1\u30a4\u30f3\u4ee5\u964d\u306e\u30d1\u30b9\u3067\u6307\u5b9a http:\/\/localhost '\/\u4ee5\u964d\u306e\u30d1\u30b9'\r\n#                             \u307e\u305f\u306f\u3001http\u304b\u3089\u6307\u5b9a\u3059\u308b\u3002\r\n#                             \u307e\u305f\u306f\u76f8\u5bfe\u30d1\u30b9\u3067\u3082\u6307\u5b9a\u3067\u304d\u308b\u3002\r\n# $1 \u306f \u3053\u306e(.*) \u5f8c\u65b9\u53c2\u7167\u3055\u308c\u305f \u76f8\u5bfe\u30d1\u30b9 \u306b\u306a\u308b\u3002\r\n# preg_match\u306b\u304a\u3051\u308b\uff12\u756a\u76ee\u306e\u5f15\u6570\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306a\u306e\u3067\u3092\u7701\u7565\u3057\u3066\u3044\u308b\u611f\u3058\u3002 \r\n#   -&gt; preg_match('\/(.*)+\/','MiniBlog\u3092\u542b\u307e\u306a\u3044path\u304c\u5bfe\u8c61\u6587\u5b57\u5217');\r\n# \u30de\u30c3\u30c1\u3057\u305f\u3089 \u96a3\u306e \/MiniBlog\/web\/$1 [QSA,L] \u306b \u30a4\u30f3\u30ca\u30fc\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u3002\r\n<\/span>&lt;\/<span class=\"n\">IfModule<\/span>&gt;\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3053\u306e\u307e\u307e\u3067\u306fweb\u4ee5\u4e0b\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u307e\u3067web\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u6c38\u4e45\u30eb\u30fc\u30d7\u306b\u306a\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">web\u4ee5\u4e0b\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308c\u3070\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\u5909\u66f4\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>\u30d5\u30a1\u30a4\u30eb\u304c\u306a\u3051\u308c\u3070\u3001web\\index.php (\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc)\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068\u3067\u3001\u30eb\u30fc\u30d7\u3059\u308b\u3053\u3068\u306a\u304f\u6700\u7d42\u7684\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306f\u7d42\u4e86\u3059\u308b<br \/>\nURL\u306b\u5bfe\u5fdc\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408 index.php\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u305f\u3081 url \u304b\u3089 index.php \u3092 \u96a0\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;IfModule mod_rewrite.c&gt;\r\n    RewriteEngine On\r\n    RewriteCond %{REQUEST_FILENAME} !-f\r\n    RewriteRule ^(.*)$ \/MiniBlog\/web\/index.php [QSA,L]\r\n&lt;\/IfModule&gt;\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30ea\u30e9\u30a4\u30c8\u6a5f\u80fd\u306e\u52d5\u4f5c\u78ba\u8a8d<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;head&gt;<\/span>\r\n    <span class=\"nt\">&lt;meta<\/span> <span class=\"na\">charset=<\/span><span class=\"s\">\"UTF-8\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;meta<\/span> <span class=\"na\">http-equiv=<\/span><span class=\"s\">\"X-UA-Compatible\"<\/span> <span class=\"na\">content=<\/span><span class=\"s\">\"IE=edge\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;meta<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"viewport\"<\/span> <span class=\"na\">content=<\/span><span class=\"s\">\"width=device-width, initial-scale=1.0\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;title&gt;<\/span>web\/index.php<span class=\"nt\">&lt;\/title&gt;<\/span>\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"c1\">\/\/ href\u3084src\u306f\u76f8\u5bfe\u30d1\u30b9\u3067\u6307\u5b9a\u3057\u3066\u3082OK       ?&gt;<\/span>\r\n<span class=\"o\">&lt;?<\/span><span class=\"n\">php<\/span> <span class=\"c1\">\/\/ \u305f\u3060\u4e00\u822c\u7684\u306b\u306f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9\u3067\u6307\u5b9a\u3059\u308b\u3002     ?&gt;<\/span>\r\n    <span class=\"o\">&lt;<\/span><span class=\"n\">link<\/span> <span class=\"n\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"stylesheet\"<\/span> <span class=\"n\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\/MiniBlog\/css\/style.css\"<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"n\">head<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"n\">body<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"o\">&lt;<\/span><span class=\"n\">h1<\/span><span class=\"o\">&gt;<\/span><span class=\"n\">\u30df\u30cb\u30d6\u30ed\u30b0<\/span><span class=\"o\">&lt;\/<\/span><span class=\"n\">h1<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"o\">&lt;?<\/span><span class=\"n\">php<\/span> <span class=\"c1\">\/\/ \u9069\u5f53\u306a\u753b\u50cf ?&gt;<\/span>\r\n    <span class=\"o\">&lt;<\/span><span class=\"n\">img<\/span> <span class=\"n\">src<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\/MiniBlog\/img\/01.png\"<\/span> <span class=\"n\">alt<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\"<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"n\">body<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"n\">html<\/span><span class=\"o\">&gt;<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nt\">body<\/span><span class=\"p\">{<\/span>\r\n    <span class=\"nl\">background<\/span><span class=\"p\">:<\/span> <span class=\"no\">green<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;h1&gt;<\/span>file<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/15-9.png\" alt=\"image.png\" \/><\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/16-0.png\" alt=\"image.png\" \/><\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/17-0.png\" alt=\"image.png\" \/><\/p>\n<h1>\u521b\u5efaClassLoader\u7c7b<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u52d5\u3067\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306b\u5fc5\u8981\u306a\u30d7\u30ed\u30d1\u30c6\u30a3\u3068\u30e1\u30bd\u30c3\u30c9\u3092\u96c6\u3081\u305f\u30af\u30e9\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">php \u3067\u306f\u4ed6\u30d5\u30a1\u30a4\u30eb\u306f\u8aad\u307f\u8fbc\u3080\u3053\u3068\u3067 \u30a2\u30af\u30bb\u30b9 \u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>file1.php<br \/>\n\/\/ \u914d\u5217\u3060\u3051\u3092\u8fd4\u3059\u30d5\u30a1\u30a4\u30eb<br \/>\nreturn [<br \/>\n&#8216;a&#8217; =&gt; &#8216;A&#8217;<br \/>\n];<\/p>\n<p>file2.php<br \/>\n$aaa = require &#8216;file1.php&#8217;;<\/p>\n<p>print_r($aaa);<br \/>\n\/\/ Array( &#8216;a&#8217; =&gt; &#8216;A&#8217;)<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 core\r\n\u2502   \u2514\u2500\u2500 Classloader.php (\u4f5c\u6210)\r\n\u2502   \u2514\u2500\u2500 Application.php (\u4f5c\u6210)\r\n\u2514\u2500\u2500 bootstrap.php (\u4f5c\u6210)\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u306e\u305f\u3081\u306e\u30eb\u30fc\u30eb<\/ul>\n<\/li>\n<\/ul>\n<p>1\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u306b1\u3064\u306e\u30af\u30e9\u30b9<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u540d\u306f\u30af\u30e9\u30b9\u540d.php\u306b\u3059\u308b<\/p>\n<p>spl_autoload_register\u95a2\u6570\u306b\u3064\u3044\u3066<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">ClassLoader<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30af\u30e9\u30b9\u3092\u691c\u7d22\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d5\u30eb\u30d1\u30b9\u3092\u683c\u7d0d\u3059\u308b<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$dirs<\/span><span class=\"o\">=<\/span><span class=\"p\">[];<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * spl_autoload_register \u95a2\u6570 \u3092\u5b9f\u884c\u3059\u308b\u30e1\u30bd\u30c3\u30c9\r\n     * \u3053\u306e\u95a2\u6570\u5b9f\u884c\u4ee5\u5f8c \u672a\u767b\u9332\u306e\u30af\u30e9\u30b9\u304c new \u3055\u308c\u308b\u3068\r\n     * \u5f15\u6570\u306b\u767b\u9332\u3057\u305f\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u304c\u81ea\u52d5\u3067\u5b9f\u884c\u3055\u308c\u308b\u3002\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">register<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u306eloadClass()\u306e\u5f15\u6570\u306b\u306f\u767a\u706b\u3055\u305b\u305f\u672a\u767b\u9332\u306e\u30af\u30e9\u30b9\u540d\u304c\u81ea\u52d5\u3067\u5165\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u5b9f\u5f15\u6570\u306earray(\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9,\u30e1\u30bd\u30c3\u30c9) \u306f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3067\u5b9f\u884c\u3059\u308b\u6642\u306e\u66f8\u304d\u65b9<\/span>\r\n<span class=\"c1\">\/\/ array(objct,'\u30e1\u30bd\u30c3\u30c9')(); &lt;- \u30e1\u30bd\u30c3\u30c9\u3092\u6587\u5b57\u5217\u3067\u5b9f\u884c\u3067\u304d\u308b\u3002<\/span>\r\n        <span class=\"nb\">spl_autoload_register<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'loadClass'<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u5bfe\u8c61\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d5\u30eb\u30d1\u30b9\u767b\u9332\r\n     * \u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\r\n     * core\u30c7\u30a3\u30ec\u30af\u30c8\u30ea \u3084 models\u30c7\u30a3\u30ec\u30af\u30c8\u30ea  \u306e \u30d5\u30eb\u30d1\u30b9\u304c $dir \u306b\u306a\u308b\u3002\r\n     *\r\n     * @param string $dir\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">registerDir<\/span><span class=\"p\">(<\/span><span class=\"nv\">$dir<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">dirs<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$dir<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * CB \u306e\u5f15\u6570\u306b\u306f \u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u3092\u542b\u3093\u3060\u30af\u30e9\u30b9\u540d\u304c\u6e21\u3063\u3066\u304f\u308b\r\n     * \u30af\u30e9\u30b9\u540d\u304b\u3089\u30d5\u30eb\u30d1\u30b9\u3092\u4f5c\u6210\u3057\u3066\r\n     * \u30d5\u30eb\u30d1\u30b9\u304c\u8aad\u307f\u8fbc\u3081\u305f\u3089\u8aad\u307f\u8fbc\u3093\u3067\u7d42\u4e86\u3055\u305b\u308b\u3002\r\n     * \u8aad\u307f\u8fbc\u3081\u306a\u304b\u3063\u305f\u3089 \u672a\u5b9a\u7fa9\u306e\u30af\u30e9\u30b9\u304c new \u3055\u308c\u305f\u3068\u30a8\u30e9\u30fc\u304c\u306f\u304b\u308c\u308b\u3002\r\n     * @param string $class\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">loadClass<\/span><span class=\"p\">(<\/span><span class=\"nv\">$class<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">dirs<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$dir<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$file<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$dir<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$class<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'.php'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">is_readable<\/span><span class=\"p\">(<\/span><span class=\"nv\">$file<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"k\">require_once<\/span> <span class=\"nv\">$file<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ return \u306f \u95a2\u6570(\u30e1\u30bd\u30c3\u30c9)\u3092\u7d42\u4e86\u3055\u305b\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ foreach \u304b\u3089 \u629c\u3051\u308b\u5834\u5408\u306f break<\/span>\r\n                <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"p\">}<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">bootstrap.php<\/ul>\n<\/li>\n<\/ul>\n<p>\u30aa\u30fc\u30c8\u30ed\u30fc\u30c0\u30fc\u3092\u5b9f\u884c\u3059\u308b\u30d5\u30a1\u30a4\u30eb<br \/>\nbootstrap.php\u306e\u914d\u7f6e\u5834\u6240\u306b\u3064\u3044\u3066 \u203b\u30d1\u30fc\u30d5\u30a7\u30af\u30c8PHP p.207<\/p>\n<p>bootstrap\u306b\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7acb\u3061\u4e0a\u3052\u308b\u305f\u3081\u306e\u52d5\u4f5c\u3068\u3044\u3046\u610f\u5473\u304c\u3042\u308b<br \/>\n\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u306b\u3042\u305f\u3063\u3066\u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u306f\u307e\u305a\u6700\u521d\u306b\u884c\u3046\u51e6\u7406\u3067\u3042\u308b<br \/>\n\u307e\u305f\u3001\u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u306e\u4ed6\u306b\u7279\u5225\u306b\u5fc5\u8981\u306a\u524d\u51e6\u7406\u304c\u51fa\u3066\u304d\u305f\u5834\u5408\u306b\u306f\u3001\u305d\u308c\u3089\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u51e6\u7406\u3092\u8a18\u8ff0\u3059\u308b\u5834\u6240\u3067\u3082\u3042\u308b<br \/>\n\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u7279\u5b9a\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u4f9d\u5b58\u3057\u306a\u3044\u5171\u901a\u51e6\u7406\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u306a\u306e\u3067\u3001\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea(\u968e\u5c64\u578b\u30d5\u30a1\u30a4\u30eb\u69cb\u9020\u306e\u6700\u4e0a\u968e\u5c64\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u3053\u3068)\u306e\u76f4\u4e0b\u306b\u914d\u7f6e\u3059\u308b\u306e\u304c\u671b\u307e\u3057\u3044<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n\r\n<span class=\"k\">require<\/span> <span class=\"s1\">'core\/ClassLoader.php'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nv\">$loader<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ClassLoader<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ \u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u306e\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u767b\u9332<\/span>\r\n<span class=\"nv\">$loader<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerDir<\/span><span class=\"p\">(<\/span><span class=\"nb\">dirname<\/span><span class=\"p\">(<\/span><span class=\"k\">__FILE__<\/span><span class=\"p\">)<\/span><span class=\"mf\">.<\/span><span class=\"s1\">'\/core'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"nv\">$loader<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerDir<\/span><span class=\"p\">(<\/span><span class=\"nb\">dirname<\/span><span class=\"p\">(<\/span><span class=\"k\">__FILE__<\/span><span class=\"p\">)<\/span><span class=\"mf\">.<\/span><span class=\"s1\">'\/models'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u30aa\u30fc\u30c8\u30ed\u30fc\u30c0\u30fc\u306e\u8d77\u52d5<\/span>\r\n<span class=\"nv\">$loader<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">register<\/span><span class=\"p\">();<\/span>\r\n<\/code><\/pre>\n<p>dirname(__FILE__) \u306b\u3064\u3044\u3066<\/p>\n<p>dirname(__FILE__) \u3068 __DIR__ \u306f\u540c\u3058<\/p>\n<p>basename(__FILE__) \u3067 \u30d5\u30a1\u30a4\u30eb\u540d\u304c\u53d6\u5f97\u3067\u304d\u308b\u3002<\/p>\n<p>dirname(__FILE__).\/core.\/\u30af\u30e9\u30b9\u540d.php<\/p>\n<p>dirname(__FILE__).\/core \u3092 dirs\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u4fdd\u5b58\u3057\u3066<br \/>\n\u3053\u306e \u30af\u30e9\u30b9\u540d \u3092 \u30aa\u30fc\u30c8\u30ed\u30fc\u30c0\u30fc\u3067\u53d6\u5f97\u3057\u8aad\u307f\u8fbc\u3093\u3067\u51e6\u7406\u3059\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">(){<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"s1\">'hello world'<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u524d\u7aef\u63a7\u5236\u5668<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 core\r\n\u2502   \u2514\u2500\u2500 Classloader.php\r\n\u251c\u2500\u2500 web \r\n\u2502   \u251c\u2500\u2500 index.php   (\u4f5c\u6210)\r\n\u2502   \u2514\u2500\u2500 .htaccess   (\u4f5c\u6210\u3057\u3066?\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30d4\u30da)\r\n\u251c\u2500\u2500 .htaccess       (\u4f5c\u6210\u3057\u3066?\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30d4\u30da)\r\n\u2514\u2500\u2500 bootstrap.php\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5168\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\uff08web\/index.php)\u3092\u53d7\u3051\u3068\u308b\u30d5\u30a1\u30a4\u30eb\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u3092\u4e00\u30f5\u6240\u3067\u8a18\u8ff0\u3067\u304d\u308b\u70b9\u3067\u30da\u30fc\u30b8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3088\u308a\u52b9\u7387\u7684\u306b\u306a\u308b\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"k\">require_once<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span><span class=\"s1\">'\/..\/bootstrap.php'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ new \u3057\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u3067 \u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u3057\u3066\u304f\u308c\u308b\u305f\u3081\u6539\u3081\u3066\u8aad\u307f\u3053\u3080\u51e6\u7406\u304c\u4e0d\u8981<\/span>\r\n<span class=\"nv\">$app<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Application<\/span><span class=\"p\">();<\/span>\r\n<span class=\"nv\">$app<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">run<\/span><span class=\"p\">();<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/31-0.png\" alt=\"image.png\" \/><\/p>\n<h1>\u521b\u5efa\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7c7b<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 core\r\n\u2502   \u251c\u2500\u2500 Application.php \r\n\u2502   \u2514\u2500\u2500 Classloader.php\r\n\u251c\u2500\u2500 web\r\n\u2502   \u2514\u2500\u2500 index.php\r\n\u251c\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 bootstrap.php\r\n\u2514\u2500\u2500 MiniBlogApplication.php (\u4f5c\u6210)\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9(\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u6a5f\u80fd\u3092\u4e00\u90e8 \u59d4\u8b72\u3055\u305b\u3066\u3044\u308b)<\/ul>\n<\/li>\n<\/ul>\n<p>\u30c7\u30d0\u30c3\u30af\u30e2\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u30e1\u30bd\u30c3\u30c9<br \/>\n\u5404\u30af\u30e9\u30b9\u306e\u7d76\u5bfe\u30d1\u30b9\u3092\u53d6\u5f97\u3059\u308b\u30e1\u30bd\u30c3\u30c9<br \/>\n\u5168\u3066\u306e\u30af\u30e9\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u305f\u3081\u306e\u30e1\u30bd\u30c3\u30c9<br \/>\n\u30e1\u30a4\u30f3\u30eb\u30fc\u30c1\u30f3\u3092\u5b9f\u884c\u3059\u308b\u30e1\u30bd\u30c3\u30c9<\/p>\n<p>\u30eb\u30fc\u30bf\u30fc\u30af\u30e9\u30b9\u304b\u3089<br \/>\n\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5fdc\u3058\u305f<br \/>\n\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9\u3092\u521d\u671f\u5316\u3057\u3066\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u884c<br \/>\n\u305d\u306e\u4e2d\u3067model\u30af\u30e9\u30b9\u3067\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u305f\u308a<br \/>\nview\u30af\u30e9\u30b9\u3067HTML\u3092\u4f5c\u6210\u3057\u3066<br \/>\n\u305d\u308c\u3092\u30ec\u30b9\u30dd\u30f3\u30b9\u30af\u30e9\u30b9\u306b\u6e21\u3057\u3066<br \/>\n\u6700\u5f8c\u306b\u30e6\u30fc\u30b6\u30fc\u306b\u30ec\u30b9\u30dd\u30f3\u30b9\u3059\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n\r\n<span class=\"c1\">\/\/ abstract \u4f7f\u7528\u3059\u308b\u306b\u306f \u30af\u30e9\u30b9\u3092\u62bd\u8c61\u5316 \u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308b<\/span>\r\n<span class=\"c1\">\/\/ abstract \u3059\u308b\u3068 \u76f4\u63a5\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u306a\u3044\u3002<\/span>\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$debug<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     * @param boolean $debug\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setDebugMode<\/span><span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u304b\u5224\u5b9a\r\n     *\r\n     * @return boolean\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">isDebugMode<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">debug<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u3092\u8a2d\u5b9a\r\n     * @param boolean $debug\r\n     *\/<\/span>\r\n<span class=\"cd\">\/** web\/index.php \r\n* \u672c\u756a\u3067\u30a8\u30e9\u30fc\u304c\u51fa\u306a\u3044\u3088\u3046\r\n* $app = new MiniBlogApplication(false);\r\n*\/<\/span>\r\n<span class=\"cd\">\/** web\/index_dev.php \r\n* \u958b\u767a\u74b0\u5883\u3067\u306f\u30a8\u30e9\u30fc\u304c\u51fa\u308b\u3088\u3046\r\n* $app = new MiniBlogApplication(true);\r\n*\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setDebugMode<\/span><span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">debug<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"nb\">ini_set<\/span><span class=\"p\">(<\/span><span class=\"s1\">'display_errors'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"nb\">error_reporting<\/span><span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">debug<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"nb\">ini_set<\/span><span class=\"p\">(<\/span><span class=\"s1\">'display_errors'<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n\r\n<span class=\"c1\">\/\/ abstract \u3059\u308b\u3053\u3068\u3067<\/span>\r\n<span class=\"c1\">\/\/ \u7d99\u627f\u30af\u30e9\u30b9\u3067\u5fc5\u305agetRootDir()\u306e\u8a18\u8ff0\u3059\u308b\u3088\u3046\u89aa\u30af\u30e9\u30b9\u3067\u5f37\u5236\u3067\u304d\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u30d7\u30ed\u30d1\u30c6\u30a3\u306fabstract\u3067\u304d\u306a\u3044<\/span>\r\n    <span class=\"k\">abstract<\/span> <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getRootDir<\/span><span class=\"p\">();<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30eb\u30fc\u30c8\u3078\u306e\u30d1\u30b9\u3092\u8fd4\u3059\r\n     * \u30d1\u30fc\u30d5\u30a7\u30af\u30c8PHP\u3067\u306fweb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30eb\u30fc\u30c8\r\n     *\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getWebDir<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n      <span class=\"c1\">\/\/abstract\u30e1\u30bd\u30c3\u30c9\u306f\u5177\u4f53\u7684\u306a\u51e6\u7406\u3092\u7d99\u627f\u30af\u30e9\u30b9\u3067\u8a18\u8ff0\u3057\u306a\u304c\u3089<\/span>\r\n      <span class=\"c1\">\/\/\u666e\u901a\u306b\u89aa\u30af\u30e9\u30b9\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRootDir<\/span><span class=\"p\">()<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/web'<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30d5\u30a1\u30a4\u30eb\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30d1\u30b9\u3092\u53d6\u5f97\r\n     *\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getControllerDir<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRootDir<\/span><span class=\"p\">()<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/controllers'<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30d3\u30e5\u30fc\u30d5\u30a1\u30a4\u30eb\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30d1\u30b9\u3092\u53d6\u5f97\r\n     *\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getViewDir<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRootDir<\/span><span class=\"p\">()<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/views'<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30e2\u30c7\u30eb\u30d5\u30a1\u30a4\u30eb\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30d1\u30b9\u3092\u53d6\u5f97\r\n     *\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getModelDir<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRootDir<\/span><span class=\"p\">()<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/models'<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"cd\">\/**\r\n * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\r\n *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span> \r\n        <span class=\"nv\">$root_path<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRootDir<\/span><span class=\"p\">();<\/span>    \r\n        <span class=\"c1\">\/\/ \u51fa\u529b<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"nv\">$root_path<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u7d99\u627f\u30af\u30e9\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>\u5177\u4f53\u7684\u306a\u51e6\u7406\u306f\u4f5c\u6210\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u4efb\u305b\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">MiniBlogApplication<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u7d99\u627f\u30af\u30e9\u30b9\u3067\u306f\u5fc5\u305agetRootDir()\u304c\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getRootDir<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u968e\u5c64\u578b\u30d5\u30a1\u30a4\u30eb\u69cb\u9020\u306e\u6700\u4e0a\u968e\u5c64\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u3053\u3068<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u81ea\u8eab\u304c\u3044\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u7d76\u5bfe\u30d1\u30b9\u3092\u8fd4\u3059\u3002<\/span>\r\n<span class=\"c1\">\/\/MiniBlogApplication.php\u306ebasename(\u30d5\u30a1\u30a4\u30eb\u540d)\u3092\u9664\u3044\u305f\u30d1\u30b9\u304c\u304b\u3048\u308b\u3002<\/span>\r\n       <span class=\"k\">return<\/span> <span class=\"nb\">dirname<\/span><span class=\"p\">(<\/span><span class=\"k\">__FILE__<\/span><span class=\"p\">);<\/span> \r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">web\/index.php\u3092\u5909\u66f4<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"k\">require<\/span> <span class=\"s1\">'..\/bootstrap.php'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ autoloader\u306e\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068 \u3053\u3068\u306a\u308b\u305f\u3081\u8aad\u307f\u8fbc\u3080\u5fc5\u8981\u304c\u3042\u308b<\/span>\r\n<span class=\"k\">require<\/span> <span class=\"s1\">'..\/MiniBlogApplication.php'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ debugmode\u3092true<\/span>\r\n<span class=\"nv\">$app<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">MiniBlogApplication<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\r\n<span class=\"nv\">$app<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">run<\/span><span class=\"p\">();<\/span> <span class=\"c1\">\/\/ run\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u884c<\/span>\r\n<\/code><\/pre>\n<p>\u203b\u8bf7\u786e\u8ba4 http:\/\/localhost\/MiniBlog\/index.php<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/41-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code> MiniBlogApplication  =&gt; $this-&gt;getRootDir() = dirname('__FILE__')\r\n\/\/ 1\u3064\u4e0b\u306e\u968e\u5c64\u306b\u914d\u7f6e\u3057\u3066\u3044\u308b\u3002\r\n    \u251c\u2500\u2500 controllers   =&gt; $this-&gt;getRootDir() + '\/controllers'\r\n    \u251c\u2500\u2500 core          =&gt; $this-&gt;getRootDir() + '\/core'\r\n    \u251c\u2500\u2500 models        =&gt; $this-&gt;getRootDir() + '\/models'\r\n    \u251c\u2500\u2500 views         =&gt; $this-&gt;getRootDir() + .'\/views'\r\n    \u2514\u2500\u2500 web           =&gt; $this-&gt;getRootDir() + '\/web'\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u4e00\u4e2a\u8f85\u52a9\u51fd\u6570\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4fbf\u5229\u306a\u95a2\u6570\u305f\u3061\u3092\u8a18\u8ff0<\/ul>\n<\/li>\n<\/ul>\n<p>\u3053\u308c\u306f\u30d1\u30fc\u30d5\u30a7\u30af\u30c8php\u304b\u3089\u3067\u306f\u306a\u304f\u6280\u8853\u66f8\u51785\u300e\u306f\u3058\u3081\u3066\u306eLaravel \u304b\u3089\u62dd\u501f\u3057\u307e\u3057\u305f<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"k\">function<\/span> <span class=\"n\">dd<\/span><span class=\"p\">()<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"c1\">\/\/ header(\"Content-type: text\/plain; charset=UTF-8\");<\/span>\r\n    <span class=\"nv\">$args<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">func_get_args<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$args<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$arg<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"s1\">'&lt;pre&gt;'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"c1\">\/\/ print_r($arg);<\/span>\r\n        <span class=\"nb\">var_dump<\/span><span class=\"p\">(<\/span><span class=\"nv\">$arg<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"s1\">'&lt;\/pre&gt;'<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"k\">exit<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">web\/index.php<\/ul>\n<\/li>\n<\/ul>\n<p>\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u8aad\u307f\u8fbc\u3080 (\u30af\u30e9\u30b9\u3067\u306a\u3044\u305f\u3081\u30aa\u30fc\u30c8\u30ed\u30fc\u30c9\u3057\u306a\u3044)<br \/>\nphp\u3067\u306f \u95a2\u6570\u306f\u5fc5\u305a\u30b0\u30ed\u30fc\u30d0\u30eb\u7a7a\u9593\u306b\u914d\u7f6e\u3055\u308c\u308b\u305f\u3081\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u3053\u3081\u3070\u3001\u305d\u306e\u307e\u307e\u30a2\u30af\u30bb\u30b9\u304c\u53ef\u80fd\u306b\u306a\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ -<\/span>\r\n<span class=\"c1\">\/\/ require '..\/bootstrap.php';<\/span>\r\n<span class=\"c1\">\/\/ require '..\/MiniBlogApplication.php';<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n<span class=\"c1\">\/\/ \u76f8\u5bfe\u30d1\u30b9\u304b\u3089\u7d76\u5bfe\u30d1\u30b9\u306b\u66f8\u304d\u63db\u3048<\/span>\r\n<span class=\"k\">require<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span><span class=\"s1\">'\/..\/bootstrap.php'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">require<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span><span class=\"s1\">'\/..\/MiniBlogApplication.php'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n<span class=\"k\">require<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span><span class=\"s1\">'\/..\/core\/functions.php'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nv\">$app<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">MiniBlogApplication<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\r\n<span class=\"nv\">$app<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">run<\/span><span class=\"p\">();<\/span>\r\n<\/code><\/pre>\n<h1>\u5728\u521b\u5efaRouter\u7c7b\u4e4b\u524d<\/p>\n<ul class=\"post-ul\">\u52d5\u7684\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u3059\u308b\u305f\u3081\u6b63\u898f\u8868\u73fe\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u305f\u3081\u306e\u6700\u4f4e\u9650\u306e\u6b63\u898f\u8868\u73fe\u306e\u89e3\u8aac<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">php\u306e\u6b63\u898f\u8868\u73fe\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u30b5\u30a4\u30c8<\/ul>\n<h3>\u5173\u4e8e\u6b63\u5219\u8868\u8fbe\u5f0f<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">URL\u306e\u6b63\u898f\u8868\u73fe\u306e\u30c7\u30ea\u30df\u30bf\u306f&#8217;\/&#8217;\u3067\u306f\u306a\u304f&#8217;#&#8217;\u3092\u4f7f\u3046<\/ul>\n<\/li>\n<\/ul>\n<p>url\u3092\u6b63\u898f\u8868\u73fe\u3059\u308b\u6642\u306e\u6ce8\u610f\u70b9<br \/>\n\u3088\u3046\u3059\u308b\u306b URL\u306e\u533a\u5207\u308a\u6587\u5b57\u3067\u3042\u308b\u3053\u308c \/ \u306f\u30e1\u30bf\u6587\u5b57\u306e\/\u3068\u533a\u5225\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\u305f\u3081\u30a8\u30b9\u30b1\u30fc\u30d7\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u306a\u308b<\/p>\n<p>\\\/\u3053\u3046\u3067\u306f\u306a\u304f\u666e\u901a\u306b \/ \u3053\u308c\u3067OK\u306b\u306a\u308b\u3002<\/p>\n<p>preg_match(&#8216;#^&#8217;.$request_url.&#8217;$#&#8217;, $url, $matches);<br \/>\n\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3067\u884c\u982d\u3068\u884c\u672b\u3092\u8868\u3059\u30e1\u30bf\u6587\u5b57\u306f^\u3068$\u3067\u306f\u306a\u304f\\A\u3068\\z\u306e\u307b\u3046\u304c\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7684\u306b\u306f\u3044\u3044\u3089\u3057\u3044<\/p>\n<p>\u6b63\u898f\u8868\u73fe\u306b\u3088\u308b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3067\u306f ^ \u3068 $ \u3067\u306f\u306a\u304f \\A \u3068 \\z \u3092\u4f7f\u304a\u3046;<\/p>\n<p>^abcd$<\/p>\n<p>\u884c\u982d\u3068\u884c\u672b\u306e\u30e1\u30bf\u6587\u5b57\u3067\u30d1\u30bf\u30fc\u30f3\u3092\u56f2\u3080\u3068\u5bfe\u8c61\u6587\u5b57\u5217\u306e\u5168\u3066\u306e\u6587\u5b57\u5217\u304c\u30d1\u30bf\u30fc\u30f3\u3068\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<br \/>\n?\u306e\u5834\u5408\u5bfe\u8c61\u6587\u5b57\u5217\u304c abcd \u306e\u6642\u3060\u3051\u4e00\u81f4\u3059\u308b\u3002<\/p>\n<p>\u52d5\u7684\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u306f\u540d\u524d\u4ed8\u304d\u30ad\u30e3\u30d7\u30c1\u30e3\u3092\u5229\u7528\u3059\u308b<br \/>\n\u30d1\u30bf\u30fc\u30f3\u4f8b : &#8216;#^user\/(?P[^\/]+)$#&#8217;\u3060\u3063\u305f\u5834\u5408<\/p>\n<p>(?P[^\/]+) &lt;- \u3053\u306e\u90e8\u5206\u304c\u540d\u524d\u4ed8\u304d\u30ad\u30e3\u30d7\u30c1\u30e3<\/p>\n<p>()\u306e\u5f8c\u65b9\u53c2\u7167 \u3068 \u4e00\u7dd2\u306b\u3064\u304b\u3046<\/p>\n<p>\u5f8c\u65b9\u53c2\u7167 \u3068\u306f<\/p>\n<p>()\u304c\u306a\u3044\u30d1\u30bf\u30fc\u30f3 \uff1a #^user\/[^\/]+$#<\/p>\n<p>()\u304c\u3042\u308b\u30d1\u30bf\u30fc\u30f3 \uff1a #^user\/([^\/]+)$#<\/p>\n<p>^user\/ \u884c\u982d\u306fuser\/\u3067\u59cb\u307e\u308a\u305d\u306e\u5f8c\u306e\u884c\u672b\u307e\u3067\u306e\u6587\u5b57\u5217\u306f<\/p>\n<p>[^\/]+$ \u884c\u672b\u307e\u3067\u306e1\u6587\u5b57\u4ee5\u4e0a\u306e\u6587\u5b57\u5217\u306a\u304b\u306b\/\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u306a\u3089\u30de\u30c3\u30c1\u3059\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"k\">function<\/span> <span class=\"n\">dd<\/span><span class=\"p\">()<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"nb\">header<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Content-type: text\/plain; charset=UTF-8\"<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"nv\">$args<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">func_get_args<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$args<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$arg<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nb\">print_r<\/span><span class=\"p\">(<\/span><span class=\"nv\">$arg<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"k\">exit<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u884c\u982d\u304b\u3089\u884c\u672b\u307e\u3067 `user\/` \u304b\u3089\u306f\u3058\u307e\u308a `\/` \u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u6587\u5b57\u5217(\u5c71\u7530\u592a\u90ce)\u3067\u7d42\u308f\u3063\u3066\u3044\u308b\u3002\u306a\u306e\u3067\u5bfe\u8c61\u6587\u5b57\u5217\u306f \u30d1\u30bf\u30fc\u30f3\u3068\u5b8c\u5168\u4e00\u81f4 \u3057\u3066\u3044\u308b\u3002<\/span>\r\n<span class=\"nv\">$url<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'user\/\u5c71\u7530\u592a\u90ce'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ \u5f8c\u65b9\u53c2\u7167\u3067\u306f\u306a\u3044\u6642<\/span>\r\n<span class=\"nv\">$pattern1<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'#^user\/[^\/]+$#'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ \u5f8c\u65b9\u53c2\u7167\u3067\u3042\u308b\u6642<\/span>\r\n<span class=\"nv\">$pattern2<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'#^user\/([^\/]+)$#'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"nv\">$pattern1<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$url<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$matches1<\/span><span class=\"p\">);<\/span>\r\n<span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"nv\">$pattern2<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$url<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$matches2<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$matches1<\/span><span class=\"p\">,<\/span><span class=\"nv\">$matches2<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ \u5f8c\u65b9\u53c2\u7167\u306a\u3057<\/span>\r\n<span class=\"k\">Array<\/span>\r\n<span class=\"p\">(<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">user<\/span><span class=\"o\">\/<\/span><span class=\"n\">\u5c71\u7530\u592a\u90ce<\/span>\r\n<span class=\"p\">)<\/span>\r\n<span class=\"c1\">\/\/ \u5f8c\u65b9\u53c2\u7167\u3042\u308a<\/span>\r\n<span class=\"k\">Array<\/span>\r\n<span class=\"p\">(<\/span>\r\n<span class=\"c1\">\/\/ \u30d1\u30bf\u30fc\u30f3\u3068\u4e00\u81f4\u3057\u305f\u3089\u4e00\u81f4\u3057\u305f\u3068\u3053\u308d\u304c\u304b\u3048\u308b\u3002<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">user<\/span><span class=\"o\">\/<\/span><span class=\"n\">\u5c71\u7530\u592a\u90ce<\/span>\r\n<span class=\"c1\">\/\/ \u5f8c\u65b9\u53c2\u7167\u3068\u4e00\u81f4\u3057\u305f\u90e8\u5206\u3092\u629c\u304d\u51fa\u3057\u3066\u304f\u308c\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ [0] \u4ee5\u964d\u306b\u304b\u3048\u3063\u3066\u304f\u308b<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">\u5c71\u7530\u592a\u90ce<\/span>\r\n<span class=\"p\">)<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u540d\u524d\u4ed8\u304d\u30ad\u30e3\u30d7\u30c1\u30e3<\/ul>\n<\/li>\n<\/ul>\n<p>(?P&lt;\u540d\u524d&gt;\u540d\u524d\u4ed8\u304d\u8fd4\u5374\u3057\u305f\u3044\u6b63\u898f\u8868\u73fe\u306e\u30d1\u30bf\u30fc\u30f3)\u306b\u306a\u308b<br \/>\n\u540d\u524d\u4ed8\u304d\u30ad\u30e3\u30d7\u30c1\u30e3\u306e\u305f\u3081username\u3068\u3044\u3046key\u3067\u8fd4\u3057\u3066\u304f\u308c\u308b<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"k\">function<\/span> <span class=\"n\">dd<\/span><span class=\"p\">()<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"nb\">header<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Content-type: text\/plain; charset=UTF-8\"<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"nv\">$args<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">func_get_args<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$args<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$arg<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nb\">print_r<\/span><span class=\"p\">(<\/span><span class=\"nv\">$arg<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"k\">exit<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"nv\">$pattern<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'#^user\/(?P&lt;username&gt;[^\/]+)$#'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"nv\">$url1<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'user\/\u5c71\u7530\u592a\u90ce'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"nv\">$url2<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'user\/\u5c71\u7530\u592a\u90ce\/\u4e8c\u4e16'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"nv\">$pattern<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$url1<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$matches1<\/span><span class=\"p\">);<\/span>\r\n<span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"nv\">$pattern<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$url2<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$matches2<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$matches1<\/span><span class=\"p\">,<\/span><span class=\"nv\">$matches2<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">Array<\/span>\r\n<span class=\"p\">(<\/span>\r\n<span class=\"c1\">\/\/ \u4e00\u81f4\u3057\u305f\u3089 [0] \u306b\u306f user\/\u6587\u5b57\u5217 \u304c\u304b\u3048\u308b<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">user<\/span><span class=\"o\">\/<\/span><span class=\"n\">\u5c71\u7530\u592a\u90ce<\/span>  \r\n\r\n<span class=\"c1\">\/\/ [1] \u4ee5\u964d\u306b \u5f8c\u65b9\u53c2\u7167\u306e\u30d1\u30bf\u30fc\u30f3\u3068\u30de\u30c3\u30c1\u3057\u305f\u6587\u5b57\u5217\u304c\u304b\u3048\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u540d\u524d\u4ed8\u304d\u30ad\u30e3\u30d7\u30c1\u30e3\u306b\u3059\u308b\u3068 \u540d\u524d\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 \u4e21\u65b9\u3067\u304b\u3048\u308b<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"n\">username<\/span><span class=\"p\">]<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">\u5c71\u7530\u592a\u90ce<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">\u5c71\u7530\u592a\u90ce<\/span>\r\n<span class=\"p\">)<\/span>\r\n<span class=\"c1\">\/\/ $url = 'user\/\u5c71\u7530\u592a\u90ce\/\u4e8c\u4e16' \u3053\u306e\u5834\u5408\u306f\u4e00\u81f4\u3057\u306a\u3044\u306e\u3067\u7a7a\u306e\u914d\u5217\u304c\u304b\u3048\u308b<\/span>\r\n<span class=\"k\">Array<\/span><span class=\"p\">()<\/span>\r\n<\/code><\/pre>\n<h3>\u6ce8\u518c\u6839\u76ee\u5f55\u7684\u65b9\u6cd5<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30eb\u30fc\u30c8\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u56fa\u6709\u306e\u60c5\u5831\u306e\u305f\u3081MiniBlogApplication\u30af\u30e9\u30b9\u306b\u5b9f\u88c5<\/ul>\n<\/li>\n<\/ul>\n<p>larabel \u3067\u3044\u3046\u3068\u3000routes\/web.php \u30d5\u30a1\u30a4\u30eb\u306b\u3042\u305f\u308b<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n\r\n<span class=\"c1\">\/\/+    <\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u767b\u9332\u3059\u308b\u305f\u3081\u306e abstract \u30e1\u30bd\u30c3\u30c9\r\n     * @return array\r\n     *\/<\/span>\r\n    <span class=\"k\">abstract<\/span> <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">registerRoutes<\/span><span class=\"p\">();<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63 \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u60c5\u5831\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9<\/span>\r\n         <span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerRoutes<\/span><span class=\"p\">());<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">MiniBlogApplication<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n<span class=\"c1\">\/\/\u30eb\u30fc\u30c8\u306e\u767b\u9332\u3000<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">registerRoutes<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'\/'<\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'index'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"s1\">'\/status\/post'<\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'post'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"c1\">\/\/ :user_name &lt;= \u52d5\u7684\u306b\u5909\u66f4\u3057\u305f\u3044\u30d1\u30b9\u306f ':' \u5148\u982d\u306bcolon\u3092\u3064\u3051\u308b<\/span>\r\n            <span class=\"s1\">'\/user\/:user_name'<\/span>\r\n            <span class=\"c1\">\/\/ \u4e0a\u306f '\/user\/(?p&lt;user_name&gt;[^\/]+)' \u306b\u306a\u308b\u3002 <\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'user'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"s1\">'\/user\/:user_name\/status\/:id'<\/span>\r\n            <span class=\"c1\">\/\/ \u4e0a\u306f '\/user\/(?p&lt;user_name&gt;[^\/]+)\/status\/(?p&lt;id&gt;[^\/]+)' \u306b\u306a\u308b\u3002<\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'show'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"s1\">'\/account'<\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'index'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"s1\">'\/account\/:username'<\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'show'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"s1\">'\/account\/:action'<\/span>\r\n            <span class=\"c1\">\/\/ \u4e0a\u306f '\/account\/(?p&lt;action&gt;[^\/]+)' \u306b\u306a\u308b<\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"s1\">'\/follow'<\/span>\r\n            <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'follow'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/63-0.png\" alt=\"image.png\" \/><\/p>\n<h1>\u521b\u5efa\u4e00\u4e2a\u8def\u7531\u5668\u7c7b (CrouterClass)\u3002Router\u7c7b\u662f\u4ec0\u4e48<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 core\r\n\u2502   \u251c\u2500\u2500 Application.php\r\n\u2502   \u251c\u2500\u2500 Classloader.php\r\n\u2502   \u251c\u2500\u2500 functions.php\r\n\u2502   \u2514\u2500\u2500 Router.php          (\u4f5c\u6210)\r\n\u251c\u2500\u2500 web\r\n\u2502   \u2514\u2500\u2500 index.php\r\n\u251c\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 bootstrap.php\r\n\u2514\u2500\u2500 MiniBlogApplication.php\r\n<\/code><\/pre>\n<p>\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305furl\u3068\u767b\u9332\u3057\u3066\u3042\u308b\u30eb\u30fc\u30c8\u3092\u6b63\u898f\u8868\u73fe\u3067\u30de\u30c3\u30c1\u30f3\u30b0\u3059\u308b\u305f\u3081\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3068\u30e1\u30bd\u30c3\u30c9\u3092\u307e\u3068\u3081\u305f\u30af\u30e9\u30b9<\/p>\n<p>compileRoutes()<\/p>\n<p>\u767b\u9332\u3057\u305f\u30eb\u30fc\u30c8\u306e\u30ad\u30fc\u3092\u540d\u524d\u4ed8\u304d\u53c2\u7167\u30d1\u30bf\u30fc\u30f3\u306b\u5909\u66f4\u3057\u3066\u914d\u5217\u306b\u3059\u308b\u30e1\u30bd\u30c3\u30c9<\/p>\n<p>\/user\/:user_name \u3092 \/user\/(?P[^\/]+)\u306b\u5909\u63db\u3059\u308b\u30e1\u30bd\u30c3\u30c9<\/p>\n<p>resolve()<\/p>\n<p>\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305fURL\u3067\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3068\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u914d\u5217\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">Router<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$routes<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     * @param array $definitions\r\n     *  $definitions\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u3067\u767b\u9332\u3057\u305f\u30eb\u30fc\u30c8\u306e\u914d\u5217\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$definitions<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">routes<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">compileRoutes<\/span><span class=\"p\">(<\/span><span class=\"nv\">$definitions<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u5b9a\u7fa9\u914d\u5217\u3092\u5185\u90e8\u7528\u306b\u5909\u63db\u3059\u308b\r\n     *\r\n     * @param array $definitions\r\n     *     $definitions\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u3067\u767b\u9332\u3057\u305f\u30eb\u30fc\u30c8\u306e\u914d\u5217\r\n     * @return array\r\n     *  array \u306f $definitions\u306e\u30ad\u30fc\u3092\u30d1\u30bf\u30fc\u30f3\u306b\u5909\u66f4\u3057\u305f\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u306e\u914d\u5217\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">compileRoutes<\/span><span class=\"p\">(<\/span><span class=\"nv\">$definitions<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$routes<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ $url:'\/user\/:user_name\/status\/:id'<\/span>\r\n<span class=\"c1\">\/\/ $params:['controller'=&gt;'status','action'=&gt;'index']<\/span>\r\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$definitions<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$url<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$tokens<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">explode<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/'<\/span><span class=\"p\">,<\/span> <span class=\"nb\">ltrim<\/span><span class=\"p\">(<\/span><span class=\"nv\">$url<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'\/'<\/span><span class=\"p\">));<\/span>\r\n            <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$tokens<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$i<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n\r\n<span class=\"c1\">\/\/ $token\u306e\u6700\u521d\u306e\u6587\u5b57\u304c':'\u3060\u3063\u305f\u3089<\/span>\r\n                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"mi\">0<\/span> <span class=\"o\">===<\/span> <span class=\"nb\">strpos<\/span><span class=\"p\">(<\/span><span class=\"nv\">$token<\/span><span class=\"p\">,<\/span> <span class=\"s1\">':'<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ ':'\u3092\u524a\u9664\u3057\u3066user_name \u3092\u53d6\u5f97<\/span>\r\n                    <span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nv\">$token<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ (?P&lt; $name &gt;[^\/]+) \u306b \u6587\u5b57\u5217\u3092\u5909\u63db\u3059\u308b<\/span>\r\n<span class=\"c1\">\/\/ user_name \u3092 (?p&lt;user_name&gt;[^\/]+) \u306b\u5909\u66f4<\/span>\r\n                    <span class=\"nv\">$token<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'(?P&lt;'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$name<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'&gt;[^\/]+)'<\/span><span class=\"p\">;<\/span>\r\n                <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ [0 =&gt;'user, 1 =&gt; '(?p&lt;user_name&gt;[^\/]+)', 2 =&gt;'status', 3 =&gt; '(?p&lt;id&gt;[^\/]+)']<\/span>\r\n                <span class=\"nv\">$tokens<\/span><span class=\"p\">[<\/span><span class=\"nv\">$i<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ '\/user\/(?p&lt;user_name&gt;[^\/]+)\/status\/(?p&lt;id&gt;[^\/]+)'<\/span>\r\n            <span class=\"nv\">$pattern<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nb\">implode<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$tokens<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"nv\">$routes<\/span><span class=\"p\">[<\/span><span class=\"nv\">$pattern<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$routes<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305fPATH_INFO\u3092\u5143\u306b\u4e0a\u8a18$params\u3092\u7279\u5b9a\u3059\u308b\r\n     * $path_info\u306f \/user\/\u5c71\u7530\u592a\u90ce \u306a\u3069\u306e \u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305furl\r\n     * $params\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3084\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u767b\u9332\u3057\u305froutes \u306e\u5024\r\n     * @param string $path_info\r\n     * @return array|false\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path_info<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ $path_info \u306f \u4e0a\u8a18\u8aac\u660e\u3067\u306f url\u306e user\/\u5c71\u7530\u592a\u90ce \u306e\u3053\u3068<\/span>\r\n<span class=\"c1\">\/\/ $path_info\u306e\u6700\u521d\u306e\u6587\u5b57\u304c \/ \u3067\u306f\u306a\u3044\u6642<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"s1\">'\/'<\/span> <span class=\"o\">!==<\/span> <span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path_info<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ $path_info \u306e\u6587\u5b57\u5217\u306e\u6700\u521d\u306b\u306f \/ \u3092\u5fc5\u305a\u3064\u3051\u3055\u305b\u308b <\/span>\r\n            <span class=\"nv\">$path_info<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$path_info<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">routes<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$pattern<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ $pattern\u306f\u4f5c\u308a\u5909\u3048\u3089\u308c\u305f\u30ad\u30fc  '\/user\/(?p&lt;user_name&gt;[^\/]+)\/status\/(?p&lt;id&gt;[^\/]+)' =&gt; Array     <\/span>\r\n<span class=\"cm\">\/* $params \u306f \r\n        (\r\n            [controller] =&gt; status\r\n            [action] =&gt; index\r\n        )\r\n*\/<\/span>\r\n<span class=\"c1\">\/\/ $path_info\u306f \/user\/\u5c71\u7530\u592a\u90ce \u306a\u3069\u306e \u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305furl<\/span>\r\n<span class=\"c1\">\/\/ $pattern \u306f \u4e0a\u3067\u6b63\u898f\u8868\u73fe\u306b\u4f5c\u308a\u5909\u3048\u305f\u6587\u5b57\u5217<\/span>\r\n<span class=\"c1\">\/\/ \u30d1\u30bf\u30fc\u30f3\u306f \/user\/(?p&lt;user_name&gt;[^\/]+)\/status\/(?p&lt;id&gt;[^\/]+)<\/span>\r\n<span class=\"c1\">\/\/ \u5bfe\u8c61\u6587\u5b57\u5217\u306f $path_info \u306e \/user\/\u5c71\u7530\u592a\u90ce<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"s1\">'#^'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$pattern<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'$#'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$path_info<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$matches<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u4e00\u81f4\u3057\u305f\u3089\u3001<\/span>\r\n<span class=\"c1\">\/\/ $matches\u306b\u306f\u540d\u524d\u4ed8\u304d\u306e\u30ad\u30fc\u3067user_name\u3084id\u306a\u3069\u306e\u60c5\u5831\u304c\u5165\u3063\u3066\u3044\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ $matches = ['username'=&gt;'\u5c71\u7530\u592a\u90ce'];<\/span>\r\n                <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">array_merge<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$matches<\/span><span class=\"p\">);<\/span> \r\n<span class=\"cm\">\/* $params \u306f \r\n        (\r\n            [controller] =&gt; status\r\n            [action] =&gt; index\r\n            ['username'=&gt;'\u5c71\u7530\u592a\u90ce']\r\n        )\r\n*\/<\/span>\r\n<span class=\"c1\">\/\/ \u4e00\u7dd2\u306b\u8fd4\u3059<\/span>\r\n                <span class=\"k\">return<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"p\">}<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u5728Application\u7c7b\u4e2d\u5b9e\u65bd\u5b9e\u73b0\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"kt\">Router<\/span> <span class=\"nv\">$router<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setDebugMode<\/span><span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">initialize<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u5404\u30af\u30e9\u30b9\u306e\u521d\u671f\u5316\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">initialize<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/Router\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u30eb\u30fc\u30c8\u306e\u914d\u5217\u3092\u6e21\u3057\u3066\u3044\u308b\u3002<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Router<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerRoutes<\/span><span class=\"p\">());<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$pathInfo1<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">''<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$pathInfo2<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\/user\/\u5c71\u7530\u592a\u90ce'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$pathInfo3<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\/user\/\u5c71\u7530\u592a\u90ce\/status\/1'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$params1<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$pathInfo1<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$params2<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$pathInfo2<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$params3<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$pathInfo3<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params1<\/span><span class=\"p\">,<\/span><span class=\"nv\">$params2<\/span><span class=\"p\">,<\/span><span class=\"nv\">$params3<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/71-0.png\" alt=\"image.png\" \/><\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u672c\u6765 PathInfo \u306f URL\u304b\u3089\u53d6\u5f97\u3059\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>http:\/\/localhost\/MiniBlog\/web\/index.php\/user\/yamadatarou<\/p>\n<p>MiniBlog\/web\/index.php \u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u4ee5\u4e0b\u306e\u30d1\u30b9\u304c\u5bfe\u8c61<\/p>\n<p>\/user\/yamadatarou \u3092 $path_info\u3068\u3057\u3066\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n<h1>\u8bf7\u521b\u5efa\u4e00\u4e2a\u540d\u4e3aRequest\u7684\u7c7b\u3002<\/p>\n<ul class=\"post-ul\">\u5fc5\u7136\u7684\u306b$_SERVER\u3084$_POST,$_GET\u306e\u30e9\u30c3\u30d1\u30fc\u30af\u30e9\u30b9\u306b\u306a\u308b<\/ul>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 core\r\n\u2502   \u251c\u2500\u2500 Application.php\r\n\u2502   \u251c\u2500\u2500 Classloader.php\r\n\u2502   \u251c\u2500\u2500 functions.php\r\n\u2502   \u251c\u2500\u2500 Request.php            (\u4f5c\u6210)\r\n\u2502   \u2514\u2500\u2500 Router.php\r\n\u251c\u2500\u2500 web\r\n\u2502   \u2514\u2500\u2500 index.php\r\n\u251c\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 bootstrap.php\r\n\u2514\u2500\u2500 MiniBlogApplication.php\r\n<\/code><\/pre>\n<p>\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092 \u5236\u5fa1\u3059\u308b\u305f\u3081\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3068\u30e1\u30bd\u30c3\u30c9\u3092\u307e\u3068\u3081\u305f\u30af\u30e9\u30b9<\/p>\n<p>\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3078\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308bURL(\u30d9\u30fc\u30b9URL)\u306f 4 \u30d1\u30bf\u30fc\u30f3\u3042\u308b\u3002<\/p>\n<p>\u30d1\u30fc\u30d5\u30a7\u30af\u30c8PHP\u3067\u306f xampp\u306e \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30eb\u30fc\u30c8\u3092 htdocs\u304b\u3089htdocs\/MiniBlog\/web\u306b\u5909\u66f4\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u5909\u66f4\u305b\u305a\u306bhtdocs \u3067\u958b\u767a\u3057\u3066\u3044\u308b\u305f\u3081 \u30d9\u30fc\u30b9URL\u306e\u53d6\u5f97\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<br \/>\nhttp:\/\/localhost\/MiniBlog\/web\/index.php<br \/>\nhttp:\/\/localhost\/MiniBlog\/web\/<br \/>\nhttp:\/\/localhost\/MiniBlog\/<br \/>\nhttp:\/\/localhost\/MiniBlog\/index.php<\/p>\n<p>\u53d6\u5f97\u3057\u305f\u3044\u306e\u306f\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u4ee5\u4e0b\u306e\u30d1\u30b9<\/p>\n<p>$_SEVER[&#8216;REQUEST_URL&#8217;]\u3067\u306f URL\u306e\u30c9\u30e1\u30a4\u30f3\u4ee5\u4e0b\u306e\u30d1\u30b9\u3092\u5168\u3066\u53d6\u5f97\u3067\u304d\u308b<br \/>\n\u3053\u306e\u30d1\u30b9\u304b\u3089 \u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u307e\u3067\u306e\u30d1\u30b9(MiniBlog\u304b\u3089index.php)\u3092\u524a\u9664\u3057\u3066 $path_info\u3092\u53d6\u5f97\u3057\u305f\u3044\u3002<br \/>\n\u305d\u306e\u305f\u3081 \u5165\u529b\u3055\u308c\u308b\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306eURL\u306b\u5fdc\u3058\u3066\u5834\u5408\u5206\u3051\u3057\u3066\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30d1\u30b9\u3092\u524a\u9664\u3057\u3066\u3044\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt; \u5909\u66f4\u3042\u308a\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">Request<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30ea\u30af\u30a8\u30b9\u30c8URI\u3092\u53d6\u5f97\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getRequestUri<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u73fe\u5728\u306eURI\uff08\u30c9\u30e1\u30a4\u30f3\u4ee5\u4e0b\u306e\u30d1\u30b9\uff09\u3092\u8fd4\u3059\u3002<\/span>\r\n<span class=\"c1\">\/\/ http:\/\/example.com\/foo\/bar\/index.php(\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc)\/list?foo=bar<\/span>\r\n<span class=\"c1\">\/\/ foo\/bar\/index.php(\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc)\/list?foo=bar \u304c \u30ea\u30af\u30a8\u30b9\u30c8URL<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'REQUEST_URI'<\/span><span class=\"p\">];<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/** \r\n     * \u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u307e\u3067\u306e\u30d1\u30b9\u304c\u30d9\u30fc\u30b9URL\r\n     * URL\u306b\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u307e\u3067\u306e\u30d5\u30eb\u30d1\u30b9\u304c\u5165\u529b\u3055\u308c\u3066\u3044\u308b\u6642\r\n     * http:\/\/example.com\/foo\/bar\/index.php(\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc)\/list\r\n     * \/foo\/bar\/index.php \u304c \u30d9\u30fc\u30b9URL\r\n     * \r\n     * URL\u306b\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306eindex.php\u30d5\u30a1\u30a4\u30eb\u304c\u306a\u3044\u6642\r\n     * http:\/\/example.com\/foo\/bar\/list\r\n     * \/foo\/bar\/ \u304c \u30d9\u30fc\u30b9URL\r\n     * \r\n     * URL\u306b\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u307e\u3067\u306e\u30d5\u30eb\u30d1\u30b9\u304c\u306a\u3044\u6642 \uff08\u666e\u901a\u306f\u3053\u308c\uff09\r\n     * http:\/\/example.com\/list\r\n     * \u30d9\u30fc\u30b9URL\u306f\u306a\u3044\u3002\r\n     *\r\n     * @return string\r\n     *\/<\/span>\r\n<span class=\"c1\">\/\/ \u8981\u3059\u308b\u306b \u3053\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u306f ? \u306a\u304c\u306a\u304c\u66f8\u304d\u307e\u3057\u305f\u304c\u7d50\u8ad6\u306f\u3053\u308c\u3060\u3051\u3067\u3059\u3002<\/span>\r\n<span class=\"c1\">\/\/ ?\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f URL \u306e\u306a\u304b\u304b\u3089 \u30d9\u30fc\u30b9URL\u3092\u53d6\u5f97\u3057\u305f\u3044<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getBaseUrl<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ http:\/\/example.com\/foo\/bar\/index.php\/list \u306a\u3089<\/span>\r\n<span class=\"c1\">\/\/ \uff11\u20e3 `\/foo\/bar\/index.php`<\/span>\r\n<span class=\"c1\">\/\/ http:\/\/example.com\/foo\/bar\/list \u306a\u3089<\/span>\r\n<span class=\"c1\">\/\/ \uff12\u20e3  `\/foo\/bar\/`<\/span>\r\n<span class=\"c1\">\/\/ http:\/\/example.com\/list \u306a\u3089<\/span>\r\n<span class=\"c1\">\/\/ \uff13\u20e3 ``<\/span>\r\n        <span class=\"nv\">$script_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'SCRIPT_NAME'<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"nv\">$request_uri<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequestUri<\/span><span class=\"p\">();<\/span>\r\n\r\n<span class=\"c1\">\/\/1\u20e3 URL\u306b$script_name \u304c \u5b8c\u5168\u306b\u542b\u307e\u308c\u308b\u3068\u304d<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"mi\">0<\/span> <span class=\"o\">===<\/span> <span class=\"nb\">strpos<\/span><span class=\"p\">(<\/span><span class=\"nv\">$request_uri<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$script_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/http:\/\/localhost\/MiniBlog\/web\/index.php\/user\/yamadataro?name=tarro<\/span>\r\n<span class=\"c1\">\/\/ dd($script_name); \/\/ MiniBlog\/web\/index.php<\/span>\r\n\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$script_name<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ \uff12\u20e3 URL\u306bindex.php(\u30d5\u30a1\u30a4\u30eb\u540d\u304c\u306a\u3044\u6642) \/\/ MiniBlog\/web\/ \u306e\u6642<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"mi\">0<\/span> <span class=\"o\">===<\/span> <span class=\"nb\">strpos<\/span><span class=\"p\">(<\/span><span class=\"nv\">$request_uri<\/span><span class=\"p\">,<\/span> <span class=\"nb\">dirname<\/span><span class=\"p\">(<\/span><span class=\"nv\">$script_name<\/span><span class=\"p\">)))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"c1\">\/\/ http:\/\/localhost\/MiniBlog\/web\/user\/yamadataro?name=tarro<\/span>\r\n<span class=\"c1\">\/\/ dd(rtrim(dirname($script_name), '\/')); \/\/ \/MiniBlog\/web<\/span>\r\n\r\n            <span class=\"k\">return<\/span> <span class=\"nb\">rtrim<\/span><span class=\"p\">(<\/span><span class=\"nb\">dirname<\/span><span class=\"p\">(<\/span><span class=\"nv\">$script_name<\/span><span class=\"p\">),<\/span> <span class=\"s1\">'\/'<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u8ffd\u52a0 url \u306b web \u304c\u306a\u3044\u5834\u5408 \/\/ MiniBlog\/index.php \u306e\u6642<\/span>\r\n<span class=\"c1\">\/\/ perfectPHP\u3067\u306f\u5fc5\u8981\u306a\u3044 MiniBlog \u304c\u542b\u307e\u308c\u308b\u305f\u3081\u8ffd\u52a0\u306e\u51e6\u7406<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"mi\">0<\/span> <span class=\"o\">===<\/span> <span class=\"nb\">strpos<\/span><span class=\"p\">(<\/span><span class=\"nv\">$request_uri<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str_replace<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/web'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$script_name<\/span><span class=\"p\">)))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ dd(str_replace('\/web', '', $script_name)); \/\/ MiniBlog\/index.php<\/span>\r\n\r\n            \r\n            <span class=\"k\">return<\/span> <span class=\"nb\">str_replace<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/web'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$script_name<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ \uff13\u20e3 http:\/\/localhost\/MiniBlog\/user\/yamadataro?name=tarro<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ MiniBlog\u3068\u3044\u3046\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d\u304c\u3042\u308b\u305f\u3081\u5de5\u592b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u30c9\u30e1\u30a4\u30f3\u304b\u3089index.php\u542b\u3080\u307e\u3067\u306e\u30d1\u30b9\u306f \u30d9\u30fc\u30b9URL\u3068\u3057\u3066\u51e6\u7406\u3059\u308b\u305f\u3081\u3002<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"s1\">'\/MiniBlog'<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ \u3053\u308c\u306f\u3088\u304f\u306a\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30b3\u30a2\u30af\u30e9\u30b9\u306b\u3053\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u4f9d\u5b58\u3059\u308b\u3088\u3046\u306a\u66f8\u304d\u65b9\u306f\u30c0\u30e1<\/span>\r\n                    <span class=\"c1\">\/\/ env \u3084 config\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u53d6\u5f97\u3059\u308b\u3068\u304b\u3057\u305f\u65b9\u304c\u3044\u3044<\/span>\r\n                    <span class=\"c1\">\/\/ \u3082\u3068\u306e\u30b3\u30fc\u30c9\u3092\u3042\u307e\u308a\u5909\u66f4\u3057\u305f\u304f\u306a\u3044\u306e\u3067\u3002<\/span>\r\n            <span class=\"c1\">\/\/return ''; \u30d1\u30fc\u30d5\u30a7\u30af\u30c8PHP\u3067\u306f\u7a7a\u3092\u8fd4\u3059\u3002<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * PATH_INFO\u3092\u53d6\u5f97\r\n     * http:\/\/example.com\/foo\/bar\/index.php\/list?foo=bar\r\n     * \u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u4ee5\u4e0b\u3067\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u542b\u3081\u306a\u3044 \/list \u304c $PATH_INFO\r\n     * ?foo=bar(\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc)\u306fpath_info\u3067\u306f\u306a\u3044\u306e\u3067\u524a\u9664\r\n     *\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getPathInfo<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ request_url\u304b\u3089base_url\u3068\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u524a\u9664\u3057\u3066\u4f5c\u6210\u3059\u308b\u3002<\/span>\r\n        <span class=\"nv\">$base_url<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getBaseUrl<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ request_uri \u306f '\/base_url\/path_info?query=value' \u3067\u3067\u304d\u3066\u3044\u308b\u3002<\/span>\r\n        <span class=\"nv\">$request_uri<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequestUri<\/span><span class=\"p\">();<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"kc\">false<\/span> <span class=\"o\">!==<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$pos<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">strpos<\/span><span class=\"p\">(<\/span><span class=\"nv\">$request_uri<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'?'<\/span><span class=\"p\">)))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ GET\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u524a\u9664\u3057\u3066\u3044\u308b<\/span>\r\n            <span class=\"nv\">$request_uri<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nv\">$request_uri<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$pos<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30ea\u30af\u30a8\u30b9\u30c8URL\u304b\u3089\u30d9\u30fc\u30b9URL\u3092\u524a\u9664\u3057\u3066$path_info\u3092\u4f5c\u308b<\/span>\r\n        <span class=\"nv\">$path_info<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">string<\/span><span class=\"p\">)<\/span> <span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nv\">$request_uri<\/span><span class=\"p\">,<\/span> <span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$base_url<\/span><span class=\"p\">));<\/span>\r\n        <span class=\"c1\">\/\/ dd($path_info); \/\/`list`\u304c\u53d6\u5f97\u3067\u304d\u308b<\/span>\r\n        <span class=\"c1\">\/\/ $str = 'abcdefg' substr($str,3); \u8fd4\u308a\u5024\u306f 'defg'<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$path_info<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Application\u30af\u30e9\u30b9\u306b\u5b9f\u88c5\u3059\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"kt\">Router<\/span> <span class=\"nv\">$router<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"kt\">Request<\/span> <span class=\"nv\">$request<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u521d\u671f\u5316\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">initialize<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Router<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerRoutes<\/span><span class=\"p\">());<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span>    <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Request<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * Request\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\r\n     * @return Request\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getRequest<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/\u5909\u66f4<\/span>\r\n<span class=\"c1\">\/\/ url\u304b\u3089 path_info\u3092\u53d6\u5f97\u3057\u3066 \u30eb\u30fc\u30bf\u30af\u30e9\u30b9\u306b\u6e21\u3057\u3066 $params \u3092\u53d6\u5f97 <\/span>\r\n        <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u203b\u786e\u8ba4<\/p>\n<p>URL\u7684\u5b8c\u6574\u8def\u5f84\u76f4\u5230\u524d\u7aef\u63a7\u5236\u5668<br \/>\nhttp:\/\/localhost\/MiniBlog\/web\/index.php\/user\/yamadataro<\/p>\n<p>\u203b\u786e\u8ba4<br \/>\nURL \u5230\u524d\u7aef\u63a7\u5236\u5668\u7684\u76ee\u5f55\u8def\u5f84\u4e3a http:\/\/localhost\/MiniBlog\/web\/user\/yamadataro\u3002<\/p>\n<p>\u203b\u786e\u8ba4<br \/>\n\u7f51\u5740\u4e2d\u6ca1\u6709\u5230\u524d\u7aef\u63a7\u5236\u5668\u7684\u5b8c\u6574\u8def\u5f84 1 http:\/\/localhost\/MiniBlog\/user\/yamadataro<\/p>\n<p>\u203b\u786e\u8ba4<br \/>\nurl\u6ca1\u6709\u524d\u7aef\u63a7\u5236\u5668\u7684\u5b8c\u6574\u8def\u5f84 2 http:\/\/localhost\/MiniBlog\/account<br \/>\n\u203b\u786e\u8ba4<br \/>\nurl\u6ca1\u6709\u524d\u7aef\u63a7\u5236\u5668\u7684\u5b8c\u6574\u8def\u5f84 3 http:\/\/localhost\/MiniBlog\/account\/signup<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/84-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code><span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt; \r\n *\/<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30ea\u30af\u30a8\u30b9\u30c8\u30e1\u30bd\u30c3\u30c9\u304cPOST\u304b\u3069\u3046\u304b\u5224\u5b9a\r\n     *\r\n     * @return boolean\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">isPost<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'REQUEST_METHOD'<\/span><span class=\"p\">]<\/span> <span class=\"o\">===<\/span> <span class=\"s1\">'POST'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * GET\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u53d6\u5f97\r\n     *\r\n     * @param string $name\r\n     * @param mixed $default \u6307\u5b9a\u3057\u305f\u30ad\u30fc\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\r\n     * @return mixed\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getGet<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$default<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_GET<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$_GET<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$default<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * POST\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u53d6\u5f97\r\n     *\r\n     * @param string $name\r\n     * @param mixed $default \u6307\u5b9a\u3057\u305f\u30ad\u30fc\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\r\n     * @return mixed\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getPost<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$default<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_POST<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$_POST<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$default<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30db\u30b9\u30c8\u540d\u3092\u53d6\u5f97\r\n     *\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getHost<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"k\">empty<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'HTTP_HOST'<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'HTTP_HOST'<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        \r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'SERVER_NAME'<\/span><span class=\"p\">];<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * SSL\u3067\u30a2\u30af\u30bb\u30b9\u3055\u308c\u305f\u304b\u3069\u3046\u304b\u5224\u5b9a\r\n     *\r\n     * @return boolean\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">isSsl<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'HTTPS'<\/span><span class=\"p\">])<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nv\">$_SERVER<\/span><span class=\"p\">[<\/span><span class=\"s1\">'HTTPS'<\/span><span class=\"p\">]<\/span> <span class=\"o\">===<\/span> <span class=\"s1\">'on'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">?\u306e$params\u304b\u3089 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u884c\u3055\u305b\u308b\u3002<\/ul>\n<h1>\u521b\u5efaController\u7c7b<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/88-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 controllers\r\n\u2502   \u2514\u2500\u2500 AccountController.php  (\u4f5c\u6210 \u7d99\u627f\u30af\u30e9\u30b9)\r\n\u251c\u2500\u2500 core (\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af)\r\n\u2502   \u251c\u2500\u2500 Application.php\r\n\u2502   \u251c\u2500\u2500 Classloader.php\r\n\u2502   \u251c\u2500\u2500 Controller.php        (\u4f5c\u6210)\r\n\u2502   \u251c\u2500\u2500 functions.php\r\n\u2502   \u251c\u2500\u2500 Request.php\r\n\u2502   \u2514\u2500\u2500 Router.php\r\n\u251c\u2500\u2500 web\r\n\u2502   \u2514\u2500\u2500 index.php\r\n\u251c\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 bootstrap.php\r\n\u2514\u2500\u2500 MiniBlogApplication.php\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3088\u3063\u3066\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u8fd4\u3059\u306e\u306f\u4e3b\u306bVIEW\u306b\u306a\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>\u3042\u3068\u306f\u7279\u5b9a\u306eURL\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u305b\u308b\u3050\u3089\u3044<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ core\\Application.php<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n <span class=\"c1\">\/\/ url \u304b\u3089 \u30d1\u30bf\u30fc\u30f3\u306b\u4e00\u81f4\u3057\u305f \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u540d\u3068\u30a2\u30af\u30b7\u30e7\u30f3\u540d\u306e\u9023\u60f3\u914d\u5217\u3092\u53d6\u5f97\u3059\u308b<\/span>\r\n        <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">());<\/span>\r\n<span class=\"c1\">\/\/ \u4e00\u81f4\u3057\u306a\u304b\u3063\u305f\u5834\u5408<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$params<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"s1\">'\u4e0b\u8a18\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u5b58\u5728\u3044\u305f\u3057\u307e\u305b\u3093'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"s1\">'&lt;br&gt;'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">exit<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u4e00\u81f4\u3057\u305f\u3089<\/span>\r\n        <span class=\"nv\">$controller<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'controller'<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"nv\">$action<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'action'<\/span><span class=\"p\">];<\/span>\r\n<span class=\"c1\">\/\/ runAction()\u30e1\u30bd\u30c3\u30c9 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6e21\u3057\u3066\u5b9f\u884c\u3057\u3066\u3044\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u306f html \u3092\u8fd4\u3059\u306e\u3067<\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u8fd4\u3063\u3066\u304d\u305f Hhml \u3092 \u6700\u5f8c\u306b \u30a8\u30b3\u30fc\u3057\u3066\u51fa\u529b\u3059\u308b\u3002<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+ <\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\r\n     *\r\n     * @param string $controller_name\r\n     * @param string $action\r\n     * @param array $params\r\n     *\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ ucfirst \u2014 \u6587\u5b57\u5217\u306e\u6700\u521d\u306e\u6587\u5b57\u3092\u5927\u6587\u5b57\u306b\u3059\u308b<\/span>\r\n        <span class=\"nv\">$controller_class<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ucfirst<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_name<\/span><span class=\"p\">)<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Controller'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ \u30af\u30e9\u30b9\u540d\u304b\u3089 new \u30af\u30e9\u30b9 \u3059\u308b\u30e1\u30bd\u30c3\u30c9 findController() \u30e1\u30bd\u30c3\u30c9\u3092\u767a\u706b\u3055\u305b\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u623b\u308a\u5024\u306f \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u8fd4\u3063\u3066\u304f\u308b\u3002<\/span>\r\n        <span class=\"nv\">$controller<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">findController<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_class<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u5834\u5408<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"s1\">'\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">exit<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408<\/span>\r\n<span class=\"c1\">\/\/ \u4e0a\u3067\u53d6\u5f97\u3057\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306erun()\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u884c\u3059\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u3053\u306e\u5f8c\u306f \u53d6\u5f97\u3057\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9 \u305d\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u3067\u547c\u3073\u51fa\u3055\u308c\u308bview\u30af\u30e9\u30b9\u3092\u901a\u3063\u3066 \u6700\u5f8c\u306b html \u304c\u8fd4\u3063\u3066\u304f\u308b\u3002<\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$controller<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u8fd4\u3063\u3066\u304d\u305f html \u306f \u305d\u306e\u307e\u307e \u547c\u3073\u51fa\u3057\u5143\u306e \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e run() \u306b\u8fd4\u3059\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n\r\n<span class=\"c1\">\/\/+ findController() \u30e1\u30bd\u30c3\u30c9<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u540d\u304b\u3089\u5bfe\u5fdc\u3059\u308bController\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3059\u308b\r\n     *\r\n     * @param string $controller_class\r\n     * @return Controller|bool\r\n     *\/<\/span>\r\n<span class=\"c1\">\/\/ \u547c\u3073\u51fa\u3057\u5143\u306e run() \u306b\u306f \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 \u304b false(\u5931\u6557) \u3092\u8fd4\u3059<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">findController<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_class<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ class_exist\u30e1\u30bd\u30c3\u30c9\u3067\u5f15\u6570\u306e\u30af\u30e9\u30b9\u304c\u5b9a\u7fa9\u6e08\u307f\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">class_exists<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_class<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u672a\u5b9a\u7fa9\u306a\u3089 \u307e\u3060require\u3055\u308c\u3066\u3044\u306a\u3044\u306a\u3089<\/span>\r\n            <span class=\"nv\">$controller_file<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getControllerDir<\/span><span class=\"p\">()<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$controller_class<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'.php'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/is_readable\u30e1\u30bd\u30c3\u30c9 \u5f15\u6570\u306b \u6e21\u3057\u305f \u30d1\u30b9\u304b\u3089 \u8aad\u307f\u8fbc\u307f\u53ef\u80fd\u304b\u5224\u5b9a\u3057\u3066\u304f\u308c\u308b\u3002<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">is_readable<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_file<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u8aad\u307f\u8fbc\u307f\u4e0d\u53ef\u306a\u3089<\/span>\r\n                <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u8aad\u307f\u8fbc\u307f\u304c\u53ef\u80fd\u306a\u3089<\/span>\r\n                <span class=\"k\">require_once<\/span> <span class=\"nv\">$controller_file<\/span><span class=\"p\">;<\/span>\r\n\r\n                <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">class_exists<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_class<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3060\u306e\u306b \u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u306b\u30af\u30e9\u30b9\u304c\u672a\u5b9a\u7fa9\u306e\u5834\u5408\u3053\u3053\u304c\u5b9f\u884c\u3055\u308c\u308b\u3002<\/span>\r\n                    <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n                <span class=\"p\">}<\/span>\r\n            <span class=\"p\">}<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u5b9a\u7fa9\u6e08\u307f\u306e\u30af\u30e9\u30b9\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u5f15\u6570\u306b\u6e21\u3057\u3066 <\/span>\r\n<span class=\"c1\">\/\/ \u6307\u5b9a\u3055\u308c\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fcnew (\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316) \u3057\u3066\u547c\u3073\u51fa\u3057\u5143\u306e runAction\u30e1\u30bd\u30c3\u30c9\u306b \u8fd4\u3059\u3002<\/span>\r\n<span class=\"c1\">\/\/  public function __construct($application) &lt;- controller\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nv\">$controller_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9 (\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af)<\/ul>\n<\/li>\n<\/ul>\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u5171\u901a\u3059\u308b\u51e6\u7406\u3092\u307e\u3068\u3081\u3066\u3044\u308b\u3002<br \/>\n\u305d\u308c\u305e\u308c\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u3053\u306e\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3059\u308b\u3053\u3068\u3067\u91cd\u8907\u3059\u308b\u51e6\u7406\u3092\u524a\u6e1b\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Controller<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$controller_name<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$action_name<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$application<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$request<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     * @param Application $application\r\n     *\/<\/span>\r\n<span class=\"c1\">\/\/ application\u30af\u30e9\u30b9\u306efindController()\u3067 new \u3055\u308c\u308b\u3002<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$application<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ substr()\u3067 \u30af\u30e9\u30b9\u540d\u304b\u3089 \u30af\u30e9\u30b9\u540d\u4ee5\u964d\u306econtroller\u306e10\u6587\u5b57\u3092\u524a\u9664\u3057\u3066\u3044\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u5c0f\u6587\u5b57\u306e\u6587\u5b57\u5217\u306e\u30af\u30e9\u30b9\u540d\u3092\u53d6\u5f97 \/\/StatsuController\u306a\u3089 status \u306b\u306a\u308b<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">controller_name<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">strtolower<\/span><span class=\"p\">(<\/span><span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nb\">get_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">),<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"o\">-<\/span><span class=\"mi\">10<\/span><span class=\"p\">));<\/span>\r\n<span class=\"c1\">\/\/ \u6ce8\u5165\u3055\u308c\u305fapplication\u30af\u30e9\u30b9\u3060\u3051\u306b\u4f9d\u5b58\u3059\u308b\u3088\u3046\u306a\u8a2d\u8a08\u306b\u306a\u3063\u3066\u3044\u308b<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">application<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ application\u30af\u30e9\u30b9\u3092\u901a\u3057\u3066\u53d6\u5f97\u3057\u3066\u3044\u308b\u3002<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span>     <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequest<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/      ? \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30af\u30e9\u30b9\u3067 Request\u30af\u30e9\u30b9\u3092 new \u3059\u308b\u3068\u305d\u308c\u306f\u5225\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u306a\u308b\u3002<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u3092 \u6587\u5b57\u5217\u3067 \u5b9f\u884c \u3055\u305b\u308b\u30e1\u30bd\u30c3\u30c9\r\n     *\r\n     * @param string $action\r\n     * @param array $params\r\n     * @return string\r\n     *\r\n     *\/<\/span>\r\n<span class=\"c1\">\/\/ application\u30af\u30e9\u30b9\u306erun\u30e1\u30bd\u30c3\u30c9\u3067\u547c\u3073\u51fa\u3057\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">action_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ action\u540d\u304c index \u306a\u3089 \u30e1\u30bd\u30c3\u30c9\u540d\u306f indexAction \u306b\u306a\u308b\u3002<\/span>\r\n        <span class=\"nv\">$action_method<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$action<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Action'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ indexAction\u30e1\u30bd\u30c3\u30c9\u304c\u306a\u3044\u5834\u5408<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">method_exists<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action_method<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"s2\">\"\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\"<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">exit<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ indexAction\u30e1\u30bd\u30c3\u30c9\u304c\u3042\u308b\u5834\u5408<\/span>\r\n<span class=\"c1\">\/\/ \u6587\u5b57\u5217\u3067\u95a2\u6570\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b 'indexAction'();<\/span>\r\n<span class=\"c1\">\/\/ $params \u306f \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u540d\u3068\u30a2\u30af\u30b7\u30e7\u30f3\u540d\u3068pathInfo(username=&gt;\u5c71\u7530\u592a\u90ce)<\/span>\r\n<span class=\"c1\">\/\/ \u623b\u308a\u5024\u306f Html &lt;- apllication\u30af\u30e9\u30b9\u306erunAction\u30e1\u30bd\u30c3\u30c9\u306e$content\u306b\u8fd4\u3059\u5024\u306f html \u3067\u3042\u308b  <\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nv\">$action_method<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/\u53d6\u5f97\u3057\u305fhtml\u3092 \u547c\u3073\u51fa\u3057\u5143\u306e apllication\u30af\u30e9\u30b9\u306erunAction\u30e1\u30bd\u30c3\u30c9 \u306b\u8fd4\u3059<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u7d99\u627f\u30af\u30e9\u30b9 (\u4f5c\u6210\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8)<\/ul>\n<\/li>\n<\/ul>\n<p>AccountController\u306fusers\u306eCRUD\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u5236\u5fa1\u3057\u3066\u8fd4\u3059\u305f\u3081\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"c1\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u7d99\u627f\u3057\u305f\u30af\u30e9\u30b9<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">AccountController<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Controller<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ action\u30e1\u30bd\u30c3\u30c9\u306e\u547c\u3073\u51fa\u3057\u6642\u5f15\u6570\u306b $params \u3092 \u6e21\u3057\u3066\u3044\u308b\u304c\u3001<\/span>\r\n<span class=\"c1\">\/\/    $content = $this-&gt;$action_method($params);<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u5b9f\u969b\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u306b\u306f \u4eee\u5f15\u6570\u304c \u306a\u3044\u5834\u5408\u3067\u3082 \u30a8\u30e9\u30fc\u306b\u306f\u306a\u3089\u306a\u3044\u3002<\/span>\r\n      <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">indexAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30c7\u30fc\u30bf\u3092\u4f5c\u6210<\/span>\r\n        <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'name'<\/span><span class=\"o\">=&gt;<\/span><span class=\"s1\">'\u5c71\u7530\u592a\u90ce'<\/span><span class=\"p\">];<\/span>\r\n<span class=\"c1\">\/\/ render\u30e1\u30bd\u30c3\u30c9\u306b \u4f5c\u6210\u3057\u305f \u30c7\u30fc\u30bf\u3092\u6e21\u3059\u3002<\/span>\r\n<span class=\"c1\">\/\/ render\u30e1\u30bd\u30c3\u30c9\u304b\u3089\u306fHtml\u304c\u8fd4\u3063\u3066\u304f\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u305d\u306ehtml\u3092\u305d\u306e\u307e\u307e\u547c\u3073\u51fa\u3057\u5143\u306e \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9\u306erun\u30e1\u30bd\u30c3\u30c9\u306b\u8fd4\u3059\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'user'<\/span><span class=\"o\">=&gt;<\/span><span class=\"nv\">$user<\/span>\r\n        <span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">render\u30e1\u30bd\u30c3\u30c9\u306a\u3069\u306e\u91cd\u8907\u3059\u308b\u51e6\u7406\u306f \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e core\\Controller.php \u306b\u8a18\u8ff0\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>\u500b\u3005\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6c4e\u7528\u7684\u306a\u30b3\u30fc\u30c9\u3092\u5229\u7528\u3057\u306a\u304c\u3089\u8a18\u8ff0\u3057\u3066\u3044\u3051\u308b\u3088\u3046\u306b\u306a\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/  core\\Controller.php \u306b\u8a18\u8ff0\u3059\u308b<\/span>\r\n<span class=\"cd\">\/** \r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"c1\">\/\/ + <\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30d3\u30e5\u30fc\u30d5\u30a1\u30a4\u30eb\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\r\n     *\r\n     * @param array $variables \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3059\u5909\u6570\u306e\u9023\u60f3\u914d\u5217\r\n     * @return string \u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u305f\u30d3\u30e5\u30fc\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\r\n     *\/<\/span>\r\n<span class=\"c1\">\/\/ \uff58\uff58\uff58\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u304b\u3089\u547c\u3073\u51fa\u3057\u3055\u308c\u305f render \u30e1\u30bd\u30c3\u30c9<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ $variables \u306f \u7d99\u627f\u30af\u30e9\u30b9\u3067\u4f5c\u6210\u3057\u305f\u30c7\u30fc\u30bf<\/span>\r\n<span class=\"c1\">\/\/ \u3053\u3053\u3067 view \u30af\u30e9\u30b9 \u3092 \u53d6\u5f97\u3057\u3066 Html \u3092 \u53d6\u5f97\u3059\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u3068\u308a\u3042\u3048\u305a\u4e00\u65e6\u3053\u3053\u3067 \u7c21\u6613\u7684\u306bhtml\u3092\u4f5c\u6210\u3057\u3066 \u52d5\u4f5c\u78ba\u8a8d\u3059\u308b<\/span>\r\n        <span class=\"nb\">extract<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"sh\">&lt;&lt;&lt;EOF\r\n&lt;body&gt;\r\n&lt;h1&gt;AccountController\u306eindexAction\u753b\u9762&lt;\/h1&gt;\r\n{$user['name']}\r\n&lt;\/body&gt;\r\nEOF;<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u8bbf\u95ee http:\/\/localhost\/MiniBlog\/account\u3002<br \/>\n\u4e5f\u53ef\u4ee5\u8bbf\u95ee http:\/\/localhost\/MiniBlog\/index.php\/account\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/99-0.png\" alt=\"image.png\" \/><\/p>\n<h1>\u521b\u5efaView\u7c7b<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 controllers\r\n\u2502   \u2514\u2500\u2500 StatusController.php\r\n\u251c\u2500\u2500 core\r\n\u2502   \u251c\u2500\u2500 Application.php\r\n\u2502   \u251c\u2500\u2500 Classloader.php\r\n\u2502   \u251c\u2500\u2500 Controller.php\r\n\u2502   \u251c\u2500\u2500 functions.php\r\n\u2502   \u251c\u2500\u2500 Request.php\r\n\u2502   \u251c\u2500\u2500 Response.php\r\n\u2502   \u251c\u2500\u2500 Router.php\r\n\u2502   \u2514\u2500\u2500 View.php    (\u4f5c\u6210)\r\n\u251c\u2500\u2500 views\r\n\u2502   \u2514\u2500\u2500 sample\r\n\u2502       \u251c\u2500\u2500 1.php         (\u4f5c\u6210)\r\n\u2502       \u251c\u2500\u2500 2.php         (\u4f5c\u6210)\r\n\u2502       \u2514\u2500\u2500 layout.php    (\u4f5c\u6210)\r\n\u251c\u2500\u2500 web\r\n\u2502   \u251c\u2500\u2500 index.php\r\n\u2502   \u2514\u2500\u2500 test.php  (\u4f5c\u6210)\r\n\u251c\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 bootstrap.php\r\n\u2514\u2500\u2500 MiniBlogApplication.php\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ob_start()\u306e\u78ba\u8a8d<\/ul>\n<\/li>\n<\/ul>\n<p>ob_start() \u304b\u3089 ob_get_contents(); \u307e\u305f\u306f ob_end_clean();\u306e\u9593\u306b\u51fa\u529b\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u5185\u90e8\u3067\u4fdd\u6301\u3059\u308b\u3002<\/p>\n<p>\u5185\u90e8\u3067\u30c7\u30fc\u30bf\u3092\u4fdd\u6301\u3059\u308b\u3053\u3068\u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u3068\u3044\u3046\u3089\u3057\u3044\u3002<\/p>\n<p>\u4fdd\u6301\u3057\u305f\u30c7\u30fc\u30bf\u306f ob_get_contents(); \u3067 \u53d6\u5f97\u3057 \u5909\u6570\u306b \u4ee3\u5165\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ \u5b9f\u884c<\/span>\r\n<span class=\"nb\">ob_start<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u3060\u3068\u30d0\u30c3\u30d5\u30a1\u306e\u4e0a\u9650\u304c\u6765\u308b\u3068\u81ea\u52d5\u3067\u51fa\u529b\u3055\u308c\u3066\u3057\u307e\u3046\u306e\u3067\u3001\u7121\u52b9\u5316\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/span>\r\n<span class=\"nb\">ob_implicit_flush<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"k\">echo<\/span> <span class=\"s1\">'\u4eca\u65e5\u306e\u5929\u6c17\u306f'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;h1&gt;<\/span>\u66c7\u308a\u306e\u3061\u306f\u308c<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n\r\n<span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ \u4f5c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u6570\u30b3\u30f3\u30c6\u30f3\u30c8\u306b\u3044\u308c\u308b\u3002<\/span>\r\n<span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ob_get_clean<\/span><span class=\"p\">();<\/span>\r\n<\/code><\/pre>\n<p>\u8bbf\u95ee http:\/\/localhost\/MiniBlog\/test.php<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/105-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"nb\">ob_start<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u3060\u3068\u30d0\u30c3\u30d5\u30a1\u306e\u4e0a\u9650\u304c\u6765\u308b\u3068\u81ea\u52d5\u3067\u51fa\u529b\u3055\u308c\u3066\u3057\u307e\u3046\u306e\u3067\u3001\u7121\u52b9\u5316\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/span>\r\n<span class=\"nb\">ob_implicit_flush<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"k\">echo<\/span> <span class=\"s1\">'\u4eca\u65e5\u306e\u5929\u6c17\u306f'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;h1&gt;<\/span>\u66c7\u308a\u306e\u3061\u306f\u308c<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n\r\n<span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ \u4f5c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u6570\u30b3\u30f3\u30c6\u30f3\u30c8\u306b\u3044\u308c\u308b\u3002<\/span>\r\n<span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ob_get_clean<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ + \u305d\u308c\u3092\u51fa\u529b\u3059\u308b<\/span>\r\n<span class=\"k\">echo<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/107-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">view<\/span><span class=\"p\">{<\/span>\r\n    <span class=\"k\">private<\/span> <span class=\"nv\">$world<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'world'<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">){<\/span>\r\n        <span class=\"nb\">ob_start<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nb\">ob_implicit_flush<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$hello<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'hello'<\/span><span class=\"p\">;<\/span>\r\n \r\n<span class=\"c1\">\/\/ ? php \u5909\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u306e \u30eb\u30fc\u30eb\u3068\u5168\u304f\u540c\u3058<\/span>\r\n<span class=\"c1\">\/\/ view \u30af\u30e9\u30b9\u306e\u4e2d\u3067 require \u3057\u305f\u306e\u3067 view\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3084\u30d7\u30ed\u30d1\u30c6\u30a3\u306f<\/span>\r\n<span class=\"c1\">\/\/ require '\u30d5\u30a1\u30a4\u30eb' \u306e\u4e2d\u3067\u3082\u4f7f\u7528\u3067\u304d\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u3053\u306e\u8aad\u307f\u8fbc\u307f\u5834\u6240\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u5909\u6570\u3084\u95a2\u6570\u3082\u8aad\u307f\u3053\u307f\u5148\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u4f7f\u7528\u3067\u304d\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u30e1\u30bd\u30c3\u30c9\u5185\u3067\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u305f\u3081 \u30d5\u30a1\u30a4\u30eb\u5185\u306e\u5909\u6570\u306f \u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306e \u30ed\u30fc\u30ab\u30eb\u30b9\u30b3\u30fc\u30d7\u306b\u306a\u308b\u3002<\/span>\r\n        <span class=\"k\">require<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span> <span class=\"s1\">'\/..\/views\/'<\/span><span class=\"mf\">.<\/span><span class=\"nv\">$path<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30d0\u30c3\u30d5\u30a1\u30fc\u3057\u305f\u30c7\u30fc\u30bf\u3092\u53d6\u5f97 \/\/ \u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u7d42\u4e86<\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ob_get_clean<\/span><span class=\"p\">();<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30d0\u30c3\u30d5\u30a1\u30fc\u3057\u305f\u30c7\u30fc\u30bf\u306e\u51fa\u529b<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$str<\/span><span class=\"p\">){<\/span>\r\n        <span class=\"nb\">htmlspecialchars<\/span><span class=\"p\">(<\/span><span class=\"nv\">$str<\/span><span class=\"p\">,<\/span> <span class=\"no\">ENT_QUOTES<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'UTF-8'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u30af\u30e9\u30b9\u306e\u521d\u671f\u5316<\/span>\r\n<span class=\"nv\">$view<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">View<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ render\u30e1\u30bd\u30c3\u30c9\u306b \u8aad\u307f\u3053\u3080 \u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3066\u5b9f\u884c\u3002<\/span>\r\n<span class=\"nv\">$view<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'sample\/1.php'<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u8aad\u307f\u3053\u3080\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;h1&gt;<\/span>sample\/1.php \u306e\u30d5\u30a1\u30a4\u30eb<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<span class=\"nt\">&lt;p&gt;<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"s1\">'&lt;script&gt;alert(\"\u4eca\u65e5\u306f\u6dbc\u3057\u3044\u3067\u3059\u3002\")&lt;\/script&gt;'<\/span><span class=\"p\">)<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/p&gt;<\/span>\r\n\r\n<span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ \u8aad\u307f\u3053\u307f\u5143\u306e render \u30e1\u30bd\u30c3\u30c9\u306b\u3082 \u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u304b\u3089\u5f53\u7136\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3002<\/span>\r\n<span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'sample\/2.php'<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;h1&gt;<\/span>sample\/2.php \u306e\u30d5\u30a1\u30a4\u30eb<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<span class=\"nt\">&lt;h2&gt;<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$hello<\/span><span class=\"mf\">.<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">world<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/112-0.png\" alt=\"image.png\" \/>\u4e0b\u8ff0\u662f\u5bf9\u539f\u6587\u7684\u4e2d\u6587\u672c\u5730\u5316\u91ca\u4e49\uff1a<\/p>\n<p>1. \u5bf9\u4e8esample\/1.ph\uff0cecho\u7684\u6d41\u7a0b\u4e0e\u4e0a\u8ff0\u5b8c\u5168\u76f8\u540c\u3002<br \/>\n2. \u5173\u4e8esample\/2.php\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/114-1.png\" alt=\"image.png\" \/><br \/>\n\u5982\u679c\u8981\u52a0\u8f7d\u5e03\u5c40\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ render \u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570 \u30d1\u30b9\u3001\u5909\u6570\u3001layout\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9 \u306b\u3059\u308b\u3053\u3068\u3067\u3001<\/span>\r\n<span class=\"c1\">\/\/ \u547c\u3073\u51fa\u3057\u6642\u306b\u3001\u30c7\u30fc\u30bf\u6e21\u3057\u305f\u308a\u3001\u3001layout\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">,<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">,<\/span><span class=\"nv\">$layout<\/span><span class=\"o\">=<\/span><span class=\"kc\">null<\/span><span class=\"p\">){}<\/span>\r\n<span class=\"c1\">\/\/ \u547c\u3073\u51fa\u3057\u6642\u306b layout\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b\u3002<\/span>\r\n    <span class=\"nv\">$view<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'sample\/1.php'<\/span><span class=\"p\">,<\/span><span class=\"k\">array<\/span><span class=\"p\">(),<\/span><span class=\"s1\">'sample\/layout.php'<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">views \u30af\u30e9\u30b9\u3092\u4fee\u6b63\u3059\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">view<\/span><span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ + \u5171\u901a\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u307f\u305f\u3044\u306a\u3082\u306e<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$layout_variables<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n<span class=\"c1\">\/\/ + ?\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u30bb\u30c3\u30bf\u30fc<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">,<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">,<\/span><span class=\"nv\">$layout<\/span><span class=\"o\">=<\/span><span class=\"kc\">null<\/span><span class=\"p\">){<\/span>\r\n        <span class=\"nb\">ob_start<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nb\">ob_implicit_flush<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nb\">extract<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">);<\/span>\r\n    \r\n        <span class=\"k\">require<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span> <span class=\"s1\">'\/..\/views\/'<\/span><span class=\"mf\">.<\/span><span class=\"nv\">$path<\/span><span class=\"p\">;<\/span>\r\n        \r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ob_get_clean<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ layout \u304c null \u3067\u306a\u304b\u3063\u305f\u3089<\/span>\r\n        <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">){<\/span>\r\n<span class=\"c1\">\/\/ $content\u3092 $this-&gt;layout_variables['layout_content'] \u306b \u4ee3\u5165\u3057\u3066<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">[<\/span><span class=\"s1\">'layout_content'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ render(\u30d1\u30b9,\u5909\u6570) layout\u3092Null\u306b\u3057\u3066\u5b9f\u884c\u3059\u308b<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">,<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ layout \u304c null \u306a\u3089 $content \u3092 echo \u3059\u308b\u3002<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$str<\/span><span class=\"p\">){<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nb\">htmlspecialchars<\/span><span class=\"p\">(<\/span><span class=\"nv\">$str<\/span><span class=\"p\">,<\/span> <span class=\"no\">ENT_QUOTES<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'UTF-8'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ layout\u30d5\u30a1\u30a4\u30eb\u306f\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u5909\u6570\u3092\u53d6\u5f97\u3059\u308b<\/span>\r\n<span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'sample1\/php\u3067\u3059'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;h1&gt;<\/span>sample\/1.php \u306e\u30d5\u30a1\u30a4\u30eb<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<span class=\"nt\">&lt;p&gt;<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"s1\">'&lt;script&gt;alert(\"\u4eca\u65e5\u306f\u6dbc\u3057\u3044\u3067\u3059\u3002\")&lt;\/script&gt;'<\/span><span class=\"p\">)<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/p&gt;<\/span>\r\n<span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ sample\/2.php \u306b sample\/1.php \u304b\u3089\u30c7\u30fc\u30bf\u3092\u6e21\u3059\u3053\u3068\u3082\u3067\u304d\u308b\u3002<\/span>\r\n<span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'sample\/2.php'<\/span><span class=\"p\">,<\/span><span class=\"k\">array<\/span><span class=\"p\">());<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;h1&gt;<\/span>sample\/2.php \u306e\u30d5\u30a1\u30a4\u30eb<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<\/code><\/pre>\n<p>layout\u30d5\u30a1\u30a4\u30eb \u3092\u6307\u5b9a\u3057\u3066\u5b9f\u884c\u3059\u308b<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$view<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">View<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ sample\/1.php<\/span>\r\n<span class=\"nv\">$view<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'sample\/1.php'<\/span><span class=\"p\">,<\/span><span class=\"k\">array<\/span><span class=\"p\">(),<\/span><span class=\"s1\">'sample\/layout.php'<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ $view-&gt;render('sample\/1.php',array(),'sample\/layout.php');<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">,<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">,<\/span><span class=\"nv\">$layout<\/span><span class=\"o\">=<\/span><span class=\"kc\">null<\/span><span class=\"p\">){<\/span>\r\n        <span class=\"nb\">ob_start<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nb\">ob_implicit_flush<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/$variables \u306f array()<\/span>\r\n        <span class=\"nb\">extract<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ $path \u306f  'sample\/1.php'<\/span>\r\n<span class=\"c1\">\/\/ 'sample\/2.php' \u306f 'sample\/1.php' \u306e\u4e2d\u3067 echo \u3055\u308c \u4fdd\u6301\u3055\u308c\u308b\u3002<\/span>\r\n        <span class=\"k\">require<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span> <span class=\"s1\">'\/..\/views\/'<\/span><span class=\"mf\">.<\/span><span class=\"nv\">$path<\/span><span class=\"p\">;<\/span>\r\n        \r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ob_get_clean<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ layout \u304c null \u3067\u306a\u304b\u3063\u305f\u3089<\/span>\r\n<span class=\"c1\">\/\/ layout \u306f 'sample\/layout.php' \u306a\u306e\u3067 true<\/span>\r\n        <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">){<\/span>\r\n<span class=\"c1\">\/\/ $content\u3092 $this-&gt;layout_variables['layout_content'] \u306b \u4ee3\u5165\u3057\u3066<\/span>\r\n<span class=\"c1\">\/\/ $content \u306f saple\/2.php \u306e\u30c7\u30fc\u30bf\u3092\u542b\u3080 sample\/1.php<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">[<\/span><span class=\"s1\">'layout_content'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ render(\u30d1\u30b9,\u5909\u6570) layout\u3092\u7a7a\u306b\u3057\u3066\u5b9f\u884c\u3059\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u30d1\u30b9 \u306f sample\/layout.php \u5909\u6570\u306f $this-&gt;layout_variables<\/span>\r\n<span class=\"c1\">\/\/ $this-&gt;layout_variables \u306b\u306f 'layout_content'\u306e\u307b\u304b \u30bb\u30c3\u30bf\u30fc\u3067\u6e21\u3057\u305f\u30c7\u30fc\u30bf\u3082\u542b\u3080\u3002<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">,<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ layout \u304c null \u306a\u3089 $content \u3092 echo \u3059\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u3053\u3053\u306f\u5b9f\u884c\u3055\u308c\u306a\u3044<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ $this-&gt;render('sample\/layout.php',$this-&gt;layout_variables);<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">,<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">,<\/span><span class=\"nv\">$layout<\/span><span class=\"o\">=<\/span><span class=\"kc\">null<\/span><span class=\"p\">){<\/span>\r\n        <span class=\"nb\">ob_start<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nb\">ob_implicit_flush<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/$variables \u306f $this-&gt;layout_variables<\/span>\r\n<span class=\"c1\">\/\/ saple\/2.php \u306e\u30c7\u30fc\u30bf\u3092\u542b\u3080 sample\/1.php \u306f \u5909\u6570 $layout_content\u306b\u306a\u308b\u3002<\/span>\r\n        <span class=\"nb\">extract<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ $path \u306f  'sample\/layout.php'<\/span>\r\n<span class=\"c1\">\/\/ $layout_content \u306f 'sample\/layout.php' \u306e\u4e2d\u3067 echo \u3055\u308c \u4fdd\u6301\u3055\u308c\u308b\u3002<\/span>\r\n        <span class=\"k\">require<\/span> <span class=\"k\">__DIR__<\/span><span class=\"mf\">.<\/span> <span class=\"s1\">'\/..\/views\/'<\/span><span class=\"mf\">.<\/span><span class=\"nv\">$path<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ $sample\/1.php \u3092\u4fdd\u6301\u3057\u305f sample\/layout.php\u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u4ee3\u5165\u3059\u308b<\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ob_get_clean<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ layout \u304c null \u3067\u306a\u304b\u3063\u305f\u3089<\/span>\r\n<span class=\"c1\">\/\/ layout \u306f Null  \u306a\u306e\u3067 false<\/span>\r\n        <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">){<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">[<\/span><span class=\"s1\">'layout_content'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">,<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ layout \u304c null \u306a\u3089 $content \u3092 echo \u3059\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ sample\/layout.php\u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u4ee3\u5165\u3057\u305f $content \u304c \u51fa\u529b \u3055\u308c\u308b\u3002<\/span>\r\n        <span class=\"k\">echo<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/125-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">StatusController<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Controller<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n<span class=\"c1\">\/\/ url http:\/\/localhost\/MiniBlog\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">indexAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$variables<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'title'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'\u4eca\u65e5\u306e\u5929\u6c17'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'content'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'&lt;script&gt;alert(\"\u4eca\u65e5\u306f\u3068\u3066\u3082\u6dbc\u3057\u304b\u3063\u305f\")&lt;\/script&gt;'<\/span><span class=\"p\">];<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9\u306e render \u30e1\u30bd\u30c3\u30c9 \u306b \u4f5c\u6210\u3057\u305f\u30c7\u30fc\u30bf\u3092\u6e21\u3059\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ templete\u30d5\u30a1\u30a4\u30eb\u3082\u3001layout\u30d5\u30a1\u30a4\u30eb\u3082\u6e21\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/      return $this-&gt;render($variables,$templete,$layout);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ Controller \u30af\u30e9\u30b9<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(),<\/span> <span class=\"nv\">$template<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$layout<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'layout'<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$defaults<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'request'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'base_url'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getBaseUrl<\/span><span class=\"p\">(),<\/span>\r\n            <span class=\"c1\">\/\/ 'session'  =&gt; $this-&gt;session,<\/span>\r\n        <span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ view \u30af\u30e9\u30b9\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3059\u308b\u3002<\/span>\r\n        <span class=\"nv\">$view<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">View<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getViewDir<\/span><span class=\"p\">(),<\/span> <span class=\"nv\">$defaults<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ templete \u3092 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30af\u30e9\u30b9\u3067\u5225\u9014\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306a\u5236\u5ea6\u8a2d\u8a08\u306b\u306a\u3063\u3066\u3044\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u3046\u30fc\u3093 \u305f\u3081\u306b\u306a\u308b\u958b\u767a\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u901a\u5e38 $template \u306f Null \u306a\u306e\u3067<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$template<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30a2\u30af\u30b7\u30e7\u30f3\u30cd\u30fc\u30e0  'index' \u3092 $template \u306b\u4ee3\u5165<\/span>\r\n            <span class=\"nv\">$template<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">action_name<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ controller_name \u3068 $template(\u901a\u5e38 $action_name ) \u304b\u3089 \u30d1\u30b9\u3092\u4f5c\u6210\u3059\u308b<\/span>\r\n<span class=\"c1\">\/\/ $path =  'status' + '\/' + 'index'<\/span>\r\n        <span class=\"nv\">$path<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">controller_name<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$template<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ dd($path);<\/span>\r\n\r\n<span class=\"c1\">\/\/ $path \u306f \u4e0a\u3067\u4f5c\u6210\u3057\u305f\u30d1\u30b9  $variables \u306f \u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u3067\u4f5c\u6210\u3057\u305f\u30c7\u30fc\u30bf<\/span>\r\n<span class=\"c1\">\/\/ $layout \u306f controller \u30af\u30e9\u30b9\u306e render\u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570\u306b\u3042\u308b <\/span>\r\n<span class=\"c1\">\/\/ protected function render($variables = array(), $template = null, $layout = 'layout')<\/span>\r\n<span class=\"c1\">\/\/ \u306a\u306b\u3082\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30af\u30e9\u30b9\u306erennder\u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570\u3067\u6307\u5b9a\u3057\u306a\u3051\u308c\u3070\u30c7\u30d5\u30a9\u30eb\u30c8\u306e'layout' \u304c \u6307\u5b9a\u3055\u308c\u308b\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$view<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$variables<\/span><span class=\"p\">,<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/        ? \u30d3\u30e5\u30fc\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u4f5c\u6210\u3055\u308c\u305f HTML\u304c \u304b\u3048\u3063\u3066\u304f\u308b\u3002<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">View \u30af\u30e9\u30b9\u306e\u4f5c\u6210<\/ul>\n<\/li>\n<\/ul>\n<p>\u57fa\u672c\u306f\u4e0a\u3068\u540c\u3058<br \/>\n\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30af\u30e9\u30b9\u306e\u540c\u540d\u306erender\u30e1\u30bd\u30c3\u30c9\u3068\u6df7\u540c\u3057\u306a\u3044\u3088\u3046\u306b\u6ce8\u610f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">View<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$base_dir<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$defaults<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$layout_variables<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     *\r\n     * @param string $base_dir\r\n     * @param array $defaults\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$base_dir<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$defaults<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">base_dir<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$base_dir<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">defaults<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$defaults<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30ec\u30a4\u30a2\u30a6\u30c8\u306b\u6e21\u3059\u5909\u6570\u3092\u6307\u5b9a\r\n     *\r\n     * @param string $name\r\n     * @param mixed $value\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30d3\u30e5\u30fc\u30d5\u30a1\u30a4\u30eb\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\r\n     *\r\n     * @param string $_path\r\n     * @param array $_variables\r\n     * @param mixed $_layout\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_path<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$_variables<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(),<\/span> <span class=\"nv\">$_layout<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$_file<\/span><span class=\"o\">=<\/span>  <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">base_dir<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$_path<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'.php'<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nb\">extract<\/span><span class=\"p\">(<\/span><span class=\"nb\">array_merge<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">defaults<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$_variables<\/span><span class=\"p\">));<\/span>\r\n\r\n        <span class=\"nb\">ob_start<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ \u30d0\u30c3\u30d5\u30a1\u306e\u4e0a\u9650\u3092\u7121\u52b9\u5316\u3057\u51fa\u529b\u3055\u305b\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u3002<\/span>\r\n        <span class=\"nb\">ob_implicit_flush<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">require<\/span> <span class=\"nv\">$_file<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ob_get_clean<\/span><span class=\"p\">();<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$_layout<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_layout<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nb\">array_merge<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">layout_variables<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n                    <span class=\"s1\">'_content'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">)<\/span>\r\n            <span class=\"p\">));<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305f\u5024\u3092HTML\u30a8\u30b9\u30b1\u30fc\u30d7\u3059\u308b\r\n     * @param string $string\r\n     * @return string\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$string<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nb\">htmlspecialchars<\/span><span class=\"p\">(<\/span><span class=\"nv\">$string<\/span><span class=\"p\">,<\/span> <span class=\"no\">ENT_QUOTES<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'UTF-8'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">veiw \u30af\u30e9\u30b9\u306e\u52d5\u4f5c\u78ba\u8a8d<\/ul>\n<\/li>\n<\/ul>\n<p>\u307e\u305a\u306f \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u4f5c\u6210\u3059\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"c1\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u7d99\u627f\u3057\u305f\u30af\u30e9\u30b9<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">AccountController<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Controller<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ action\u30e1\u30bd\u30c3\u30c9\u306e\u547c\u3073\u51fa\u3057\u6642\u5f15\u6570\u306b $params \u3092 \u6e21\u3057\u3066\u3044\u308b\u304c\u3001<\/span>\r\n<span class=\"c1\">\/\/    $content = $this-&gt;$action_method($params);<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u5b9f\u969b\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u306b\u306f \u4eee\u5f15\u6570\u304c \u306a\u3044\u5834\u5408\u3067\u3082 \u30a8\u30e9\u30fc\u306b\u306f\u306a\u3089\u306a\u3044\u3002<\/span>\r\n      <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">indexAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">showAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">urldecode<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'username'<\/span><span class=\"p\">]);<\/span>\r\n        <span class=\"nv\">$variables<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'user'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$name<\/span><span class=\"p\">]];<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">veiw \u30af\u30e9\u30b9\u306e\u52d5\u4f5c\u78ba\u8a8d<\/ul>\n<\/li>\n<\/ul>\n<p>\u6b21\u306bview\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'user\u306eindex.php'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;h1&gt;<\/span>user\u306eindex.php<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'status\u306eshow.php'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;h1&gt;<\/span>\u30e6\u30fc\u30b6\u30fc\u306e\u540d\u524d\uff1a <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'name'<\/span><span class=\"p\">]<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"nt\">&lt;head&gt;<\/span>\r\n    <span class=\"nt\">&lt;title&gt;<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$title<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/title&gt;<\/span>\r\n<span class=\"nt\">&lt;\/head&gt;<\/span>\r\n<span class=\"nt\">&lt;body&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$_content<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;\/body&gt;<\/span>\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/136-1.png\" alt=\"image.png\" \/><\/p>\n<h1>\u521b\u5efaResponse\u7c7b<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">HTTP\u30d8\u30c3\u30c0\u3084HTML \u3092 \u30e6\u30fc\u30b6\u30fc\u306b \u8fd4\u3059\u305f\u3081\u306e\u30af\u30e9\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>php\u3067\u306f header\u95a2\u6570\u3067\u3044\u3064\u3067\u3082 HTTP\u30d8\u30c3\u30c0\u60c5\u5831\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u9001\u4fe1\u3067\u304d\u308b\u3002<br \/>\nheader\u95a2\u6570 \u306e \u30e9\u30c3\u30d1\u30fc\u30af\u30e9\u30b9<\/p>\n<p>header\u95a2\u6570\u306e\u6ce8\u610f\u70b9<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 controllers\r\n\u2502   \u2514\u2500\u2500 StatusController.php\r\n\u251c\u2500\u2500 core\r\n\u2502   \u251c\u2500\u2500 Application.php\r\n\u2502   \u251c\u2500\u2500 Classloader.php\r\n\u2502   \u251c\u2500\u2500 Controller.php\r\n\u2502   \u251c\u2500\u2500 functions.php\r\n\u2502   \u251c\u2500\u2500 Request.php\r\n\u2502   \u251c\u2500\u2500 Response.php          (\u4f5c\u6210)\r\n\u2502   \u251c\u2500\u2500 Router.php\r\n\u2502   \u2514\u2500\u2500 View.php\r\n\u251c\u2500\u2500 views\r\n\u2502   \u2514\u2500\u2500 status\r\n\u2502       \u251c\u2500\u2500 index.php\r\n\u2502       \u2514\u2500\u2500 show.php\r\n\u251c\u2500\u2500 web\r\n\u2502   \u2514\u2500\u2500 index.php\r\n\u251c\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 bootstrap.php\r\n\u2514\u2500\u2500 MiniBlogApplication.php\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30e6\u30fc\u30b6\u30fc\u306b\u30d8\u30c3\u30c0\u60c5\u5831\u3084\u30b3\u30f3\u30c6\u30f3\u30c8\u306a\u3069\u3092\u8fd4\u3059\u306e\u306fsend\u30e1\u30bd\u30c3\u30c9\u3060\u3051\u306b\u7d71\u4e00 \u3057\u3066\u3044\u308b\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">Response<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ html\u3092\u683c\u7d0d\u3059\u308b\u5909\u6570<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$status_code<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">200<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$status_text<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'OK'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ HTTP\u30d8\u30c3\u30c0\u306e\u540d\u524d\u3068\u5024\u3092\u914d\u5217\u3067\u683c\u7d0d\u3059\u308b\u30d7\u30ed\u30d1\u30c6\u30a3<\/span>\r\n<span class=\"c1\">\/\/ \u4e3b\u306aHTTP\u30d8\u30c3\u30c0\u3068\u3057\u3066 Location\u3084 Content-Type<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$http_headers<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u9001\u4fe1\r\n     * \r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">send<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nb\">header<\/span><span class=\"p\">(<\/span><span class=\"s1\">'HTTP\/1.1 '<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">status_code<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">' '<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">status_text<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">http_headers<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$name<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nb\">header<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">': '<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/        echo $this-&gt;content;<\/span>\r\n<span class=\"c1\">\/\/ \u5909\u66f4 \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\u3059\u308b\u6642 \u4e0d\u8981\u306a\u305f\u3081<\/span>\r\n        <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">content<\/span><span class=\"p\">)){<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">content<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u5225\u9014\u8ffd\u52a0<\/span>\r\n<span class=\"c1\">\/\/ \u30d5\u30a1\u30a4\u30eb\u66f8\u304d\u8fbc\u307f\u3068\u304bDB\u64cd\u4f5c \u3092 \u30ec\u30b9\u30dd\u30f3\u30b9\u5f8c\u306b\u884c\u3046\u5236\u5ea6\u8a2d\u8a08\u3082\u3042\u308b<\/span>\r\n<span class=\"c1\">\/\/ https:\/\/pisuke-code.com\/php-send-response-immediately\/<\/span>\r\n<span class=\"c1\">\/\/ https:\/\/www.php.net\/manual\/en\/function.http-response-code.php<\/span>\r\n<span class=\"c1\">\/\/ \u30e6\u30fc\u30b6\u30fc\u3078\u306e\u8fd4\u5374\u306f\u5f53\u7136\u65e9\u304f\u306a\u308b <\/span>\r\n        <span class=\"k\">exit<\/span><span class=\"p\">();<\/span> <span class=\"c1\">\/\/ \u5225\u9014\u8ffd\u52a0 redirect\u6642\u306b\u78ba\u5b9f\u306b\u51e6\u7406\u3092\u7d42\u4e86\u3055\u305b\u308b\u305f\u3081\u3002<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8a2d\u5b9a\r\n     * content(HTML\u306a\u3069\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u8fd4\u3059\u5185\u5bb9\u3092\u683c\u7d0d\u3055\u305b\u308b)\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\r\n     * \u30c7\u30fc\u30bf\u3092\u30bb\u30c3\u30c8\u3059\u308b\u30e1\u30bd\u30c3\u30c9\r\n     *\r\n     * @param string $content\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setContent<\/span><span class=\"p\">(<\/span><span class=\"nv\">$content<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3092\u8a2d\u5b9a\r\n     * \u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3068\u306f \u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u3069\u306e\u3088\u3046\u306a\u72b6\u614b\u304b\u3092\u30b3\u30fc\u30c9\u3067\u8868\u3059\r\n     * \u30da\u30fc\u30b8\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f \u304a\u99b4\u67d3\u307f\u306e 404\u30b3\u30fc\u30c9\r\n     * \u30b5\u30fc\u30d0\u30fc\u30a8\u30e9\u30fc\u3092\u8868\u3059 500\u30b3\u30fc\u30c9\r\n     * \r\n     * \u305d\u308c\u3089\u306e\u30b3\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u30e1\u30bd\u30c3\u30c9\r\n     * \u4e0b\u8a18\u306e\u30b5\u30a4\u30c8\u304c\u53c2\u8003\u306b\u306a\u308b\r\n     * STEP\u3054\u3068\u306b\u4f5c\u308b\u81ea\u4f5cMVC WebFramework\r\n     * https:\/\/qiita.com\/sakunowman\/items\/b8f206661ab11af68d38#%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9\r\n     *\r\n     * @param integer $status_code\r\n     * @param string $status_code\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setStatusCode<\/span><span class=\"p\">(<\/span><span class=\"nv\">$status_code<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$status_text<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">''<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">status_code<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$status_code<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">status_text<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$status_text<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * HTTP\u30ec\u30b9\u30dd\u30f3\u30b9\u30d8\u30c3\u30c0\u3092\u8a2d\u5b9a\r\n     *\r\n     * @param string $name\r\n     * @param mixed $value\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setHttpHeader<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u6700\u7d42\u7684\u306a\u4f8b\u3068\u3057\u3066 header('location: url'); <\/span>\r\n<span class=\"c1\">\/\/ send()\u3067\u8fd4\u4fe1\u3055\u308c\u308b<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">http_headers<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ $name = location, $value = url<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/142-0.png\" alt=\"image.png\" \/><\/p>\n<ul class=\"post-ul\">Application\u30af\u30e9\u30b9\u306b\u5b9f\u88c5\u3059\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ abstract \u4f7f\u7528\u3059\u308b\u306b\u306f \u30af\u30e9\u30b9\u3092\u62bd\u8c61\u5316 \u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308b<\/span>\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"kt\">Router<\/span> <span class=\"nv\">$router<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"kt\">Request<\/span> <span class=\"nv\">$request<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$response<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u521d\u671f\u5316\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">initialize<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Router<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerRoutes<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span>    <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Request<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span>   <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Response<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * Response\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\r\n     *\r\n     * @return Response\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getResponse<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$params<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"s1\">'\u4e0b\u8a18\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u5b58\u5728\u3044\u305f\u3057\u307e\u305b\u3093'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"s1\">'&lt;br&gt;'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">();<\/span>\r\n            <span class=\"k\">exit<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$controller<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'controller'<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"nv\">$action<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'action'<\/span><span class=\"p\">];<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u5909\u66f4<\/span>\r\n<span class=\"c1\">\/\/ response \u306e content \u306b \u30d3\u30e5\u30fc\u3092\u30bb\u30c3\u30c8\u3059\u308b<\/span>\r\n        <span class=\"c1\">\/\/$content = $this-&gt;runAction($controller, $action, $params);<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n        \r\n<span class=\"c1\">\/\/ response\u306b\u5909\u66f4<\/span>\r\n        <span class=\"c1\">\/\/ echo $content;<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n<span class=\"c1\">\/\/ response \u306e content \u3092 \u51fa\u529b\u3059\u308b\u3002<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">send<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305f\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\r\n     *\r\n     * @param string $controller_name\r\n     * @param string $action\r\n     * @param array $params\r\n     *\r\n     * @throws HttpNotFoundException \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u304c\u7279\u5b9a\u3067\u304d\u306a\u3044\u5834\u5408\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$controller_class<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ucfirst<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_name<\/span><span class=\"p\">)<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Controller'<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nv\">$controller<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">findController<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_class<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">echo<\/span> <span class=\"s1\">'\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"k\">exit<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$controller<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">run<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ response\u306b\u5909\u66f4<\/span>\r\n        <span class=\"c1\">\/\/ return $content;<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setContent<\/span><span class=\"p\">(<\/span><span class=\"nv\">$content<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">controller\u30af\u30e9\u30b9\u306b\u3082\u521d\u671f\u5316\u3057\u305fresponse\u30af\u30e9\u30b9\u3092\u6e21\u3059<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$application<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">controller_name<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">strtolower<\/span><span class=\"p\">(<\/span><span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nb\">get_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">),<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"o\">-<\/span><span class=\"mi\">10<\/span><span class=\"p\">));<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">application<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequest<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span>    <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getResponse<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u80fd\u591f\u6b63\u786e\u83b7\u53d6\u901a\u8fc7\u5e38\u89c4\u65b9\u5f0f\u521b\u5efa\u7684\u72b6\u6001\/\u7d22\u5f15\u754c\u9762\u548c\u5c55\u793a\u754c\u9762\uff0c\u90a3\u5c31\u53ef\u4ee5\u4e86\u3002<br \/>\nhttp:\/\/localhost\/MiniBlog\/<br \/>\nhttp:\/\/localhost\/MiniBlog\/user\/yamadataro\/status\/2<\/p>\n<ul class=\"post-ul\">redirect \u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u88c5\u3059\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305fURL\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\r\n     *\r\n     * @param string $url\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">redirect<\/span><span class=\"p\">(<\/span><span class=\"nv\">$url<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u5b9f\u5f15\u6570 $url = '\/' \u306a\u3089<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"s1\">'#https?:\/\/#'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$url<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30a2\u30f3\u30de\u30c3\u30c1\u306e\u305f\u3081 \u3053\u3053\u304c\u5b9f\u884c<\/span>\r\n            <span class=\"nv\">$protocol<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isSsl<\/span><span class=\"p\">()<\/span> <span class=\"o\">?<\/span> <span class=\"s1\">'https:\/\/'<\/span> <span class=\"o\">:<\/span> <span class=\"s1\">'http:\/\/'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"nv\">$host<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getHost<\/span><span class=\"p\">();<\/span>\r\n            <span class=\"nv\">$base_url<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getBaseUrl<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ base_url(\u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u307e\u3067\u306e\u30d1\u30b9\u3092\u5148\u982d\u306b\u8ffd\u52a0\u3057\u3066\u304f\u308b)<\/span>\r\n<span class=\"c1\">\/\/ \u3088\u3063\u3066\u5b9f\u5f15\u6570\u306f \u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc \u4ee5\u4e0b\u306e\u30d1\u30b9\u3092\u6e21\u305b\u3070OK<\/span>\r\n            <span class=\"nv\">$url<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$protocol<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$host<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$base_url<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$url<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setStatusCode<\/span><span class=\"p\">(<\/span><span class=\"mi\">302<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'Found'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setHttpHeader<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Location'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$url<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u5225\u9014\u8ffd\u52a0 <\/span>\r\n<span class=\"c1\">\/\/ return $this-&gt;redirect() redirect\u30e1\u30bd\u30c3\u30c9\u306b\u306f\u623b\u308a\u5024\u304c\u306a\u3044\u305f\u3081<\/span>\r\n<span class=\"c1\">\/\/ reidrect + exit() \u3057\u306a\u3044\u3068\u6c17\u6301\u3061\u60aa\u3044\u305f\u3081<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">send<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u6570\u636e\u5e93\u548c\u8868<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30c7\u30fc\u30bf\u30fc\u30d9\u30fc\u30b9\u30b3\u30cd\u30af\u30b7\u30e7\u30f3<\/ul>\n<\/li>\n<\/ul>\n<p>mysql<\/p>\n<p>phpmyadmin<\/p>\n<p>\u30c7\u30fc\u30bf\u30fc\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3059\u308b<\/p>\n<p>\u30c7\u30fc\u30bf\u30fc\u30d9\u30fc\u30b9\u540d<\/p>\n<p>mini_blog<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">CREATE<\/span> <span class=\"k\">DATABASE<\/span> <span class=\"n\">mini_blog<\/span> <span class=\"k\">DEFAULT<\/span> <span class=\"nb\">CHARACTER<\/span> <span class=\"k\">SET<\/span> <span class=\"n\">utf8mb4<\/span> <span class=\"k\">COLLATE<\/span> <span class=\"n\">utf8mb4_general_ci<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>phpMyAdmin-mini_blog<\/p>\n<p>users (\u30e6\u30fc\u30b6\u30fc\u60c5\u5831)<br \/>\nfollowing (user\u540c\u58eb\u306e\u4e2d\u9593\u30c6\u30fc\u30d6\u30eb)<br \/>\nstatus (\u30e6\u30fc\u30b6\u30fc\u304c\u6295\u7a3f\u3057\u305f\u60c5\u5831)<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">CREATE<\/span> <span class=\"k\">TABLE<\/span> <span class=\"n\">users<\/span><span class=\"p\">(<\/span>\r\n\t<span class=\"n\">id<\/span> <span class=\"nb\">INTEGER<\/span> <span class=\"n\">AUTO_INCREMENT<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">user_name<\/span> <span class=\"nb\">VARCHAR<\/span><span class=\"p\">(<\/span><span class=\"mi\">20<\/span><span class=\"p\">)<\/span> <span class=\"k\">NOT<\/span> <span class=\"k\">NULL<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">password<\/span> <span class=\"nb\">VARCHAR<\/span><span class=\"p\">(<\/span><span class=\"mi\">40<\/span><span class=\"p\">)<\/span> <span class=\"k\">NOT<\/span> <span class=\"k\">NULL<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">created_at<\/span> <span class=\"nb\">DATETIME<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"k\">PRIMARY<\/span> <span class=\"k\">KEY<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">),<\/span>\r\n\t<span class=\"k\">UNIQUE<\/span> <span class=\"k\">KEY<\/span> <span class=\"n\">user_name_index<\/span><span class=\"p\">(<\/span><span class=\"n\">user_name<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">)<\/span><span class=\"n\">ENGINE<\/span> <span class=\"o\">=<\/span> <span class=\"n\">INNODB<\/span> <span class=\"k\">DEFAULT<\/span> <span class=\"n\">CHARSET<\/span><span class=\"o\">=<\/span><span class=\"n\">utf8mb4<\/span> <span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">CREATE<\/span> <span class=\"k\">TABLE<\/span> <span class=\"k\">following<\/span><span class=\"p\">(<\/span>\r\n\t<span class=\"n\">user_id<\/span> <span class=\"nb\">INTEGER<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">following_id<\/span> <span class=\"nb\">INTEGER<\/span><span class=\"p\">,<\/span>\r\n<span class=\"k\">PRIMARY<\/span> <span class=\"k\">KEY<\/span><span class=\"p\">(<\/span><span class=\"n\">user_id<\/span><span class=\"p\">,<\/span><span class=\"n\">following_id<\/span><span class=\"p\">))<\/span><span class=\"n\">ENGINE<\/span> <span class=\"o\">=<\/span> <span class=\"n\">INNODB<\/span> <span class=\"k\">DEFAULT<\/span> <span class=\"n\">CHARSET<\/span><span class=\"o\">=<\/span><span class=\"n\">utf8mb4<\/span> <span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">CREATE<\/span> <span class=\"k\">TABLE<\/span> <span class=\"n\">status<\/span> <span class=\"p\">(<\/span>\r\n\t<span class=\"n\">id<\/span> <span class=\"nb\">INTEGER<\/span> <span class=\"n\">AUTO_INCREMENT<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">user_id<\/span> <span class=\"nb\">INTEGER<\/span> <span class=\"k\">NOT<\/span> <span class=\"k\">NULL<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"n\">body<\/span> <span class=\"nb\">VARCHAR<\/span><span class=\"p\">(<\/span><span class=\"mi\">255<\/span><span class=\"p\">),<\/span>\r\n    <span class=\"n\">created_at<\/span> <span class=\"nb\">DATETIME<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"k\">PRIMARY<\/span> <span class=\"k\">KEY<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">),<\/span>\r\n    <span class=\"k\">INDEX<\/span> <span class=\"n\">user_id_index<\/span><span class=\"p\">(<\/span><span class=\"n\">user_id<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">)<\/span> <span class=\"n\">ENGINE<\/span> <span class=\"o\">=<\/span> <span class=\"n\">INNODB<\/span> <span class=\"k\">DEFAULT<\/span> <span class=\"n\">CHARSET<\/span><span class=\"o\">=<\/span><span class=\"n\">utf8mb4<\/span> <span class=\"p\">;<\/span>\r\n\r\n<span class=\"o\">#<\/span><span class=\"err\">\u5916\u90e8\u30ad\u30fc\u306e\u8a2d\u5b9a<\/span>\r\n<span class=\"o\">#<\/span><span class=\"err\">\u5916\u90e8\u30ad\u30fc\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3067\u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u3092\u62c5\u4fdd\u3067\u304d\u307e\u3059<\/span>\r\n<span class=\"o\">#<\/span><span class=\"err\">\u958b\u767a\u6bb5\u968e\u3067\u306f<\/span> <span class=\"err\">\u8a2d\u5b9a\u3057\u306a\u3044\u65b9\u304c\u3044\u3044<\/span> <span class=\"err\">\u975e\u5e38\u306b\u3081\u3093\u3069\u304f\u3055\u304f\u306a\u308b\u3002<\/span>\r\n<span class=\"k\">ALTER<\/span> <span class=\"k\">TABLE<\/span> <span class=\"k\">following<\/span> <span class=\"k\">ADD<\/span> <span class=\"k\">FOREIGN<\/span> <span class=\"k\">KEY<\/span> <span class=\"p\">(<\/span><span class=\"n\">user_id<\/span><span class=\"p\">)<\/span> <span class=\"k\">REFERENCES<\/span> <span class=\"n\">users<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">);<\/span>\r\n<span class=\"k\">ALTER<\/span> <span class=\"k\">TABLE<\/span> <span class=\"k\">following<\/span> <span class=\"k\">ADD<\/span> <span class=\"k\">FOREIGN<\/span> <span class=\"k\">KEY<\/span> <span class=\"p\">(<\/span><span class=\"n\">following_id<\/span><span class=\"p\">)<\/span> <span class=\"k\">REFERENCES<\/span> <span class=\"n\">users<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">);<\/span>\r\n<span class=\"k\">ALTER<\/span> <span class=\"k\">TABLE<\/span> <span class=\"n\">status<\/span> <span class=\"k\">ADD<\/span> <span class=\"k\">FOREIGN<\/span> <span class=\"k\">KEY<\/span> <span class=\"p\">(<\/span><span class=\"n\">user_id<\/span><span class=\"p\">)<\/span> <span class=\"k\">REFERENCES<\/span> <span class=\"n\">users<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30c6\u30fc\u30d6\u30eb\u4e00\u89a7\u306e\u78ba\u8a8d<\/ul>\n<pre class=\"post-pre\"><code> <span class=\"k\">SHOW<\/span> <span class=\"n\">TABLES<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30c6\u30fc\u30d6\u30eb\u306e\u69cb\u9020\u78ba\u8a8d<\/ul>\n<pre class=\"post-pre\"><code><span class=\"k\">DESC<\/span> <span class=\"n\">status<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u4e00\u4e2a\u7c7b\uff0c\u8be5\u7c7b\u6536\u96c6\u4e86\u7528\u4e8eDB\u8fde\u63a5\u7684\u5c5e\u6027\u548c\u65b9\u6cd5\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">DbManager\u30af\u30e9\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>pdo\u3092\u4f5c\u6210\u3059\u308b\u30af\u30e9\u30b9<br \/>\nDbRepository\u306e\u7d99\u627f\u30af\u30e9\u30b9(\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5c5e\u3059\u308b\u30af\u30e9\u30b9)\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3059\u308b\u30af\u30e9\u30b9<\/p>\n<p>DbRepository\u306e\u7d99\u627f\u30af\u30e9\u30b9\u306fDbManager\u30af\u30e9\u30b9\u306b\u96a0\u308c\u308b\u5f62\u306b\u306a\u308b\u3002<\/p>\n<p>DbRepository<\/p>\n<p>\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30af\u30e9\u30b9<\/p>\n<p>DbRepository\u306e\u7d99\u627f\u3059\u308b\u30af\u30e9\u30b9\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5c5e\u3059\u308b\u30af\u30e9\u30b9<\/p>\n<p>\u5177\u4f53\u7684\u306asql\u3092\u767a\u884c\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u7fa4<\/p>\n<p>controller\u3067 sql \u3092\u66f8\u304b\u305a\u306b \u3053\u306e\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u3002<\/p>\n<p>\u914d\u7f6e\u5834\u6240<\/p>\n<p>models<\/p>\n<p>\u540d\u524d<\/p>\n<p>\u30c6\u30fc\u30d6\u30eb\u540dRepository (\u4f8b. UserRepository)<\/p>\n<p>\u5b8c\u7f8e\u7684PHP\u6846\u67b6<\/p>\n<ul class=\"post-ul\">DbManager \u30af\u30e9\u30b9\u304c\u51fa\u5165\u53e3\u306b\u306a\u3063\u3066\u3044\u308b\u3002<\/ul>\n<p><iframe>\u8bf7\u7528\u4e2d\u6587\u8fdb\u884c\u91cd\u65b0\u8868\u8ff0\uff0c\u4ec5\u63d0\u4f9b\u4e00\u79cd\u9009\u9879\uff1a\u8bf7\u4e3a\u4ee5\u4e0b\u5185\u5bb9\u8fdb\u884c\u4e2d\u6587\u672c\u5730\u5316\u7684\u91cd\u65b0\u8868\u8ff0\uff0c\u4ec5\u63d0\u4f9b\u4e00\u79cd\u9009\u9879\uff1a<\/p>\n<p>&nbsp;<\/p>\n<p><\/iframe><\/p>\n<p>\u901a\u8fc7\u63a7\u5236\u5668\u64cd\u4f5cDbManager\u7c7b\u3002<\/p>\n<p>\u4e0d\u4f7f\u7528\u6846\u67b6\u8fdb\u884c\u5f00\u53d1 &#8211; \u7b80\u5316\u5f00\u53d1\u65f6\u7684\u65b9\u6cd5<\/p>\n<ul class=\"post-ul\">\u7d99\u627f\u30af\u30e9\u30b9\u304c\u51fa\u5165\u53e3\u306b\u306a\u308b\u3068\u601d\u3046\u3002<\/ul>\n<p><iframe>\u8bf7\u5c06\u4ee5\u4e0b\u5185\u5bb9\u4ee5\u4e2d\u6587\u8fdb\u884c\u672c\u5730\u5316\u6539\u5199\uff0c\u53ea\u9700\u8981\u4e00\u79cd\u9009\u9879\uff1a\u8bf7\u539f\u751f\u4e2d\u6587\u4fee\u6539\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<p><\/iframe><\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 controllers (\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5c5e\u3059\u308b\u30af\u30e9\u30b9)\r\n\u2502   \u2514\u2500\u2500 StatusController.php\r\n\u251c\u2500\u2500 core ( \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30af\u30e9\u30b9)\r\n\u2502   \u251c\u2500\u2500 Application.php\r\n\u2502   \u251c\u2500\u2500 Classloader.php\r\n\u2502   \u251c\u2500\u2500 Controller.php\r\n\u2502   \u251c\u2500\u2500 DbManager.php               (\u4f5c\u6210)\r\n\u2502   \u251c\u2500\u2500 DbRepository.php            (\u4f5c\u6210)\r\n\u2502   \u251c\u2500\u2500 functions.php\r\n\u2502   \u251c\u2500\u2500 Request.php\r\n\u2502   \u251c\u2500\u2500 Response.php\r\n\u2502   \u251c\u2500\u2500 Router.php\r\n\u2502   \u2514\u2500\u2500 View.php\r\n\u251c\u2500\u2500 models (\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5c5e\u3059\u308b\u30af\u30e9\u30b9)\r\n\u2502   \u251c\u2500\u2500 StatusRepository.php        (\u4f5c\u6210)\r\n\u2502   \u2514\u2500\u2500 UserRepository.php          (\u4f5c\u6210)\r\n\u251c\u2500\u2500 views\r\n\u2502   \u2514\u2500\u2500 status\r\n\u2502       \u251c\u2500\u2500 index.php\r\n\u2502       \u2514\u2500\u2500 show.php\r\n\u251c\u2500\u2500 web\r\n\u2502   \u2514\u2500\u2500 index.php\r\n\u251c\u2500\u2500 .htaccess\r\n\u251c\u2500\u2500 bootstrap.php\r\n\u2514\u2500\u2500 MiniBlogApplication.php\r\n<\/code><\/pre>\n<p>\u521b\u5efaDbManager\u7c7b<\/p>\n<ul class=\"post-ul\">pdo\u3092\u4f5c\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"cd\">\/**\r\n * DbManager.\r\n *\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">DbManager<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$connections<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u63a5\u7d9a\r\n     *\r\n     * @param string $name\r\n     * @param array $params\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">connect<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"c1\">\/\/ array_merge \u306f \u540c\u3058\u30ad\u30fc\u540d\u306e\u6642\u306f\u5024\u3092\u4e0a\u66f8\u304d\u3059\u308b\u3002<\/span>\r\n        <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">array_merge<\/span><span class=\"p\">(<\/span>\r\n<span class=\"c1\">\/\/ \u3053\u306earray()\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u5024<\/span>\r\n            <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n                <span class=\"s1\">'dsn'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'user'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'options'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(),<\/span>\r\n            <span class=\"p\">),<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ $params \u306f<\/span>\r\n<span class=\"c1\">\/\/         $this-&gt;db_manager-&gt;connect('master', <\/span>\r\n<span class=\"c1\">\/\/-&gt;\u30b3\u30ec   array(<\/span>\r\n<span class=\"c1\">\/\/            'dsn'      =&gt; 'mysql:dbname=mini_blog;host=localhost',<\/span>\r\n<span class=\"c1\">\/\/            'user'     =&gt; 'root',<\/span>\r\n<span class=\"c1\">\/\/            'password' =&gt; '',<\/span>\r\n<span class=\"c1\">\/\/              ?\u91cd\u8907\u3059\u308b 'dsn','user','password'\u306e\u5024\u306f\u4e0a\u66f8\u304d\u3059\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/        ));<\/span>\r\n\r\n        <span class=\"nv\">$con<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">PDO<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'dsn'<\/span><span class=\"p\">],<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">],<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'password'<\/span><span class=\"p\">],<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'options'<\/span><span class=\"p\">]<\/span>\r\n        <span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$con<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setAttribute<\/span><span class=\"p\">(<\/span><span class=\"no\">PDO<\/span><span class=\"o\">::<\/span><span class=\"no\">ATTR_ERRMODE<\/span><span class=\"p\">,<\/span> <span class=\"no\">PDO<\/span><span class=\"o\">::<\/span><span class=\"no\">ERRMODE_EXCEPTION<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u4f5c\u6210\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f \u914d\u5217\u306b\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58\u3059\u308b<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">connections<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$con<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\r\n     *\r\n     * @param string $name\r\n     * @return PDO\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getConnection<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ current\u95a2\u6570\u306f\u914d\u5217\u306e\u5148\u982d\u306epdo\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8fd4\u3059<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nb\">current<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">connections<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ $name\u3092\u6307\u5b9a\u3057\u305f\u5834\u5408 $name \u3067 \u767b\u9332\u3057\u305f pdo\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u304b\u3048\u308b<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">connections<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">];<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Application\u30af\u30e9\u30b9\u306b\u5b9f\u88c5\u3059\u308b\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n\r\n<span class=\"c1\">\/\/+    <\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$db_manager<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     *\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setDebugMode<\/span><span class=\"p\">(<\/span><span class=\"nv\">$debug<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">initialize<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+             ? \u3067 \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u521d\u671f\u5316\u304c\u5b8c\u4e86\u3059\u308b<\/span>\r\n<span class=\"c1\">\/\/      ? \u3053\u308c\u3067 \u4f5c\u6210\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u521d\u671f\u5316\u51e6\u7406\u3092\u767b\u9332\u3067\u304d\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u7528\u610f\u3057\u3066\u3042\u308b\u3002<\/span>\r\n<span class=\"c1\">\/\/ DB\u306e\u521d\u671f\u5316\u51e6\u7406\u306a\u3069\u3092\u304a\u3053\u306a\u3046\u3002<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">configure<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u521d\u671f\u5316\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">initialize<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Router<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerRoutes<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span>    <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Request<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span>   <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Response<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+        <\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">DbManager<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\r\n     * \u30d1\u30fc\u30d5\u30a7\u30af\u30c8PHP p236\r\n     *  \u500b\u5225\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u69d8\u3005\u306a\u8a2d\u5b9a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u7a7a\u306e\u30e1\u30bd\u30c3\u30c9\u3068\u3057\u3066\u5b9a\u7fa9\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">configure<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * DbManager\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\r\n     *\r\n     * @return DbManager\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getDbManager<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u3067\u306e\u4f7f\u7528\u306e\u4ed5\u65b9<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">MiniBlogApplication<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Application<\/span>\r\n<span class=\"p\">{<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">configure<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ DbMaster \u306e protected $connections = array(); \u30d7\u30ed\u30d1\u30c6\u30a3\u306b<\/span>\r\n<span class=\"c1\">\/\/ $this-&gt;connections[$name] = $con; \u540d\u524d\u3092\u3064\u3051\u3066\u4fdd\u5b58\u3057\u3066\u3044\u308b\u3002<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'master'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'dsn'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'mysql:dbname=mini_blog;host=localhost'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'user'<\/span>     <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'root'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n<span class=\"c1\">\/\/ pdo\u306e\u63a5\u7d9a\u3092\u78ba\u8a8d\u3059\u308b<\/span>\r\n        <span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getConnection<\/span><span class=\"p\">(<\/span><span class=\"s1\">'master'<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/176-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code>    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$application<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">controller_name<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">strtolower<\/span><span class=\"p\">(<\/span><span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nb\">get_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">),<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"o\">-<\/span><span class=\"mi\">10<\/span><span class=\"p\">));<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">application<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequest<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span>    <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getResponse<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span>  <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getDbManager<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u4e00\u4e2aDbRepository\u7c7b\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">SQL\u3092\u5b9f\u884c\u3059\u308b\u30e1\u30bd\u30c3\u30c9(execute,fetch,fetchAll)\u3092\u8a18\u8ff0<\/ul>\n<\/li>\n<\/ul>\n<p>\u7d99\u627f\u30af\u30e9\u30b9\u3067\u5177\u4f53\u7684\u306a sql \u3068 \u30d1\u30e9\u30e1\u30fc\u30bf\u30fc \u3092 \u767a\u884c\u3057\u3066?\u306e\u30e1\u30bd\u30c3\u30c9\u304b\u3089DB\u306b\u30c7\u30fc\u30bf\u3092\u767b\u9332\u3067\u304d\u308b\u8a2d\u8a08\u306b\u306a\u3063\u3066\u3044\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">DbRepository<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$con<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     *\r\n     * @param PDO $con\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$con<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setConnection<\/span><span class=\"p\">(<\/span><span class=\"nv\">$con<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\r\n     *\r\n     * @param PDO $con\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setConnection<\/span><span class=\"p\">(<\/span><span class=\"nv\">$con<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">con<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$con<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30af\u30a8\u30ea\u3092\u5b9f\u884c\r\n     *\r\n     * @param string $sql\r\n     * @param array $params\r\n     * @return PDOStatement $stmt\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$stmt<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">con<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">prepare<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$stmt<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">execute<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$stmt<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u3001\u7d50\u679c\u30921\u884c\u53d6\u5f97\r\n     *\r\n     * @param string $sql\r\n     * @param array $params\r\n     * @return array\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">fetch<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">execute<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span><span class=\"no\">PDO<\/span><span class=\"o\">::<\/span><span class=\"no\">FETCH_ASSOC<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u3001\u7d50\u679c\u3092\u3059\u3079\u3066\u53d6\u5f97\r\n     *\r\n     * @param string $sql\r\n     * @param array $params\r\n     * @return array\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">execute<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"no\">PDO<\/span><span class=\"o\">::<\/span><span class=\"no\">FETCH_ASSOC<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">DbManager\u30af\u30e9\u30b9\u306b \u5b9f\u88c5\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>(DbManager\u30af\u30e9\u30b9\u3067\u306f) DbRepository\u306e\u7d99\u627f\u30af\u30e9\u30b9 \u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3059\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"cd\">\/**\r\n * DbManager.\r\n *\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">DbManager<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$repositories<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53d6\u5f97\r\n     *\r\n     * @param string $repository_name\r\n     * @return DbRepository\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ $repositorie\u306e\u914d\u5217\u306e\u306a\u304b\u306b$repository_name \u4f8b\u3048\u3070 User \u304c\u3042\u308b\u304b\u3069\u3046\u304b<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repositories<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u306a\u3051\u308c\u3070 UserRepository\u30af\u30e9\u30b9\u540d\u3092\u4f5c\u6210\u3057\u3066\u3001<\/span>\r\n            <span class=\"nv\">$repository_class<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$repository_name<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Repository'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ \u306a\u3051\u308c\u3070 \u5f15\u6570\u306b PDO\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 \u3092 \u53d6\u5f97\u3057\u3066<\/span>\r\n            <span class=\"nv\">$con<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getConnection<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ \u3053\u3053\u3067 \u7d99\u627f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b PDO\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6e21\u3057\u3066 new \u3057\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3002<\/span>\r\n            <span class=\"nv\">$repository<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nv\">$repository_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$con<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ $repositorie\u306e\u914d\u5217\u306e\u306a\u304b\u306b \u4fdd\u5b58\u3059\u308b<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repositories<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$repository<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u6700\u5f8c\u306f \u6307\u5b9a\u306e \u7d99\u627f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8fd4\u3059<\/span>\r\n          <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repositories<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">];<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u521b\u5efa\u4e00\u4e2a\u7ee7\u627f\u81eaUserRepository\u7684\u7c7b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserRepository<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">DbRepository<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$password<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">hashPassword<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$now<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">DateTime<\/span><span class=\"p\">();<\/span>\r\n\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\n            INSERT INTO users(user_name, password, created_at)\r\n                VALUES(:user_name, :password, :created_at)\r\n        \"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nv\">$stmt<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">execute<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">':user_name'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">':password'<\/span>   <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">':created_at'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$now<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">format<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Y-m-d H:i:s'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">hashPassword<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nb\">sha1<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'SecretKey'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"SELECT * FROM users WHERE user_name = :user_name\"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">':user_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30e6\u30fc\u30b6\u30fc\u3092\u767b\u9332\u3057\u3066\u78ba\u8a8d<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">configure<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'master'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'dsn'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'mysql:dbname=mini_blog;host=localhost'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'user'<\/span>     <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'root'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n        <span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'yamada taro'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$password<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'testtest'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ DbRepository\u306e\u7d99\u627f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$userRepo<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$userRepo<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span><span class=\"nv\">$password<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$userRepo<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/187-0.png\" alt=\"image.png\" \/><\/p>\n<h3>DbRepository\u7c7b\u7684\u7ee7\u627f\u7c7b\u4e0epdo\u7684\u5339\u914d\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/189-11.png\" alt=\"image.png\" \/><\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/190-1.png\" alt=\"image.png\" \/><\/p>\n<ul class=\"post-ul\">core\\DbManager.php\u306e\u4fee\u6b63\u3068\u8ffd\u8a18<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"cd\">\/**\r\n * DbManager.\r\n *\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">DbManager<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$connections<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$repositories<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$repository_connection_map<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u63a5\u7d9a\r\n     *\r\n     * @param string $name\r\n     * @param array $params\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">connect<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">array_merge<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'dsn'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'user'<\/span>     <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'options'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(),<\/span>\r\n        <span class=\"p\">),<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$con<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">PDO<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'dsn'<\/span><span class=\"p\">],<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">],<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'password'<\/span><span class=\"p\">],<\/span>\r\n            <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'options'<\/span><span class=\"p\">]<\/span>\r\n        <span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$con<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setAttribute<\/span><span class=\"p\">(<\/span><span class=\"no\">PDO<\/span><span class=\"o\">::<\/span><span class=\"no\">ATTR_ERRMODE<\/span><span class=\"p\">,<\/span> <span class=\"no\">PDO<\/span><span class=\"o\">::<\/span><span class=\"no\">ERRMODE_EXCEPTION<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">connections<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$con<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\r\n     *\r\n     * @string $name\r\n     * @return PDO\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getConnection<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nb\">current<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">connections<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">connections<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">];<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30ea\u30dd\u30b8\u30c8\u30ea\u3054\u3068\u306e\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u60c5\u5831\u3092\u8a2d\u5b9a\r\n     *\r\n     * @param string $repository_name\r\n     * @param string $name\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setRepositoryConnectionMap<\/span><span class=\"p\">(<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repository_connection_map<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$name<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u5bfe\u5fdc\u3059\u308b\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\r\n     *\r\n     * @param string $repository_name\r\n     * @return PDO\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getConnectionForRepository<\/span><span class=\"p\">(<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repository_connection_map<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repository_connection_map<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">];<\/span>\r\n            <span class=\"nv\">$con<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getConnection<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$con<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getConnection<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$con<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53d6\u5f97\r\n     *\r\n     * @param string $repository_name\r\n     * @return DbRepository\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repositories<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$repository_class<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$repository_name<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Repository'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/\u4fee\u6b63<\/span>\r\n            <span class=\"c1\">\/\/$con = $this-&gt;getConnection('master');<\/span>\r\n            <span class=\"nv\">$con<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getConnectionForRepository<\/span><span class=\"p\">(<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">);<\/span>\r\n\r\n            <span class=\"nv\">$repository<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nv\">$repository_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$con<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repositories<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$repository<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repositories<\/span><span class=\"p\">[<\/span><span class=\"nv\">$repository_name<\/span><span class=\"p\">];<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+ \u63a5\u7d9a\u306e\u89e3\u653e\u51e6\u7406<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\r\n     *   \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u30e1\u30bd\u30c3\u30c9\u306f\u3001 \u7279\u5b9a\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53c2\u7167\u3059\u308b\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u304c\u3072\u3068\u3064\u3082\u306a\u304f\u306a\u3063\u305f\u3068\u304d\u306b\u30b3\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002 \r\n     *   \u3042\u308b\u3044\u306f\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u7d42\u4e86\u6642\u306b\u3082\u9806\u4e0d\u540c\u3067\u30b3\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002\r\n     *   \r\n     * \u30ea\u30dd\u30b8\u30c8\u30ea\u3068\u63a5\u7d9a\u3092\u7834\u68c4\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__destruct<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">repositories<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$repository<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ unset \u2014 \u6307\u5b9a\u3057\u305f\u5909\u6570\u306e\u5272\u5f53\u3092\u89e3\u9664\u3059\u308b<\/span>\r\n            <span class=\"k\">unset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$repository<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">connections<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$con<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">unset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$con<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u3067\u306e\u4f7f\u7528\u65b9\u6cd5<\/ul>\n<pre class=\"post-pre\"><code><span class=\"k\">CREATE<\/span> <span class=\"k\">DATABASE<\/span> <span class=\"n\">mini_blog_test<\/span> <span class=\"k\">DEFAULT<\/span> <span class=\"nb\">CHARACTER<\/span> <span class=\"k\">SET<\/span> <span class=\"n\">utf8mb4<\/span> <span class=\"k\">COLLATE<\/span> <span class=\"n\">utf8mb4_general_ci<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">CREATE<\/span> <span class=\"k\">TABLE<\/span> <span class=\"n\">users<\/span><span class=\"p\">(<\/span>\r\n\t<span class=\"n\">id<\/span> <span class=\"nb\">INTEGER<\/span> <span class=\"n\">AUTO_INCREMENT<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">user_name<\/span> <span class=\"nb\">VARCHAR<\/span><span class=\"p\">(<\/span><span class=\"mi\">20<\/span><span class=\"p\">)<\/span> <span class=\"k\">NOT<\/span> <span class=\"k\">NULL<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">password<\/span> <span class=\"nb\">VARCHAR<\/span><span class=\"p\">(<\/span><span class=\"mi\">40<\/span><span class=\"p\">)<\/span> <span class=\"k\">NOT<\/span> <span class=\"k\">NULL<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"n\">created_at<\/span> <span class=\"nb\">DATETIME<\/span><span class=\"p\">,<\/span>\r\n\t<span class=\"k\">PRIMARY<\/span> <span class=\"k\">KEY<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">),<\/span>\r\n\t<span class=\"k\">UNIQUE<\/span> <span class=\"k\">KEY<\/span> <span class=\"n\">user_name_index<\/span><span class=\"p\">(<\/span><span class=\"n\">user_name<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">)<\/span><span class=\"n\">ENGINE<\/span> <span class=\"o\">=<\/span> <span class=\"n\">INNODB<\/span> <span class=\"k\">DEFAULT<\/span> <span class=\"n\">CHARSET<\/span><span class=\"o\">=<\/span><span class=\"n\">utf8mb4<\/span> <span class=\"p\">;<\/span>        \r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">configure<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'master'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'dsn'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'mysql:dbname=mini_blog;host=localhost'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'user'<\/span>     <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'root'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n\r\n        <span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'userCon'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'dsn'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'mysql:dbname=mini_blog_test;host=localhost'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'user'<\/span>     <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'root'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setRepositoryConnectionMap<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">,<\/span><span class=\"s1\">'userCon'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'yamada taro'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$password<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'testtest'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ DbRepository\u306e\u7d99\u627f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$userRepo<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span> \r\n<span class=\"c1\">\/\/ \u3053\u306e\u6642 userRepo \u306e\u5f15\u6570\u306b\u6e21\u3055\u308c\u308b con \u306f userCon \u306b\u306a\u308b<\/span>\r\n        \r\n        <span class=\"nv\">$userRepo<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span><span class=\"nv\">$password<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$userRepo<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">$name = &#8216;yamada taro&#8217;; \u306f \uff12\u5ea6\u76ee\u306a\u3069\u3067\u91cd\u8907\u30a8\u30e9\u30fc\u304c\u751f\u3058\u306a\u3051\u308c\u3070DB\u304c\u5207\u308a\u66ff\u3048\u3089\u308c\u3066\u3044\u308b\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"k\">select<\/span> <span class=\"o\">*<\/span> <span class=\"k\">from<\/span> <span class=\"n\">mini_blog_test<\/span><span class=\"p\">.<\/span><span class=\"n\">users<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>+----+-------------+------------------------------------------+---------------------+\r\n| id | user_name   | password                                 | created_at          |\r\n+----+-------------+------------------------------------------+---------------------+\r\n|  1 | yamada taro | eccedb8d2e6b8749c14388ba3b3292597960febd | 2022-08-23 06:06:31 |\r\n+----+-------------+------------------------------------------+---------------------+\r\n1 row in set (0.00 sec)\r\n<\/code><\/pre>\n<h1>\u5b9e\u73b0Session\u7c7b\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">$_SESSION\u30af\u30e9\u30b9\u306e\u30e9\u30c3\u30d1\u30fc\u30af\u30e9\u30b9(\u3088\u308a\u4f7f\u3044\u3084\u3059\u304f\u3057\u305f\u3082\u306e)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">csrf\u5bfe\u7b56\u3084auth\u8a8d\u8a3c\u3067\u4f7f\u7528<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">Session<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">static<\/span> <span class=\"nv\">$sessionStarted<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\r\n     * \u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u81ea\u52d5\u7684\u306b\u958b\u59cb\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"k\">self<\/span><span class=\"o\">::<\/span><span class=\"nv\">$sessionStarted<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nb\">session_start<\/span><span class=\"p\">();<\/span>\r\n\r\n            <span class=\"k\">self<\/span><span class=\"o\">::<\/span><span class=\"nv\">$sessionStarted<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u5024\u3092\u8a2d\u5b9a\r\n     *\r\n     * @param string $name\r\n     * @param mixed $value\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">set<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$_SESSION<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30bb\u30c3\u30b7\u30e7\u30f3\u304b\u3089\u5024\u3092\u53d6\u5f97\r\n     *\r\n     * @param string $name\r\n     * @param mixed $default \u6307\u5b9a\u3057\u305f\u30ad\u30fc\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$default<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_SESSION<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$_SESSION<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">];<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$default<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30bb\u30c3\u30b7\u30e7\u30f3\u304b\u3089\u5024\u3092\u524a\u9664\r\n     *\r\n     * @param string $name\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">remove<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">unset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_SESSION<\/span><span class=\"p\">[<\/span><span class=\"nv\">$name<\/span><span class=\"p\">]);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u7a7a\u306b\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">clear<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$_SESSION<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">application\u30af\u30e9\u30b9\u306b\u5b9f\u88c5\u3059\u308b<\/ul>\n<pre class=\"post-pre\"><code>\r\n<span class=\"c1\">\/\/+    <\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$session<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u521d\u671f\u5316\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">initialize<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Router<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">registerRoutes<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Request<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Response<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">DbManager<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+        <\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span>    <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Session<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+  <\/span>\r\n    <span class=\"cd\">\/**\r\n     * Session\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\r\n     *\r\n     * @return Session\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getSession<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<\/code><\/pre>\n<ul class=\"post-ul\">controller\u30af\u30e9\u30b9\u306b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6e21\u3059<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span><span class=\"nv\">$application<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">controller_name<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">strtolower<\/span><span class=\"p\">(<\/span><span class=\"nb\">substr<\/span><span class=\"p\">(<\/span><span class=\"nb\">get_class<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">),<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"o\">-<\/span><span class=\"mi\">10<\/span><span class=\"p\">));<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">application<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequest<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span>    <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getResponse<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span>  <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getDbManager<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span>     <span class=\"o\">=<\/span> <span class=\"nv\">$application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getSession<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u7528\u6237\u8868\u7684\u589e\u5220\u6539\u67e5\u64cd\u4f5c<\/p>\n<ul class=\"post-ul\">\u305d\u306e\u307e\u3048\u306b<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">configure<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'master'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'dsn'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'mysql:dbname=mini_blog;host=localhost'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'user'<\/span>     <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'root'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n\r\n<span class=\"c1\">\/\/ ? \u3053\u308c\u5168\u90e8\u524a\u9664        <\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'userRepo'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'dsn'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'mysql:dbname=mini_blog_test;host=localhost'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'user'<\/span>     <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'root'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setRepositoryConnectionMap<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">,<\/span><span class=\"s1\">'userRepo'<\/span><span class=\"p\">);<\/span>\r\n        \r\n        <span class=\"nv\">$name<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'yamada taro'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$password<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'testtest'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ DbRepository\u306e\u7d99\u627f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$userRepo<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$userRepo<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">,<\/span><span class=\"nv\">$password<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nf\">dd<\/span><span class=\"p\">(<\/span><span class=\"nv\">$userRepo<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$name<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">root\u306e\u78ba\u8a8d<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">registerRoutes<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n\r\n             <span class=\"c1\">\/\/ \u7701\u7565<\/span>\r\n\r\n            <span class=\"s1\">'\/account'<\/span>\r\n                <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'index'<\/span><span class=\"p\">),<\/span>\r\n <span class=\"c1\">\/\/\u3053\u308c\u306f\u5b8c\u5168\u306b\u524a\u9664\u3059\u308b '\/account\/:username'<\/span>\r\n               <span class=\"c1\">\/\/ =&gt; array('controller' =&gt; 'account', 'action' =&gt; 'show'),<\/span>\r\n            <span class=\"s1\">'\/account\/:action'<\/span>\r\n                <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/211-2.png\" alt=\"image.png\" \/><\/p>\n<h1>\u5b9e\u65bd\u9632\u6b62\u8de8\u7ad9\u8bf7\u6c42\u4f2a\u9020\uff08CSRF\uff09\u7684\u63aa\u65bd\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">form \u3084 fetch(\u30af\u30ed\u30b9\u30aa\u30ea\u30b8\u30f3\u3092\u9664\u304f) \u9001\u4fe1\u3059\u308b\u5834\u5408 \u5fc5\u305a\u7d76\u5bfe\u3084\u3089\u306a\u3051\u308c\u3070\u3044\u3051\u306a\u3044 \u5bfe\u7b56<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u30ef\u30f3\u30bf\u30a4\u30e0\u30c8\u30fc\u30af\u30f3\u5f62\u5f0f(\u4e00\u822c\u7684)\u3092\u3068\u3063\u3066\u3044\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u307e\u305f\u8907\u6570\u306e\u30a6\u30a3\u30f3\u30c9\u30a6(10\u4ef6\u4ee5\u4e0b)\u3067\u5225\u3005\u306etoken\u3092\u4f5c\u6210\u3057\u3066\u30c1\u30a7\u30c3\u30af\u3067\u304d\u308b\u3088\u3046\u8a2d\u8a08\u3055\u308c\u3066\u3044\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Controller \u30af\u30e9\u30b9\u3067 \u5b9f\u88c5\u3059\u308b\u3002(\u666e\u901a\u306fSession\u30af\u30e9\u30b9\u3067\u5b9f\u88c5\u3055\u308c\u308b\u3053\u3068\u304c\u591a\u3044)<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * CSRF\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\r\n     *\r\n     * @param string $form_name\r\n     * @return string $token\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"nv\">$form_name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ form \u6bce\u306b \u7570\u306a\u308b token \u3092\u4f5c\u6210<\/span>\r\n        <span class=\"nv\">$key<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'csrf_tokens\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$form_name<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3 \u306b \u767b\u9332\u3057\u305f token \u3092 \u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$tokens<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tokens<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ 10 \u4ef6 \u4ee5\u4e0a\u306a\u3089<\/span>\r\n<span class=\"c1\">\/\/ \u914d\u5217\u306e\u524d\u304b\u3089\u524a\u9664\u3057\u3066\u3044\u304f<\/span>\r\n            <span class=\"nb\">array_shift<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tokens<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u65b0\u3057\u304f token \u3092 \u4f5c\u6210\u3059\u308b<\/span>\r\n        <span class=\"nv\">$token<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">sha1<\/span><span class=\"p\">(<\/span><span class=\"nv\">$form_name<\/span> <span class=\"mf\">.<\/span> <span class=\"nb\">session_id<\/span><span class=\"p\">()<\/span> <span class=\"mf\">.<\/span> <span class=\"nb\">microtime<\/span><span class=\"p\">());<\/span>\r\n<span class=\"c1\">\/\/ session \u306b \u4fdd\u5b58\u3059\u308b<\/span>\r\n        <span class=\"nv\">$tokens<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$tokens<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u30c8\u30fc\u30af\u30f3\u306e \u914d\u5217\u3092 \u8fd4\u3059\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * CSRF\u30c8\u30fc\u30af\u30f3\u304c\u59a5\u5f53\u304b\u30c1\u30a7\u30c3\u30af\r\n     *\r\n     * @param string $form_name\r\n     * @param string $token\r\n     * @return boolean\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">checkCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"nv\">$form_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$key<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'csrf_tokens\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$form_name<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3 \u306b \u767b\u9332\u3057\u305f token \u3092 \u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$tokens<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">());<\/span>\r\n\r\n<span class=\"c1\">\/\/ $tokens\u306e\u914d\u5217\u306e\u5024\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u9001\u4fe1\u3055\u308c\u305f$token \u3067 \u30b5\u30fc\u30c1\u3059\u308b<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"kc\">false<\/span> <span class=\"o\">!==<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$pos<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">array_search<\/span><span class=\"p\">(<\/span><span class=\"nv\">$token<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$tokens<\/span><span class=\"p\">,<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)))<\/span> <span class=\"p\">{<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u4e00\u81f4\u3059\u308c\u3070\u3001\u305d\u306e $token \u3092 session\u306e $tokens\u304b\u3089 \u524a\u9664<\/span>\r\n            <span class=\"k\">unset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$tokens<\/span><span class=\"p\">[<\/span><span class=\"nv\">$pos<\/span><span class=\"p\">]);<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"nv\">$key<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$tokens<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ true \u3092 \u8fd4\u3059\u3002<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">CSRF\u30c8\u30fc\u30af\u30f3 \u3092 \u30d5\u30a9\u30fc\u30e0\u306b \u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">signupAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'user_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n           <span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'_token'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/signup'<\/span><span class=\"p\">)<\/span>\r\n\r\n        <span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">registerAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isPost<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"s1\">'&lt;h1&gt;\u30da\u30fc\u30b8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093&lt;\/h1&gt;'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n        <span class=\"nv\">$token<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'_token'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">checkCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/signup'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account\/signup'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$user_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$password<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'password'<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$errors<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/^\\w{3,20}$\/'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u306f\u534a\u89d2\u82f1\u6570\u5b57\u304a\u3088\u3073\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u30923 \uff5e 20 \u6587\u5b57\u4ee5\u5185\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isUniqueUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u306f\u65e2\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"mi\">4<\/span> <span class=\"o\">&gt;<\/span> <span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span> <span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">30<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30d1\u30b9\u30ef\u30fc\u30c9\u306f4 \uff5e 30 \u6587\u5b57\u4ee5\u5185\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">===<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">);<\/span>\r\n\r\n            <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">);<\/span>\r\n\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'user_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'errors'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$errors<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"c1\">\/\/ +<\/span>\r\n            <span class=\"s1\">'_token'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/signup'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">),<\/span> <span class=\"s1\">'signup'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'\u30a2\u30ab\u30a6\u30f3\u30c8\u767b\u9332'<\/span><span class=\"p\">)<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;h2&gt;<\/span>\u30a2\u30ab\u30a6\u30f3\u30c8\u767b\u9332<span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;form<\/span> <span class=\"na\">action=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/account\/register\"<\/span> <span class=\"na\">method=<\/span><span class=\"s\">\"post\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<span class=\"c\">&lt;!-- + --&gt;<\/span>\r\n    <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"hidden\"<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"_token\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_token<\/span><span class=\"p\">);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n        <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'errors'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'errors'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$errors<\/span><span class=\"p\">));<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endif<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"s1\">'account\/inputs'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'user_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">)<\/span>\r\n    <span class=\"p\">);<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;p&gt;<\/span>\r\n        <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"submit\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"\u767b\u9332\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/p&gt;<\/span>\r\n<span class=\"nt\">&lt;\/form&gt;<\/span>\r\n<span class=\"nt\">&lt;p&gt;<\/span>\r\n    <span class=\"nt\">&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/account\/signin\"<\/span><span class=\"nt\">&gt;<\/span>\u30ed\u30b0\u30a4\u30f3\u753b\u9762\u3078<span class=\"nt\">&lt;\/a&gt;<\/span>\r\n<span class=\"nt\">&lt;\/p&gt;<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/218-2.png\" alt=\"image.png\" \/><\/p>\n<h1>\u5b9e\u65bd\u4f8b\u5916\u529f\u80fd\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4f8b\u5916\u3092\u3069\u3053\u3067\u30c1\u30e3\u30c3\u30c1\u3059\u308b\u304b\u306f\u5927\u304d\u306a\u554f\u984c\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>\u30e1\u30bd\u30c3\u30c9\u3054\u3068\u306b\u4f8b\u5916\u3092\u88dc\u8db3\u3059\u308b\u3068\u4fdd\u5b88\u6027\u3084\u7dad\u6301\u306a\u3069\u8457\u3057\u304f\u975e\u52b9\u7387\u306b\u306a\u308b\u3002<br \/>\n\u4f8b\u5916\u304c\u63e1\u308a\u3064\u3076\u3055\u308c\u308b\u53ef\u80fd\u6027\u3082\u3042\u308b<\/p>\n<p>function func(){<br \/>\ntry{<\/p>\n<p>}catch(Exception $e){} \/\/&lt;- \u30b3\u30ec } perfectPHP\u3067\u306f \u5168\u3066\u306e\u30a2\u30af\u30bb\u30b9\u306f \u30d5\u30ed\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e web\/index.php \u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b web\\index.php $app = new MiniBlogApplication(true); \/\/ \u3053\u306erun \u30e1\u30bd\u30c3\u30c9\u3067\u5168\u3066\u51e6\u7406\u3055\u308c\u308b\u3002 $app-&gt;run();<\/p>\n<p>core\\Application.php<br \/>\n\/**<br \/>\n* \u3088\u3063\u3066 \u3053\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u5168\u3066\u306e \u4f8b\u5916\u3092\u88dc\u8db3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002<br \/>\n*\/<br \/>\npublic function run()<br \/>\n{<br \/>\ntry {<br \/>\n$params = $this-&gt;router-&gt;resolve($this-&gt;request-&gt;getPathInfo());<br \/>\nif ($params === false) {<br \/>\necho &#8216;\u4e0b\u8a18\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u5b58\u5728\u3044\u305f\u3057\u307e\u305b\u3093&#8217;;<br \/>\necho &#8216;<br \/>\n&#8216;;<br \/>\nexit;<br \/>\n}<br \/>\n$controller = $params[&#8216;controller&#8217;];<br \/>\n$action = $params[&#8216;action&#8217;];<br \/>\n$this-&gt;runAction($controller, $action, $params);<\/p>\n<p>} catch (\\Exception $e) {<br \/>\n\/\/tr{}catch{}\u69cb\u6587\u3067 \u3053\u3053\u3067\u5168\u3066\u306e\u4f8b\u5916\u3092\u88dc\u8db3\u3067\u304d\u308b\u3002<br \/>\n$e-&gt;getMessage();<br \/>\n}<br \/>\n\/\/ catch \u5f8c\u3082 \u3053\u3053\u306f \u5b9f\u884c \u3059\u308b\u3002<br \/>\n$this-&gt;response-&gt;send();<br \/>\n}<\/p>\n<p>perfectPHP \u3067\u306f ?\u306e\u3088\u3046\u306a\u5236\u5ea6\u8a2d\u8a08\u306b\u306a\u3063\u3066\u3044\u308b\u3002<br \/>\nHttpNotFoundException \u30af\u30e9\u30b9\u306e\u4f5c\u6210<\/p>\n<p>404\u3092\u8fd4\u3059\u3068\u304d\u306b\u30b9\u30ed\u30fc\u3055\u305b\u308b\u4f8b\u5916\u30af\u30e9\u30b9<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">HttpNotFoundException<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Exception<\/span> <span class=\"p\">{}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">UnauthorizedActionException \u30af\u30e9\u30b9\u306e\u4f5c\u6210<\/ul>\n<\/li>\n<\/ul>\n<p>\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u304c\u5931\u6557\u3057\u305f\u6642\u306b\u30b9\u30ed\u30fc\u3055\u305b\u308b\u4f8b\u5916\u30af\u30e9\u30b9<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">UnauthorizedActionException<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Exception<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Apllication \u306b \u5b9f\u88c5 \u3055\u305b\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">());<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$params<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"c1\">\/\/ echo '\u4e0b\u8a18\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u5b58\u5728\u3044\u305f\u3057\u307e\u305b\u3093';<\/span>\r\n                <span class=\"c1\">\/\/ echo '&lt;br&gt;';<\/span>\r\n                <span class=\"c1\">\/\/ exit;<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n                <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">HttpNotFoundException<\/span><span class=\"p\">(<\/span><span class=\"s1\">'No route found for '<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">());<\/span>\r\n\r\n            <span class=\"p\">}<\/span>\r\n            <span class=\"nv\">$controller<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'controller'<\/span><span class=\"p\">];<\/span>\r\n            <span class=\"nv\">$action<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'action'<\/span><span class=\"p\">];<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nc\">HttpNotFoundException<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render404Page<\/span><span class=\"p\">(<\/span><span class=\"nv\">$e<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nc\">UnauthorizedActionException<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"c1\">\/\/ list($controller, $action) = $this-&gt;getLoginAction();<\/span>\r\n            <span class=\"c1\">\/\/ $this-&gt;runAction($controller, $action);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">send<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$controller_class<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">ucfirst<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_name<\/span><span class=\"p\">)<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Controller'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$controller<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">findController<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_class<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"c1\">\/\/ echo '\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093';<\/span>\r\n            <span class=\"c1\">\/\/ exit();<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">HttpNotFoundException<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller_class<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">' controller is not found.'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"cd\">\/**\r\n     * 404\u30a8\u30e9\u30fc\u753b\u9762\u3092\u8fd4\u3059\u8a2d\u5b9a\r\n     *\r\n     * @param Exception $e\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render404Page<\/span><span class=\"p\">(<\/span><span class=\"nv\">$e<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setStatusCode<\/span><span class=\"p\">(<\/span><span class=\"mi\">404<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'Not Found'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$message<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isDebugMode<\/span><span class=\"p\">()<\/span> <span class=\"o\">?<\/span> <span class=\"nv\">$e<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getMessage<\/span><span class=\"p\">()<\/span> <span class=\"o\">:<\/span> <span class=\"s1\">'Page not found.'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"nv\">$message<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">htmlspecialchars<\/span><span class=\"p\">(<\/span><span class=\"nv\">$message<\/span><span class=\"p\">,<\/span> <span class=\"no\">ENT_QUOTES<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'UTF-8'<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setContent<\/span><span class=\"p\">(<\/span><span class=\"sh\">&lt;&lt;&lt;EOF\r\n&lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\"\r\n\"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\"&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n    &lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/&gt;\r\n    &lt;title&gt;404&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n    {$message}\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\nEOF<\/span>\r\n        <span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">controller \u30af\u30e9\u30b9\u306b \u5b9f\u88c5\u3055\u305b\u308b<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"cd\">\/**\r\n     * \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u3092 \u6587\u5b57\u5217\u3067 \u5b9f\u884c \u3055\u305b\u308b\u30e1\u30bd\u30c3\u30c9\r\n     *\r\n     * @param string $action\r\n     * @param array $params\r\n     * @return string \u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u3057\u3066\u8fd4\u3059\u30b3\u30f3\u30c6\u30f3\u30c4\r\n     *\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">action_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nv\">$action_method<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$action<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Action'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">method_exists<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action_method<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"c1\">\/\/     echo \"\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\";<\/span>\r\n            <span class=\"c1\">\/\/     exit();<\/span>\r\n<span class=\"c1\">\/\/ \u4fee\u6b63<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nv\">$action_method<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ +<\/span>\r\n     <span class=\"cd\">\/**\r\n     * 404\u30a8\u30e9\u30fc\u753b\u9762\u3092\u51fa\u529b\r\n     *\r\n     * @throws HttpNotFoundException\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">forward404<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">HttpNotFoundException<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Forwarded 404 page from '<\/span>\r\n            <span class=\"mf\">.<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">controller_name<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">action_name<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/228-0.png\" alt=\"image.png\" \/><\/p>\n<h1>\u5b9e\u65bd\u8ba4\u8bc1\u7cfb\u7edf\u3002<\/p>\n<ul class=\"post-ul\">\u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u3088\u308b\u8a8d\u8a3c\u6a5f\u80fd\u306e\u5b9f\u88c5<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">registerAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n\r\n<span class=\"c1\">\/\/+ \u8a8d\u8a3c\u6e08\u307f\u306e\u5834\u5408 index \u306b \u30ea\u30c0\u30a4\u30ec\u30af\u30c8 \u3055\u305b\u308b\u3002<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isAuthenticated<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isPost<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"s1\">'&lt;h1&gt;\u30da\u30fc\u30b8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093&lt;\/h1&gt;'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"nv\">$token<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'_token'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">checkCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/signup'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account\/signup'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"nv\">$user_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$password<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'password'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$errors<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">preg_match<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/^\\w{3,20}$\/'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u306f\u534a\u89d2\u82f1\u6570\u5b57\u304a\u3088\u3073\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u30923 \uff5e 20 \u6587\u5b57\u4ee5\u5185\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isUniqueUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u306f\u65e2\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"mi\">4<\/span> <span class=\"o\">&gt;<\/span> <span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span> <span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">30<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30d1\u30b9\u30ef\u30fc\u30c9\u306f4 \uff5e 30 \u6587\u5b57\u4ee5\u5185\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">===<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ + \u30e6\u30fc\u30b6\u30fc\u767b\u9332\u6210\u529f\u6642<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setAuthenticated<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\r\n\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'user_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'errors'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$errors<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'_token'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/signup'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">),<\/span> <span class=\"s1\">'signup'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">static<\/span> <span class=\"nv\">$sessionIdRegenerated<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u30bb\u30c3\u30b7\u30e7\u30f3ID\u3092\u518d\u751f\u6210\u3059\u308b\r\n     *\r\n     * @param boolean $destroy true\u306e\u5834\u5408\u306f\u53e4\u3044\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u7834\u68c4\u3059\u308b\r\n     * \u7406\u7531\u304c\u306a\u3044\u9650\u308a true \u3092\u5fc5\u305a\u30bb\u30c3\u30c8\u3059\u308b\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">regenerate<\/span><span class=\"p\">(<\/span><span class=\"nv\">$destroy<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"k\">self<\/span><span class=\"o\">::<\/span><span class=\"nv\">$sessionIdRegenerated<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nb\">session_regenerate_id<\/span><span class=\"p\">(<\/span><span class=\"nv\">$destroy<\/span><span class=\"p\">);<\/span>\r\n\r\n            <span class=\"k\">self<\/span><span class=\"o\">::<\/span><span class=\"nv\">$sessionIdRegenerated<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u8a8d\u8a3c\u72b6\u614b\u3092\u8a2d\u5b9a\r\n     *\r\n     * @param boolean\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">setAuthenticated<\/span><span class=\"p\">(<\/span><span class=\"nv\">$bool<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ session_regenerate_id \u3092\u3057\u3066\u304b\u3089<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">regenerate<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ session \u306b \u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3092\u8a2d\u7f6e\u3059\u308b\u306e\u304c\u57fa\u672c<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"s1\">'_authenticated'<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"n\">bool<\/span><span class=\"p\">)<\/span><span class=\"nv\">$bool<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u8a8d\u8a3c\u6e08\u307f\u304b\u5224\u5b9a\r\n     *\r\n     * @return boolean\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">isAuthenticated<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'_authenticated'<\/span><span class=\"p\">,<\/span> <span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u8a8d\u8a3c\u304c\u5fc5\u8981\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9 \u3092 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30d7\u30ed\u30d1\u30c6\u30a3 \u3067\u767b\u9332<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u3042\u3063\u305f\u5834\u5408 \u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066 \u8a8d\u8a3c\u304c\u5fc5\u8981\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u304b\u3069\u3046\u304b\u3092\u5224\u65ad<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u8a8d\u8a3c\u304c\u5fc5\u8981\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u3067\u8a8d\u8a3c\u304c\u306a\u304b\u3063\u305f\u3089\u30ed\u30b0\u30a4\u30f3\u30b5\u30a4\u30c8\u306b\u8ee2\u9001<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/  ? \u500b\u3005\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067 \u5177\u4f53\u7684\u306b \u8a8d\u8a3c\u304c\u5fc5\u8981\u306a \u30a2\u30af\u30b7\u30e7\u30f3\u540d\u3092\u767b\u9332\u3059\u308b<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$auth_actions<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/  $auth_actions = true \u306b \u5909\u66f4\u3057\u305f\u5834\u5408\u3001<\/span>\r\n<span class=\"c1\">\/\/    \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5168\u3066\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u3067\u8a8d\u8a3c\u304c\u5fc5\u8981\u3068\u306a\u308b\u3002<\/span>\r\n\r\n<span class=\"c1\">\/\/ core\\Controller.php<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">())<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">action_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nv\">$action_method<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$action<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'Action'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">method_exists<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action_method<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n<span class=\"c1\">\/\/ needsAuthentication($action)  $action\u306f\u8a8d\u8a3c\u304c\u5fc5\u8981\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u304b\u3069\u3046\u304b<\/span>\r\n<span class=\"c1\">\/\/ isAuthenticated() \u8a8d\u8a3c\u3057\u3066\u3044\u308b\u304b\u3069\u3046\u304b<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">needsAuthentication<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isAuthenticated<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u5fc5\u8981\u306a\u30b5\u30a4\u30c8 \u304b\u3064 \u672a\u8a8d\u8a3c\u306a\u3089 \u4f8b\u5916\u3092\u30fc\u3092\u30b9\u30ed\u30fc\u3059\u308b\u3002<\/span>\r\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">UnauthorizedActionException<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$content<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nv\">$action_method<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$content<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"cd\">\/**\r\n     * \u6307\u5b9a\u3055\u308c\u305f\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u8a8d\u8a3c\u6e08\u307f\u3067\u306a\u3044\u3068\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u304b\u5224\u5b9a\r\n     *\r\n     * @param string $action\r\n     * @return boolean\r\n     *\/<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">needsAuthentication<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ $auth_actions\u30d7\u30ed\u30d1\u30c6\u30a3\u304c true \u306e\u6642<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">auth_actions<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">true<\/span>\r\n<span class=\"c1\">\/\/ \u307e\u305f\u306f $auth_actions \u304c\u914d\u5217 \u304b\u3064 \u5024\u306e\u4e2d\u306b \u5b9f\u884c\u3059\u308b$action \u540d\u304c \u5b58\u5728\u3059\u308b\u6642<\/span>\r\n            <span class=\"o\">||<\/span> <span class=\"p\">(<\/span><span class=\"nb\">is_array<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">auth_actions<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">in_array<\/span><span class=\"p\">(<\/span><span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">auth_actions<\/span><span class=\"p\">))<\/span>\r\n        <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ true \u3092 \u8fd4\u3059 \/\/ \u8a8d\u8a3c\u304c\u5fc5\u8981\u3060\u3068\u5224\u5b9a\u3055\u308c\u308b\u3002<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ false \u306e\u6642 \u8a8d\u8a3c\u304c\u4e0d\u8981\u3060\u3068\u5224\u5b9a\u3055\u308c\u308b\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u672a\u8a8d\u8a3c\u3067\u4f8b\u5916\u30b9\u30ed\u30fc\u3055\u308c\u305f\u5834\u5408<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">abstract<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getLoginAction<\/span><span class=\"p\">();<\/span>\r\n    \r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">run<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">router<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">resolve<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">());<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$params<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">HttpNotFoundException<\/span><span class=\"p\">(<\/span><span class=\"s1\">'No route found for '<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPathInfo<\/span><span class=\"p\">());<\/span>\r\n            <span class=\"p\">}<\/span>\r\n\r\n            <span class=\"nv\">$controller<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'controller'<\/span><span class=\"p\">];<\/span>\r\n            <span class=\"nv\">$action<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'action'<\/span><span class=\"p\">];<\/span>\r\n\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nc\">HttpNotFoundException<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render404Page<\/span><span class=\"p\">(<\/span><span class=\"nv\">$e<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nc\">UnauthorizedActionException<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n<span class=\"c1\">\/\/ controller \u3068 action \u3092 \u53d6\u5f97\u3057\u3066<\/span>\r\n            <span class=\"k\">list<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">)<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getLoginAction<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ \u53d6\u5f97\u3057\u305f controller \u306e action \u3092\u5b9f\u884c\u3059\u308b\u3002<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">runAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$controller<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$action<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        \r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">send<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">login_action \u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u767b\u9332<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+<\/span>\r\n   <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getLoginAction<\/span><span class=\"p\">(){<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span><span class=\"s1\">'signin'<\/span><span class=\"p\">];<\/span>\r\n<span class=\"c1\">\/\/   ? \u30a2\u30ab\u30a6\u30f3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306esignin\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u767b\u9332\u3059\u308b<\/span>\r\n<span class=\"c1\">\/\/  \u672a\u8a8d\u8a3c\u3067\u4f8b\u5916\u304c\u98db\u3093\u3060\u5834\u5408\u3053\u306e\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308b\u3002<\/span>\r\n   <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/239-0.png\" alt=\"image.png\" \/><\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">authenticateAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u8a8d\u8a3c\u6e08\u307f\u306a\u3089<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isAuthenticated<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ method \u306e\u78ba\u8a8d<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isPost<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ token\u306e\u30c1\u30a7\u30c3\u30af<\/span>\r\n        <span class=\"nv\">$token<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'_token'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">checkCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/signin'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account\/signin'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$user_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$password<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'password'<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$errors<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n<span class=\"c1\">\/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u5165\u529b\u5024\u304c OK \u306a\u3089<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">===<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u8a8d\u8a3c\u30c1\u30a7\u30c3\u30af<\/span>\r\n            <span class=\"nv\">$user_repository<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ user_name \u304b\u3089 user \u3092\u53d6\u5f97\u3057\u3066<\/span>\r\n            <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$user_repository<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_name<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ user \u3068 password \u306e \u78ba\u8a8d<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$user<\/span>\r\n                <span class=\"o\">||<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'password'<\/span><span class=\"p\">]<\/span> <span class=\"o\">!==<\/span> <span class=\"nv\">$user_repository<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">hashPassword<\/span><span class=\"p\">(<\/span><span class=\"nv\">$password<\/span><span class=\"p\">))<\/span>\r\n            <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ false \u306a\u3089<\/span>\r\n                <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6ID\u304b\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e0d\u6b63\u3067\u3059'<\/span><span class=\"p\">;<\/span>\r\n            <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ true \u306a\u3089 <\/span>\r\n                <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setAuthenticated<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\r\n                <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">);<\/span>\r\n\r\n                <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account'<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"p\">}<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3 \u30a8\u30e9\u30fc \u307e\u305f\u306f \u8a8d\u8a3c\u30a8\u30e9\u30fc \u306a\u3089<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">'user_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'password'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$password<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'errors'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$errors<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">'_token'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/signin'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">),<\/span> <span class=\"s1\">'signin'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30ed\u30b0\u30a2\u30a6\u30c8\u306e\u5b9f\u88c5<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">signoutAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">clear<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setAuthenticated<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\r\n\r\n         <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account\/signin'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Account\u306eindex\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u8a8d\u8a3c\u3092\u3064\u3051\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$auth_actions<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'index'<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/245-0.png\" alt=\"image.png\" \/><\/p>\n<h1>\u5728perfectPHP\u4e2d\uff0c\u6846\u67b6\u5df2\u7ecf\u5b8c\u6210\u3002\u5e0c\u671b\u62e5\u6709\u7684\u5176\u4ed6\u57fa\u672c\u8bfe\u7a0b<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>\u6280\u8853\u66f8\u51785\u300e\u306f\u3058\u3081\u3066\u306eLaravel\u300f\u304c\u53c2\u8003\u306b\u306a\u308b<\/p>\n<p>\u30a4\u30e1\u30fc\u30b8\u30af\u30e9\u30b9<br \/>\n\u30e1\u30fc\u30eb\u30af\u30e9\u30b9<br \/>\n\u30ed\u30b0\u30af\u30e9\u30b9<br \/>\n\u306a\u3069<br \/>\nDI\u30b3\u30f3\u30c6\u30ca\u30fc\u30af\u30e9\u30b9<\/p>\n<h1>\u521b\u5efa\u72b6\u6001<\/p>\n<ul class=\"post-ul\">\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"cd\">\/**\r\n * StatusController.\r\n *\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">StatusController<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">Controller<\/span>\r\n<span class=\"p\">{<\/span>\r\n\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Repository \u306e\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"cd\">\/**\r\n * StatusRepository.\r\n *\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">StatusRepository<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">DbRepository<\/span>\r\n<span class=\"p\">{<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u521b\u5efaNavi<\/p>\n<ul class=\"post-ul\">view \u306e\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"nv\">$session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isAuthenticated<\/span><span class=\"p\">())<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;ul<\/span> <span class=\"na\">style=<\/span><span class=\"s\">\"display:flex;column-gap:30px\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;li&gt;&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span><span class=\"nt\">&gt;<\/span>\u30db\u30fc\u30e0<span class=\"nt\">&lt;\/a&gt;&lt;\/li&gt;<\/span>\r\n    <span class=\"nt\">&lt;li&gt;&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/account\"<\/span><span class=\"nt\">&gt;<\/span>\u30a2\u30ab\u30a6\u30f3\u30c8<span class=\"nt\">&lt;\/a&gt;&lt;\/li&gt;<\/span>\r\n    <span class=\"nt\">&lt;li&gt;&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/users\"<\/span><span class=\"nt\">&gt;<\/span>\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7<span class=\"nt\">&lt;\/a&gt;&lt;\/li&gt;<\/span>\r\n<span class=\"nt\">&lt;\/ul&gt;<\/span>\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endif<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">navi.php \u306e\u8aad\u307f\u8fbc\u307f<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"nt\">&lt;head&gt;<\/span>\r\n    <span class=\"nt\">&lt;title&gt;<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$title<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/title&gt;<\/span>\r\n<span class=\"nt\">&lt;\/head&gt;<\/span>\r\n<span class=\"nt\">&lt;body&gt;<\/span>\r\n\r\n<span class=\"c\">&lt;!-- + --&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'navi'<\/span><span class=\"p\">)<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$_content<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;\/body&gt;<\/span>\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">view \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306b session\u30af\u30e9\u30b9\u3092\u6e21\u3059\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$variables<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(),<\/span> <span class=\"nv\">$template<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$layout<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'layout'<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"nv\">$defaults<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"s1\">'request'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s1\">'base_url'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getBaseUrl<\/span><span class=\"p\">(),<\/span>\r\n<span class=\"c1\">\/\/ \u30a2\u30f3\u30b3\u30e1\u30f3\u30c8<\/span>\r\n        <span class=\"s1\">'session'<\/span>  <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">);<\/span>\r\n    <span class=\"nv\">$view<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">View<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">application<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getViewDir<\/span><span class=\"p\">(),<\/span> <span class=\"nv\">$defaults<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$template<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$template<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">action_name<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"nv\">$path<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">controller_name<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$template<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"k\">return<\/span> <span class=\"nv\">$view<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$variables<\/span><span class=\"p\">,<\/span><span class=\"nv\">$layout<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/261-0.png\" alt=\"image.png\" \/><\/p>\n<h2>\u521b\u5efa\u7528\u6237\u5217\u8868<\/p>\n<ul class=\"post-ul\">root \u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">registerRoutes<\/span><span class=\"p\">()<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"s1\">'\/'<\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'index'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"s1\">'\/status\/post'<\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'post'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"c1\">\/\/ :user_name &lt;= \u52d5\u7684\u306b\u5909\u66f4\u3057\u305f\u3044\u30d1\u30b9\u306f ':' \u5148\u982d\u306bcolon\u3092\u3064\u3051\u308b<\/span>\r\n        <span class=\"s1\">'\/user\/:user_name'<\/span>\r\n        <span class=\"c1\">\/\/ \u4e0a\u306f '\/user\/(?p&lt;user_name&gt;[^\/]+)' \u306b\u306a\u308b\u3002 <\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'user'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"s1\">'\/user\/:user_name\/status\/:id'<\/span>\r\n        <span class=\"c1\">\/\/ \u4e0a\u306f '\/user\/(?p&lt;user_name&gt;[^\/]+)\/status\/(?p&lt;id&gt;[^\/]+)' \u306b\u306a\u308b\u3002<\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'status'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'show'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"s1\">'\/account'<\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'index'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"s1\">'\/account\/:action'<\/span>\r\n        <span class=\"c1\">\/\/ \u4e0a\u306f '\/account\/(?p&lt;action&gt;[^\/]+)' \u306b\u306a\u308b<\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"s1\">'\/follow'<\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'follow'<\/span><span class=\"p\">),<\/span>\r\n<span class=\"c1\">\/\/+<\/span>\r\n        <span class=\"s1\">'\/users'<\/span>\r\n        <span class=\"o\">=&gt;<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'controller'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'account'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'action'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'list'<\/span><span class=\"p\">),<\/span>\r\n    <span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">view \u306e \u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7'<\/span><span class=\"p\">)<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;h2&gt;<\/span>\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7<span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;ul&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">foreach<\/span><span class=\"p\">(<\/span><span class=\"nv\">$users<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">)<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"nt\">&lt;li&gt;<\/span>\r\n        <span class=\"nt\">&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/user\/<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span><span class=\"nt\">&gt;<\/span>\r\n        <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]<\/span> <span class=\"cp\">?&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/a&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/li&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endforeach<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;\/ul&gt;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">action \u30e1\u30bd\u30c3\u30c9\u306e\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">listAction<\/span><span class=\"p\">(){<\/span>\r\n        <span class=\"nv\">$users<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">all<\/span><span class=\"p\">();<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">([<\/span>\r\n            <span class=\"s1\">'users'<\/span><span class=\"o\">=&gt;<\/span><span class=\"nv\">$users<\/span>\r\n        <span class=\"p\">]);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">sql \u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">all<\/span><span class=\"p\">(){<\/span>\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'SELECT * FROM users'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/271-0.png\" alt=\"image.png\" \/><\/p>\n<h2>\u521b\u5efa\u4e3b\u9875<\/p>\n<ul class=\"post-ul\">view \u306e\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'\u30db\u30fc\u30e0'<\/span><span class=\"p\">)<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;h2&gt;<\/span>\u30db\u30fc\u30e0<span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;form<\/span> <span class=\"na\">action=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/status\/post\"<\/span> <span class=\"na\">method=<\/span><span class=\"s\">\"post\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"hidden\"<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"_token\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_token<\/span><span class=\"p\">);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'errors'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'errors'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$errors<\/span><span class=\"p\">))<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endif<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;textarea<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"body\"<\/span> <span class=\"na\">rows=<\/span><span class=\"s\">\"2\"<\/span> <span class=\"na\">cols=<\/span><span class=\"s\">\"60\"<\/span><span class=\"nt\">&gt;<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$body<\/span><span class=\"p\">);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/textarea&gt;<\/span>\r\n    <span class=\"nt\">&lt;p&gt;<\/span>\r\n        <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"submit\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"\u767a\u8a00\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/p&gt;<\/span>\r\n<span class=\"nt\">&lt;\/form&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;div<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"statuses\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$statuses<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$status<\/span><span class=\"p\">)<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status\/status'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$status<\/span><span class=\"p\">));<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endforeach<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"status\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;div<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"status_content\"<\/span><span class=\"nt\">&gt;<\/span>\r\n        <span class=\"nt\">&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/user\/<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$status<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span><span class=\"nt\">&gt;<\/span>\r\n            <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$status<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]);<\/span> <span class=\"cp\">?&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/a&gt;<\/span>\r\n        <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$status<\/span><span class=\"p\">[<\/span><span class=\"s1\">'body'<\/span><span class=\"p\">]);<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/div&gt;<\/span>\r\n    <span class=\"nt\">&lt;div&gt;<\/span>\r\n        <span class=\"nt\">&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/user\/<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$status<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]);<\/span>\r\n        <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/status\/<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$status<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span><span class=\"nt\">&gt;<\/span>\r\n            <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$status<\/span><span class=\"p\">[<\/span><span class=\"s1\">'created_at'<\/span><span class=\"p\">]);<\/span> <span class=\"cp\">?&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/a&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">indexAction \u306e \u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">protected<\/span> <span class=\"nv\">$auth_actions<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'index'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'post'<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">indexAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/+ user \u3068 follower \u306e \u30b3\u30e1\u30f3\u30c8 \u3092 \u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$statuses<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Status'<\/span><span class=\"p\">)<\/span>\r\n            <span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAllPersonalArchivesByUserId<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]);<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n                <span class=\"s1\">'statuses'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$statuses<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'body'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">''<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'_token'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status\/post'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"p\">)<\/span>\r\n        <span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">sql \u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/+ user \u3068 follower \u306e \u30b3\u30e1\u30f3\u30c8 \u3092 \u53d6\u5f97<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">fetchAllPersonalArchivesByUserId<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_id<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/perfectphp \u306e sql<\/span>\r\n        <span class=\"c1\">\/\/ $sql = \"<\/span>\r\n        <span class=\"c1\">\/\/     SELECT a.*, u.user_name<\/span>\r\n        <span class=\"c1\">\/\/     FROM status a<\/span>\r\n        <span class=\"c1\">\/\/         LEFT JOIN users u ON a.user_id = u.id<\/span>\r\n        <span class=\"c1\">\/\/         LEFT JOIN following f ON f.following_id = a.user_id<\/span>\r\n        <span class=\"c1\">\/\/             AND f.user_id = :user_id<\/span>\r\n        <span class=\"c1\">\/\/         WHERE f.user_id = :user_id OR u.id = :user_id<\/span>\r\n        <span class=\"c1\">\/\/         ORDER BY a.created_at DESC<\/span>\r\n        <span class=\"c1\">\/\/ \";<\/span>\r\n\r\n<span class=\"c1\">\/\/ AND f.user_id = :user_id  \u3053\u308c\u51e6\u7406\u304c\u91cd\u8907\u3057\u3066\u3044\u308b<\/span>\r\n<span class=\"c1\">\/\/ WHERE f.user_id = :user_id OR u.id = :user_id <\/span>\r\n<span class=\"c1\">\/\/        ? \u3053\u3053\u3067\u7d5e\u3063\u3066\u3044\u308b\u306e\u3067\u4e0d\u8981\u3068\u3044\u3053\u3068\u3067\u306f\u306a\u3044\u3002<\/span>\r\n\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\n            SELECT a.*, u.user_name\r\n            FROM status a\r\n                LEFT JOIN users u ON a.user_id = u.id\r\n                LEFT JOIN following f ON f.following_id = a.user_id\r\n                WHERE f.user_id = :user_id OR u.id = :user_id\r\n                ORDER BY a.created_at DESC\r\n        \"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">':user_id'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_id<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/280-8.png\" alt=\"image.png\" \/><\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/281-1.png\" alt=\"image.png\" \/><\/p>\n<h3>\u5728\u4e2d\u56fd,\u201c\u65ec\u201d\u610f\u4e3a\u4e00\u4e24\u4e2a\u661f\u671f\u3002\u5728PDO\u4e2d\uff0c\u201c\u9b3c\u95e8\u201d\u662f\u6307\u90aa\u95e8\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"SELECT following_id FROM following WHERE user_id = :user_id\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"nv\">$ids<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">':user_id'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_id<\/span><span class=\"p\">));<\/span>\r\n<span class=\"nb\">array_push<\/span><span class=\"p\">(<\/span><span class=\"nv\">$ids<\/span><span class=\"p\">,[<\/span><span class=\"s1\">'following_id'<\/span><span class=\"o\">=&gt;<\/span><span class=\"nv\">$user_id<\/span><span class=\"p\">]);<\/span>\r\n<span class=\"nv\">$ids<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">implode<\/span><span class=\"p\">(<\/span><span class=\"s1\">','<\/span><span class=\"p\">,<\/span><span class=\"nb\">array_column<\/span><span class=\"p\">(<\/span><span class=\"nv\">$ids<\/span><span class=\"p\">,<\/span><span class=\"s1\">'following_id'<\/span><span class=\"p\">));<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u3053\u308c\u306f\u3046\u307e\u304f\u3044\u304b\u306a\u3044<\/span>\r\n<span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\nSELECT a.*, u.user_name\r\nFROM status a\r\n    LEFT JOIN users u ON a.user_id = u.id\r\n    WHERE a.user_id IN (:ids)\r\n    ORDER BY a.created_at DESC\r\n\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'ids'<\/span><span class=\"o\">=&gt;<\/span><span class=\"nv\">$ids<\/span><span class=\"p\">]);<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u3053\u3046\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/span>\r\n<span class=\"c1\">\/\/ \u540d\u524d\u4ed8\u304d\u30d7\u30ec\u30b9\u30db\u30eb\u30c0\u30fc\u304c\u3064\u304b\u3048\u306a\u3044<\/span>\r\n<span class=\"c1\">\/\/ \u8981\u7d20\u306e\u6570\u3060\u3051 \uff1f \u304c\u5fc5\u8981\u306b\u306a\u308b ('\u25c7')\u309e<\/span>\r\n<span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\nSELECT a.*, u.user_name\r\nFROM status a\r\n    LEFT JOIN users u ON a.user_id = u.id\r\n    WHERE a.user_id IN (?,?,?)\r\n    ORDER BY a.created_at DESC\r\n\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"p\">[<\/span><span class=\"mi\">3<\/span><span class=\"p\">,<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span><span class=\"mi\">1<\/span><span class=\"p\">]);<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u3060\u304b\u3089 left join \u3084 inner join \u304b\u3089 \u30c7\u30fc\u30bf\u3092\u4f5c\u6210\u3092\u512a\u5148\u3057\u305f\u307b\u3046\u304c\u3044\u3044\u3002<\/ul>\n<h2>\u53d1\u8868\u8bc4\u8bba<\/p>\n<ul class=\"post-ul\">action \u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">postAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30e1\u30bd\u30c3\u30c9\u306e\u30c1\u30a7\u30c3\u30af<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isPost<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ csrf \u306e \u30c1\u30a7\u30c3\u30af<\/span>\r\n        <span class=\"nv\">$token<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'_token'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">checkCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status\/post'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"c1\">\/\/ return $this-&gt;redirect('\/');<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u5165\u529b\u5024\u3092\u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$body<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'body'<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/span>\r\n        <span class=\"nv\">$errors<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$body<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u3072\u3068\u3053\u3068\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">mb_strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$body<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">200<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$errors<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'\u3072\u3068\u3053\u3068\u306f200 \u6587\u5b57\u4ee5\u5185\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u304c\u306a\u3044\u306a\u3089<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span><span class=\"p\">)<\/span> <span class=\"o\">===<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n\r\n            <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u6295\u7a3f\u3057\u3066<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Status'<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">],<\/span> <span class=\"nv\">$body<\/span><span class=\"p\">);<\/span>\r\n<span class=\"c1\">\/\/ \u30db\u30fc\u30e0\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8 \u591a\u91cd\u6295\u7a3f\u9632\u6b62\u306e\u305f\u3081<\/span>\r\n            <span class=\"c1\">\/\/ return $this-&gt;redirect('\/');<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u304c\u5b58\u5728\u3057\u305f\u3089<\/span>\r\n        <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"nv\">$statuses<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Status'<\/span><span class=\"p\">)<\/span>\r\n            <span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAllPersonalArchivesByUserId<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]);<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n                <span class=\"s1\">'errors'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$errors<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'body'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$body<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'statuses'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$statuses<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'_token'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status\/post'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"p\">),<\/span> <span class=\"s1\">'index'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">sql \u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_id<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$body<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$now<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">DateTime<\/span><span class=\"p\">();<\/span>\r\n\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\n            INSERT INTO status(user_id, body, created_at)\r\n                VALUES(:user_id, :body, :created_at)\r\n        \"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nv\">$stmt<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">execute<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">':user_id'<\/span>    <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_id<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">':body'<\/span>       <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$body<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">':created_at'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$now<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">format<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Y-m-d H:i:s'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/290-0.png\" alt=\"image.png\" \/><\/p>\n<h2>\u663e\u793a\u6295\u7a3f\u7ec6\u8282<\/p>\n<ul class=\"post-ul\">view \u306e\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$status<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">])<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status\/status'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$status<\/span><span class=\"p\">));<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">showAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$status<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Status'<\/span><span class=\"p\">)<\/span>\r\n            <span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByIdAndUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">],<\/span> <span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]);<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$status<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$status<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">sql \u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ \u7279\u5b9a\u306e\u30b3\u30e1\u30f3\u30c8\u306e\u53d6\u5f97<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">fetchByIdAndUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$id<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ stutas \u306e id \u3067 \u7d5e\u3063\u3066\u3044\u308b\u306e\u306b\u3001\u306a\u3093\u3067 \u3055\u3089\u306b user_name \u3067\u7d5e\u308b\u5fc5\u8981\u306f\u306a\u3044\u3002<\/span>\r\n<span class=\"c1\">\/\/ \u8a02\u6b63\u306e\u4f9d\u983c\u4e2d<\/span>\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\n            SELECT a.* , u.user_name\r\n                FROM status a\r\n                    LEFT JOIN users u ON u.id = a.user_id\r\n                WHERE a.id = :id\r\n                    AND u.user_name = :user_name\r\n        \"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">':id'<\/span>        <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$id<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">':user_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_name<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u5c55\u793a\u7528\u6237\u7684\u8bc4\u8bba\u5217\u8868<\/p>\n<ul class=\"post-ul\">view \u306e\u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setLayoutVar<\/span><span class=\"p\">(<\/span><span class=\"s1\">'title'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">])<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;h2&gt;<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nb\">is_null<\/span><span class=\"p\">(<\/span><span class=\"nv\">$following<\/span><span class=\"p\">))<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$following<\/span><span class=\"p\">)<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;p&gt;<\/span>\u30d5\u30a9\u30ed\u30fc\u3057\u3066\u3044\u307e\u3059<span class=\"nt\">&lt;\/p&gt;<\/span>\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"k\">else<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;form<\/span> <span class=\"na\">action=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$base_url<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\/follow\"<\/span> <span class=\"na\">method=<\/span><span class=\"s\">\"post\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"hidden\"<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"_token\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$_token<\/span><span class=\"p\">);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n    <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"hidden\"<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"following_name\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"<\/span><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">escape<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]);<\/span> <span class=\"cp\">?&gt;<\/span><span class=\"s\">\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"submit\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"\u30d5\u30a9\u30ed\u30fc\u3059\u308b\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n<span class=\"nt\">&lt;\/form&gt;<\/span>\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endif<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endif<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;div<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"statuses\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$statuses<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$status<\/span><span class=\"p\">)<\/span><span class=\"o\">:<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">echo<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status\/status'<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">'status'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$status<\/span><span class=\"p\">));<\/span> <span class=\"cp\">?&gt;<\/span>\r\n    <span class=\"cp\">&lt;?php<\/span> <span class=\"k\">endforeach<\/span><span class=\"p\">;<\/span> <span class=\"cp\">?&gt;<\/span>\r\n<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">userAction<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n<span class=\"c1\">\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span>\r\n            <span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$params<\/span><span class=\"p\">[<\/span><span class=\"s1\">'user_name'<\/span><span class=\"p\">]);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$user<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n<span class=\"c1\">\/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30b3\u30e1\u30f3\u30c8\u4e00\u89a7\u3092\u53d6\u5f97<\/span>\r\n        <span class=\"nv\">$statuses<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Status'<\/span><span class=\"p\">)<\/span>\r\n            <span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAllByUserId<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]);<\/span>\r\n\r\n<span class=\"c1\">\/\/ auth \u304c \u305d\u306e user \u3092 follow \u3057\u3066\u3044\u308b\u304b\u306e\u78ba\u8a8d<\/span>\r\n        <span class=\"nv\">$following<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"c1\">\/\/ \u8a8d\u8a3c\u3057\u3066\u3044\u308b\u304b<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isAuthenticated<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"c1\">\/\/ auth != user \u304b<\/span>\r\n            <span class=\"nv\">$my<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$my<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]<\/span> <span class=\"o\">!==<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">])<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"c1\">\/\/ true \u306a\u3089<\/span>\r\n  <span class=\"c1\">\/\/ \u305d\u306e\u30e6\u30fc\u30b6\u30fc\u3092 follow \u3057\u3066\u3044\u308b\u304b\u3044\u306a\u3044\u304b\u306e\u53d6\u5f97<\/span>\r\n                <span class=\"nv\">$following<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Following'<\/span><span class=\"p\">)<\/span>\r\n                    <span class=\"o\">-&gt;<\/span><span class=\"nf\">isFollowing<\/span><span class=\"p\">(<\/span><span class=\"nv\">$my<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">],<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]);<\/span>\r\n            <span class=\"p\">}<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n                <span class=\"s1\">'user'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'statuses'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$statuses<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'following'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$following<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s1\">'_token'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">generateCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/follow'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"p\">)<\/span>\r\n        <span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">sql \u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ + \u7279\u5b9a\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30b3\u30e1\u30f3\u30c8\u4e00\u89a7\u306e\u53d6\u5f97<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">fetchAllByUserId<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_id<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\n            SELECT a.*, u.user_name\r\n                FROM status a\r\n                    LEFT JOIN users u ON a.user_id = u.id\r\n                WHERE u.id = :user_id\r\n                ORDER BY a.created_at DESC\r\n        \"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchAll<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"s1\">':user_id'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_id<\/span><span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">FollowingRepository \u306e \u4f5c\u6210<\/ul>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"c1\">\/\/ +<\/span>\r\n\r\n<span class=\"cd\">\/**\r\n * StatusRepository.\r\n *\r\n * @author Katsuhiro Ogawa &lt;fivestar@nequal.jp&gt;\r\n *\/<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">FollowingRepository<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">DbRepository<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">isFollowing<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_id<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$following_id<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"\r\n            SELECT COUNT(user_id) as count\r\n                FROM following\r\n                WHERE user_id = :user_id\r\n                    AND following_id = :following_id\r\n        \"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nv\">$row<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">':user_id'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_id<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">':following_id'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$following_id<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$row<\/span><span class=\"p\">[<\/span><span class=\"s1\">'count'<\/span><span class=\"p\">]<\/span> <span class=\"o\">!==<\/span> <span class=\"s1\">'0'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/307-0.png\" alt=\"image.png\" \/><\/p>\n<h2>\u8ffd\u8e2a\u7528\u6237<\/p>\n<ul class=\"post-ul\">action\u30e1\u30bd\u30c3\u30c9\u306e\u3064<\/ul>\n<pre class=\"post-pre\"><code>    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">followAction<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isPost<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$following_name<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'following_name'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$following_name<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$token<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"s1\">'_token'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">checkCsrfToken<\/span><span class=\"p\">(<\/span><span class=\"s1\">'account\/follow'<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$token<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/user\/'<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$following_name<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$follow_user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'User'<\/span><span class=\"p\">)<\/span>\r\n            <span class=\"o\">-&gt;<\/span><span class=\"nf\">fetchByUserName<\/span><span class=\"p\">(<\/span><span class=\"nv\">$following_name<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$follow_user<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">forward404<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"nv\">$user<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">session<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'user'<\/span><span class=\"p\">);<\/span>\r\n\r\n        <span class=\"nv\">$following_repository<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">db_manager<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Following'<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]<\/span> <span class=\"o\">!==<\/span> <span class=\"nv\">$follow_user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]<\/span> \r\n            <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"nv\">$following_repository<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">isFollowing<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">],<\/span> <span class=\"nv\">$follow_user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">])<\/span>\r\n        <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nv\">$following_repository<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">],<\/span> <span class=\"nv\">$follow_user<\/span><span class=\"p\">[<\/span><span class=\"s1\">'id'<\/span><span class=\"p\">]);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">redirect<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/account'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">sql \u30e1\u30bd\u30c3\u30c9\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ +<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">insert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$user_id<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$following_id<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nv\">$sql<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"INSERT INTO following VALUES(:user_id, :following_id)\"<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"nv\">$stmt<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">execute<\/span><span class=\"p\">(<\/span><span class=\"nv\">$sql<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"s1\">':user_id'<\/span>      <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$user_id<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"s1\">':following_id'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$following_id<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">));<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/313-0.png\" alt=\"image.png\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6f14\u793a\u7f51\u7ad9\u4f46\u5b83\u6ca1\u6709\u5de5\u4f5c\u3002 t\u0101 .) \u7814\u53d1\u73af\u5883 \u5c06Web\u76ee\u5f55\u8fdb\u884c\u91cd\u5199\/MiniBlog\/web\/\u30d5\u30a9\u30eb\u30c0\u3092 \u4e8b\u5b9f [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[227],"class_list":["post-30545","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-227"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u5173\u4e8e\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5b8c\u7f8e\u7684php\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\" \/>\n<meta property=\"og:description\" content=\"\u5173\u4e8e\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5b8c\u7f8e\u7684php\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-17T21:09:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-12T11:41:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/3-2.png\" \/>\n<meta name=\"author\" content=\"\u65b0, \u97f5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u65b0, \u97f5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/\",\"name\":\"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-09-17T21:09:40+00:00\",\"dateModified\":\"2025-08-12T11:41:52+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\"},\"description\":\"\u5173\u4e8e\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\u7684\u6280\u672f\u6587\u7ae0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\",\"name\":\"\u65b0, \u97f5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"caption\":\"\u65b0, \u97f5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud","description":"\u5173\u4e8e\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\u7684\u6280\u672f\u6587\u7ae0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5b8c\u7f8e\u7684php\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f","og_description":"\u5173\u4e8e\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\u7684\u6280\u672f\u6587\u7ae0","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5b8c\u7f8e\u7684php\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-09-17T21:09:40+00:00","article_modified_time":"2025-08-12T11:41:52+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d078337434c4406bde2c3\/3-2.png"}],"author":"\u65b0, \u97f5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u65b0, \u97f5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/","name":"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-09-17T21:09:40+00:00","dateModified":"2025-08-12T11:41:52+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9"},"description":"\u5173\u4e8e\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f\u7684\u6280\u672f\u6587\u7ae0","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5b8c\u7f8e\u7684PHP\u5fae\u535a\u5e94\u7528\u7a0b\u5e8f"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9","name":"\u65b0, \u97f5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","caption":"\u65b0, \u97f5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%ae%8c%e7%be%8e%e7%9a%84php%e5%be%ae%e5%8d%9a%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/30545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=30545"}],"version-history":[{"count":3,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/30545\/revisions"}],"predecessor-version":[{"id":111764,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/30545\/revisions\/111764"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=30545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=30545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=30545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}