[英]How do you go up a level in directory in laravel?
我試圖完成 laracast 課程,但遇到了錯誤。 運行此鱈魚后
Route::get('posts/{post}', function ($slug){
$path = __DIR__."/../resources/posts/{$slug}.html";
ddd($path);
if (! file_exists($path)){
return redirect('/');
}
$post = file_get_contents($path);
return view('post', [
'post' => $post]);
})->where('post', '[A-z_\-]+');
我想看到第一個post.html,但是ddd window打開說“內容:”D:\ Projects\laravel\blog\routes/../resources/posts/first-post.html“”意思是它沒有t 將“/../”計為“上一級目錄”,但只需將其讀取為文件夾名稱。 我仔細檢查了目錄 blog/resources/posts/first-post.html 確實存在。
您可以使用:
$path = resource_path('views/posts/'. $slug .'.html');
您可以通過在應用程序的resources/views
目錄中放置一個擴展名為.blade.php
的文件來創建視圖,而不是.html
。
.blade.php
擴展通知框架該文件包含一個Blade 模板。
您需要將first-post.html
重命名為first-post.blade.php
。
創建視圖后,您可以使用全局視圖助手從應用程序的路由或控制器之一返回它,而無需file_get_contents
。
return view('first-post', $data);
如您所見,傳遞給視圖助手的第一個參數對應於resources/views
目錄中視圖文件的名稱。 第二個參數是應該對視圖可用的數據數組。
參考您的路線; 如果要檢查文件是否存在,可以使用:
$exists = view()->exists('first-post'); // return boolean
因此,您可以使用的最終代碼:
Route::get('posts/{post}', function ($slug) {
if (view()->exists($slug)) {
return view($slug);
}
return abort(404); // Show 404 page if view doesn't exists
});
最后說明
至少,您應該查看官方 Laravel 文檔的介紹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.