{"id":414,"date":"2026-09-25T09:57:14","date_gmt":"2026-09-25T07:57:14","guid":{"rendered":"https:\/\/airasystems.io\/insights\/?p=414"},"modified":"2026-09-25T09:58:03","modified_gmt":"2026-09-25T07:58:03","slug":"laraveli-parandsusteemi-uuendamine","status":"publish","type":"post","link":"https:\/\/airasystems.io\/insights\/et\/laraveli-parandsusteemi-uuendamine\/","title":{"rendered":"Laraveli p\u00e4rands\u00fcsteemi uuendamine: kus algavad t\u00f5elised probleemid"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">&#8220;Uuendame Laraveli&#8221; k\u00f5lab nagu lihtne \u00fclesanne. Kuni avate <code>composer.json<\/code> faili. P\u00e4randprojekt v\u00f5ib t\u00f6\u00f6tada suurep\u00e4raselt Laravel 7 v\u00f5i 8 peal, kuid uuendamine kaasaegsele versioonile v\u00f5ib vallandada terve ahela \u00fchilduvusprobleeme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Siin on m\u00f5ned k\u00f5ige levinumad Laraveli p\u00e4rands\u00fcsteemi uuendamine seotud probleemid.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">1. Vana projekti poolt kasutatav pakett ei \u00fchildu uue Laraveliga<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">See on ilmselt k\u00f5ige masendavam stsenaarium. Rakendus kasutab paketti, mis t\u00f6\u00f6tas Laravel 8 peal t\u00e4iesti probleemideta:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel 8\n\u2514\u2500\u2500 package-x 2.4\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9\">Laravel<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u2514\u2500\u2500 <\/span><span style=\"color: #81A1C1\">package-<\/span><span style=\"color: #D8DEE9\">x<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2.4<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Uuendate versioonile Laravel 11:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel 11\n\u2514\u2500\u2500 package-x 2.4 \u274c\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9\">Laravel<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">11<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u2514\u2500\u2500 <\/span><span style=\"color: #81A1C1\">package-<\/span><span style=\"color: #D8DEE9\">x<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2.4<\/span><span style=\"color: #D8DEE9FF\"> \u274c<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Composer keeldub seda installimast, kuna pakett n\u00f5uab <code>illuminate\/*<\/code> vanemat versiooni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00fc\u00fcd peate valima:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>leida uuem versioon; <\/li>\n\n\n\n<li>asendada pakett; <\/li>\n\n\n\n<li>teha sellest <em>fork<\/em> (haru) ja seda ise hooldada; <\/li>\n\n\n\n<li>v\u00f5i l\u00fckata Laraveli uuendus edasi.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ja m\u00f5nikord on pakett h\u00fcljatud, mist\u00f5ttu puudub otsene uuendamisv\u00f5imalus t\u00e4ielikult.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">2. Composeri s\u00f5ltuvuskonfliktid Laraveli p\u00e4rands\u00fcsteemi uuendamisel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00dcks uuendus v\u00f5ib tuua p\u00e4evavalgele konflikte mitme taseme s\u00fcgavusel.<br>N\u00e4iteks:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel 11\n   \u2193\nrequires Symfony 7\n   \u2193\nPackage A requires Symfony 6\n   \u2193\nPackage B requires Package A\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #9CDCFE\">Laravel<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">11<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">requires<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Symfony<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">Package<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">A<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">requires<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Symfony<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">Package<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">B<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">requires<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Package<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">A<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Composer ei suuda k\u00f5iki neid n\u00f5udeid t\u00e4ita. Masendav on see, et probleemi tekitav pakett ei pruugi olla midagi, mida te otseselt kasutate. See v\u00f5ib olla m\u00f5ne teise s\u00f5ltuvuse s\u00f5ltuvus. Just siin muutubki lihtne raamistiku uuendamine s\u00f5ltuvuste arheoloogiaks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">3. <code>composer.lock<\/code> v\u00f5ib s\u00e4ilitada vana s\u00f5ltuvuste puu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Te uuendate faili <code>composer.json<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\"laravel\/framework\": \"^11.0\"\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #CE9178\">&quot;laravel\/framework&quot;<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #CE9178\">&quot;^11.0&quot;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Kuid Composer teatab endiselt konfliktidest, sest <code>composer.lock<\/code> sisaldab vana rakenduse versioone. Lukustusfail esindab eelnevalt lahendatud s\u00f5ltuvuste puud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seega peate m\u00f5nikord uuendama mitte ainult Laraveli, vaid hoolikalt valitud r\u00fchma seotud s\u00f5ltuvusi \u2014 ilma pimesi <code>composer.lock<\/code> faili kustutamata ja parimat lootes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">4. Uus Laraveli versioon n\u00f5uab uuemat PHP-d<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4iteks:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vana rakendus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Laravel 8<br>PHP 7.4<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">muutub j\u00e4rgmiseks:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Laravel 11<br>PHP >= 8.2<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kuid PHP uuendamine v\u00f5ib paljastada veel \u00fche kihi probleeme. M\u00f5ned vanad paketid ei pruugi enam PHP 8.2 toetada. Seega muutub s\u00f5ltuvuste ahel selliseks:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel upgrade\n      \u2193\nPHP upgrade\n      \u2193\nold packages become incompatible\n      \u2193\npackages need upgrading\/replacing\n      \u2193\napplication code needs changes\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Laravel upgrade<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">PHP upgrade<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">old packages become incompatible<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">packages need upgrading\/replacing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">application code needs changes<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">5. Paketil on uus versioon \u2014 kuid selle API on muutunud<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Seda on lihtne alahinnata. Leiate \u00fchilduva versiooni ja Composer installib selle edukalt. Suurep\u00e4rane.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kuid vana kood:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>SomePackage::process($data);\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">SomePackage::process($data);<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">v\u00f5ib n\u00fc\u00fcd n\u00f5uda:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>SomePackage::process($data, $options);\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">SomePackage::process($data, $options);<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">v\u00f5i on meetod \u00fcmber nimetatud, eemaldatud v\u00f5i selle tagastust\u00fc\u00fcp on muutunud. Seega: Composeri edu \u2260 rakenduse edu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">6. Symfony uuendused v\u00f5ivad m\u00f5jutada Laraveli rakendusi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Laravel toetub tugevalt Symfony komponentidele. Kui Laravel viiakse \u00fcle uuematele Symfony versioonidele, v\u00f5ivad vanema Symfony k\u00e4itumise p\u00f5hjal loodud kohandatud kood v\u00f5i paketid lakata t\u00f6\u00f6tamast. See on eriti aktuaalne projektide puhul, kus on kasutusel erilahendustena loodud integratsioonid, HTTP-t\u00f6\u00f6tlus, konsoolik\u00e4sud, e-posti, s\u00fcndmuste (<em>events<\/em>) v\u00f5i failis\u00fcsteemi funktsionaalsus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">7. Flysystemi uuendused v\u00f5ivad rikkuda failis\u00fcsteemi integratsioone<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hea n\u00e4ide on \u00fcleminek Flysystem 3-le. Vanas rakenduses v\u00f5ib olla:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel\n\u2514\u2500\u2500 Flysystem 1\/2\n    \u2514\u2500\u2500 custom storage adapter\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Laravel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\u2514\u2500\u2500 Flysystem <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">\/<\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    \u2514\u2500\u2500 custom storage adapter<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e4rast uuendamist:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel\n\u2514\u2500\u2500 Flysystem 3\n    \u2514\u2500\u2500 old adapter \u274c\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Laravel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\u2514\u2500\u2500 Flysystem <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    \u2514\u2500\u2500 old adapter \u274c<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Laraveli rakendus ise v\u00f5ib olla k\u00fcll \u00fchilduv, kuid vana Flysystemi API \u00fcmber ehitatud kohandatud adapter v\u00f5i pakett ei pruugi seda olla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">8. Autentimispakettidel on oma uuendamisteekonnad<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Laravel Passport, Sanctum, Socialite ja teised \u00f6kos\u00fcsteemi paketid ei liigu tingimata Laraveliga samas tempos. Tulemuseks v\u00f5ib olla:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel \u2192 new version\nPassport \u2192 old version\n      \u2193\nincompatible dependencies\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Laravel \u2192 new version<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Passport \u2192 old version<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      \u2193<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">incompatible dependencies<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">v\u00f5i v\u00f5ite uuendada Passporti ja siis avastada, et autentimisvood, konfiguratsioon v\u00f5i andmebaasi migratsioonid vajavad muudatusi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">9. Pakettide migratsioonid v\u00f5ivad muutuda<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">See on veel \u00fcks salakaval probleem. Pakett v\u00f5ib olla k\u00fcll \u00f5igesti installitud, kuid selle andmebaasi seadistus v\u00f5ib uuemas versioonis t\u00f6\u00f6tada teisiti. Uuendate paketti, juurutate rakenduse ja avastate \u00e4kki, et oodatud tabeleid, veergusid v\u00f5i indekseid polegi olemas. Seep\u00e4rast tulebki pakettide uuendusi k\u00e4sitleda kui rakenduse muudatusi \u2014 mitte lihtsalt kui Composeri muudatusi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-x-large-font-size\">10. PHPUnit ja testide komplekt v\u00f5ivad muutuda omaette migratsiooniks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Toodangu kood v\u00f5ib endiselt tunduda korras. Siis aga k\u00e4ivitate:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>php artisan test\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">php artisan test<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">ja pool testikomplektist eba\u00f5nnestub. Miks? Sest Laraveli toetatud PHPUnit-i versioonid aja jooksul muutuvad ja PHPUnit ise eemaldab aegunud API-d. Seega v\u00f5ib Laraveli uuendamine t\u00e4hendada ka j\u00e4rgmiste komponentide uuendamist:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Laravel\n+\nPHP\n+\nComposer packages\n+\nPHPUnit\n+\ntest code\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Laravel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">PHP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Composer packages<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">PHPUnit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">test code<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">11. Konfiguratsioon ja rakenduse struktuur v\u00f5ivad muutuda<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uuem Laraveli versioon v\u00f5ib tuua kaasa teistsuguse vaikestruktuuri v\u00f5i konfiguratsioonik\u00e4sitluse. Tekib kiusatus v\u00f5tta v\u00e4rske Laraveli installatsioon ja kopeerida k\u00f5ik vanasse projekti. See on sageli halb m\u00f5te. P\u00e4randrakendusel on aastatepikkune kohandatud konfiguratsioon, vahevara (<em>middleware<\/em>), teenusepakkujad (<em>service providers<\/em>) ja integratsioonid. Eesm\u00e4rk ei ole muuta vana rakendust v\u00e4rske Laraveli installatsiooni sarnaseks. Eesm\u00e4rk on viia olemasolev rakendus turvaliselt \u00fcle uuele raamistiku versioonile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ja just see teebki Laraveli uuendamise keeruliseks. Probleem on harva k\u00fcsimuses:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;Kuidas installida Laravel 11?&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">T\u00f5eline probleem on hoopis: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;Millised osad sellest 7-aastasest s\u00f5ltuvuste puust saavad tegelikult Laravel 11-le \u00fcle minna, ilma et see rakendust katki teeks?&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enne uuendamist tahaksin teada:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Millised paketid takistavad uuendamist?<\/li>\n\n\n\n<li>Millised paketid on h\u00fcljatud?<\/li>\n\n\n\n<li>Millised paketid vajavad asendamist?<\/li>\n\n\n\n<li>Milline PHP versioon on vajalik?<\/li>\n\n\n\n<li>Millised Symfony\/Flysystemi versioonid muutuvad?<\/li>\n\n\n\n<li>Milliseid versioone <code>composer.lock<\/code> hetkel paigal hoiab (<em>pin<\/em>)?<\/li>\n\n\n\n<li>Millistes API-des on tagasi\u00fchilduvust rikkuvaid muudatusi (<em>breaking changes<\/em>)?<\/li>\n\n\n\n<li>Milliseid andmebaasi migratsioone see m\u00f5jutab?<\/li>\n\n\n\n<li>Kas olemasolev testide komplekt k\u00e4ivitub endiselt?<\/li>\n\n\n\n<li>Millised \u00e4rikriitilised vood vajavad regressioonitestimist?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sest Laraveli p\u00e4randrakenduses on uuendamise teekond sageli keerulisem kui uuendamine ise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Mis on olnud suurim Laraveli uuendamise takistus, millega olete kokku puutunud \u2014 \u00fchildumatu pakett, Composeri konfliktid, PHP v\u00f5i midagi muud?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Loe edasi:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; <a href=\"https:\/\/airasystems.io\/insights\/et\/sisemised-arirakendused\/\" data-type=\"post\" data-id=\"346\">S\u00fcsteemide moderniseerimine avalikus sektoris: praktiline tee kriitiliste s\u00fcsteemide uuendamiseni ilma h\u00e4ireteta<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;Uuendame Laraveli&#8221; k\u00f5lab nagu lihtne \u00fclesanne. Kuni avate composer.json faili. P\u00e4randprojekt v\u00f5ib t\u00f6\u00f6tada suurep\u00e4raselt Laravel 7 v\u00f5i 8 peal, kuid uuendamine kaasaegsele versioonile v\u00f5ib vallandada terve ahela \u00fchilduvusprobleeme. Siin on m\u00f5ned k\u00f5ige levinumad Laraveli p\u00e4rands\u00fcsteemi uuendamine seotud probleemid. 1. Vana projekti poolt kasutatav pakett ei \u00fchildu uue Laraveliga See on ilmselt k\u00f5ige masendavam stsenaarium. Rakendus [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":416,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[375,377],"tags":[384,380,391,387,389],"class_list":["post-414","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-parandsusteemide-moderniseerimine","category-laraveli-arendus","tag-composer-et","tag-laravel-et","tag-laravel-update","tag-laraveli-arendus","tag-parandsusteemide-moderniseerimine"],"_links":{"self":[{"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/posts\/414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/comments?post=414"}],"version-history":[{"count":1,"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/posts\/414\/revisions"}],"predecessor-version":[{"id":417,"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/posts\/414\/revisions\/417"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/media\/416"}],"wp:attachment":[{"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/media?parent=414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/categories?post=414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/airasystems.io\/insights\/wp-json\/wp\/v2\/tags?post=414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}