質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

998閲覧

【php】【laravel】未ログイン時でも見られるようなページを作りたいです。

kpby2751

総合スコア19

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/10/13 05:02

編集2022/10/14 02:29

前提

LARAVEL v9.33.0 plugin v0.6.1
を使用しています。

laravelでWEBアプリを開発しています。今までweb.phpを通して画面に表示していました。今まで会員制のページだけ作っていたので問題なくRote設定していたのですが、会員ではない(ログインしていない)人にも見られるようなページを作りたいです。

しかし例えば今まで

->middleware(['auth', 'verified'])

としていたものを書かなかったとしてもログインしていないと見られない状態になってしまいます。それはRouteServeProvider.phpで

Route::middlewere('web')

として'web'で定義しているからなのだと思います。'web'はkernel.phpで定義されていました。新しくmiddlewereしないRouteを定義しなければならないと思うのですが、そのために新しくフォルダーを作るべきか、或いはweb.phpなどの既存のフォルダーに書き込むことができるのかよく分かりません。

実現したいこと

ログインしていないユーザーでも見られるようなページを作りたいです。
今はログイン時のみURL('/techview')にアクセスできますが、ログインしていなくてもアクセスできるようにしたいです。

web.php

1<?php 2 3use Illuminate\Support\Facades\Route; 4use App\Http\Controllers\PostController; 5use App\Models\Post; 6use App\Http\Controllers\CommentController; 7use App\Http\Controllers\ProfileController; 8use App\Models\Role; 9use Symfony\Component\HttpKernel\Profiler\Profile; 10use App\Http\Controllers\RoleController; 11 12/* 13|-------------------------------------------------------------------------- 14| Web Routes 15|-------------------------------------------------------------------------- 16| 17| Here is where you can register web routes for your application. These 18| routes are loaded by the RouteServiceProvider within a group which 19| contains the "web" middleware group. Now create something great! 20| 21*/ 22 23Route::get('/', function () { 24 return view('welcome'); 25}); 26 27Route::get('/dashboard', function () { 28 return view('dashboard'); 29})->middleware(['auth', 'verified'])->name('dashboard'); 30require __DIR__.'/auth.php'; 31 32Route::get('/techview', function () { 33 return view('techview'); 34})->name('techview');

RouteServiceProvider.php

1<?php 2 3namespace App\Providers; 4 5use Illuminate\Cache\RateLimiting\Limit; 6use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; 7use Illuminate\Http\Request; 8use Illuminate\Support\Facades\RateLimiter; 9use Illuminate\Support\Facades\Route; 10 11class RouteServiceProvider extends ServiceProvider 12{ 13 /** 14 * Define your route model bindings, pattern filters, and other route configuration. 15 * 16 * @return void 17 */ 18 public function boot() 19 { 20 $this->configureRateLimiting(); 21 22 $this->routes(function () { 23 Route::middleware('api') 24 ->prefix('api') 25 ->group(base_path('routes/api.php')); 26 27 Route::middleware('web') 28 ->group(base_path('routes/web.php')); 29 }); 30 }

kernel.php

1/** 2 * The application's route middleware groups. 3 * 4 * @var array<string, array<int, class-string|string>> 5 */ 6 protected $middlewareGroups = [ 7 'web' => [ 8 \App\Http\Middleware\EncryptCookies::class, 9 \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 10 \Illuminate\Session\Middleware\StartSession::class, 11 \Illuminate\View\Middleware\ShareErrorsFromSession::class, 12 \App\Http\Middleware\VerifyCsrfToken::class, 13 \Illuminate\Routing\Middleware\SubstituteBindings::class, 14 ], 15 16 'api' => [ 17 // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 18 'throttle:api', 19 \Illuminate\Routing\Middleware\SubstituteBindings::class, 20 ], 21 ];

試したこと

・上述の通りweb.phpに表示したいページのRote設定をしたところ、

Attempt to read property "id" on null

のようにログインする必要があると言われた。ログイン時には見られる。

・他のコメントにある通り新たにroutesフォルダーにunlogin.phpを入れて、その中にRoute設定をしたが該当のRouteが見当たらないとされた。

・表示させたいファイル名をtechview.blade.phpから.bladeを抜いたところ、cssが一切表示されなくなった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phper.k

2022/10/13 05:49 編集

開発環境なのにいちいちキャッシュしてないか?
guest

回答2

0

自己解決

<x-app-layout></x-app-layout>で囲っていたからできませんでした。これを<x-guest-layout></x-guest-layout>で囲み直したところ未ログイン表示になりました。

@include('layouts.navigation')

を挿入したところ、ログインしていないと表示されなくなったので、それが原因だと思います。

投稿2022/10/18 00:34

kpby2751

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あくまで「発想」のみの回答となりますが、
「画面自体」ではなく「機能単位」で表示制限をかけてはどうでしょうか。

基本はその画面に誰でもアクセスできるが、「ログインユーザーにだけ表示される機能がある」形です。

投稿2022/10/13 05:08

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kpby2751

2022/10/13 09:00

誰でもアクセスできるようにするためにはどうすれば良いのでしょうか。単にweb.phpでRoute設定するとログインユーザーのみにしか表示されないので、web.phpでのRoute設定が間違っているのか、或いは新たにログインしていないユーザーのためのファイルを作ってRoute設定するべきなのかよく分かりません。
m.ts10806

2022/10/13 09:39

ルーティングだけ見るとtechviewはログイン関係なくアクセスできるように見えますが、そうでもないですか? 元々Laravel自体、デフォルトは認証関係ないはずなので、auth関係が影響してると見えますが、 middlewareの影響なのであれば、ルーティングのファイル自体分けるとか、別途やり方を考えた方がいいかもしれません。
kpby2751

2022/10/13 12:14

routesフォルダー内にunloginファイルを追加してRoute設定したのですが、 Route [techview] not defined. のようにtechviewが定義されていないと表示されました。定義漏れがあるようなのでどこにあるのか教えてもらえませんか。 ```unlogin.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\PostController; use App\Models\Post; use App\Http\Controllers\CommentController; use App\Http\Controllers\ProfileController; use App\Models\Role; use Symfony\Component\HttpKernel\Profiler\Profile; use App\Http\Controllers\RoleController; Route::get('/techview', function () { return view('techview'); })->name('techview'); ``` 新しくControllerを追加するべきなのでしょうか。
m.ts10806

2022/10/13 12:20

unlogin.phpはそもそもどこから読み込ませているのでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問