チェックボックスが選択されている/選択されていないときに、laravel ブレードでレイアウトを切り替えようとしていますが、これまでのところ目に見える結果はありません。何が欠けていますか? これが私のコードの関連部分です。
刃index.blade.php
...
@if ($tab == true)
<div style="background-color:green;height:100px;width:200px;">
//for test porposes a div with diff color only
some text
</div>
<input type="checkbox" name="layout" value="1" onclick="processForm()" checked>
@else
<div style="background-color:red;height:100px;width:200px;">
some text
</div>
<input type="checkbox" name="layout" value="1" onclick="processForm()">
@endif
...
@endsection
@section('scripts')
<script type="text/javascript">
function processForm() {
$.ajax( {
type: 'POST',
url: 'articles/layout',
data: { layout : $('input:checkbox:checked').val()},
success: function(data) {
$('#message').html(data);
}
} );
}
</script>
@stop
ルート
Route::resource('articles','ArticleController');
Route::post('articles/layout', [
'as' => 'articles.layout',
'uses' => 'ArticleController@layout'
]);
最後にコントローラーArticleController.php
<?php
namespace Vanguard\Http\Controllers\Web;
use Illuminate\Http\Request;
use Vanguard\Http\Controllers\Controller;
use Vanguard\Article;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::latest()->paginate(10);
$page_title = "hello world";
$page_title_sml = "small hello world";
if (!isset($tab)) {
$tab = false;
}
return view('articles.index',compact('articles', 'page_title' , 'page_title_sml', 'tab'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
...
//custom function
public function layout(Request $request)
{
$tab = $request->layout;
return redirect()->route('articles.index')
->with('success','Layout changed');
}
//end custom function
}
私のロジックは次のとおりです。Ajaxモニターチェックボックス>チェック/チェック解除すると、Ajaxは投稿リクエストを記事/レイアウトに送信します> ArticleController@layoutをトリガーします>チェックボックス変数を処理します>コントローラーのarticles.indexにリダイレクトします>それに応じてブレードを表示します。
私は何が欠けていますか?これを達成するためのより良い/より簡単な方法はありますか? ありがとう