我在试拉威尔5时遇到了点小问题。
我遵循了laracasts中的整个教程,并尝试以与laracasts完全相同的方式执行所有操作,只是更改了模型、表和控制器的名称。
在某个时刻,Route::bind()停止工作,因此,现在当我尝试使用通配符访问路由时,会出现视图,但没有数据。
这是我的routes.php
Route::bind('singers', function($slug, $route){
return App\Singer::whereSlug($slug)->first();
});
Route::resource('singers', 'SingerController', [
'names' => [
'index' => 'singers_index',
'show' => 'singers_show',
'edit' => 'singers_edit',
'update' => 'singers_update',
'create' => 'singers_create',
'store' => 'singers_store',
'destroy' => 'singers_destroy',
],
]);
这是我的SingerController的一些片段
namespace App\Http\Controllers;
use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\CreateSingerRequest;
use App\Singer;
class SingerController extends Controller {
public $restful = true;
public function __construct(Singer $singer){
$this->singer = $singer;
}
public function index()
{
$singers = $this->singer->orderBy('id', 'DESC')->get();
return view('singers.list',compact('singers'));
}
public function show(Singer $singer){
return view('singers.show', compact('singer'));
}
public function edit(Singer $singer){
return view('singers.edit', compact('singer'));
}
public function update(Singer $singer, Request $request){
$singer->fill($request->input());
$singer->save();
return view('singers.show', compact('singer'));
}
public function create(){
return view('singers.new');
}
public function store(Singer $singer, CreateSingerRequest $request){
$singer->create($request->all());
return redirect()->route('singers_index');
}
public function destroy(Singer $singer){
$singer->delete();
return redirect()->route('singers_index');
}
}
现在我尝试在routes中绑定变量“singers”的原因。php,是因为他们在视频中这样做,这样,控制器中的代码就更短了。而且它确实起作用了。然后我添加了销毁功能,它就停止工作了。正如我所说的,我可以看到视图、标记和其中的任何其他文本,但不能看到我传递的数据,除了索引函数,因为我实际上在函数本身进行了雄辩的搜索。
这是我show.blade.php的片段
<b>Full Name: </b> {{ $singer->name.' '.$singer->lastname }}
<br>
<b>Age: </b> {{ $singer->age }}
<br>
<b>Country: </b> {{ $singer->country }}
<br>
<br>
<p>
<b>Bio: </b> {!! nl2br($singer->bio) !!}
</p>
{!! HTML::linkRoute('singers_edit', 'Update', [$singer->slug], ['class' => 'btn btn-primary']) !!}
{!! Form::open(['method'=>'DELETE', 'route'=>['singers_destroy', $singer->slug]]) !!}
<div class="form-group">
{!! Form::submit('Delete', ['class'=>'btn btn-danger']) !!}
</div>
{!! Form::close() !!}
我的索引视图工作正常,其他视图只是表单,但我向其传递变量的任何视图都不起作用,无论我是通过以下方式传递的:
return view('singers.show',compact('singer'));
或者这个:
return view('singers.show')->with('singer',$singer);
所以总结一下:
编辑
路径
请记住,{Singers}通配符实际上是$Singer-
我很好奇,想知道当你重新编辑它的时候,你是真的编辑了它还是使用了原作的副本。我只是做了同样的教程,完全被Jeffrey的魔术难倒了,但是在这里看一下专门关于模型绑定的API
http://laravel.com/docs/master/routing#route-模型绑定
关键点是,必须在活动路由中触发“通配符”,才能启动绑定匿名函数。
在我的例子中,使用原始的命名,我有一个{slg}的通配符,但是他在之前和之后都将其更改为{Song}。不知何故,我把我的留在了宋,当我重新分配变量时,这没有任何影响。
$歌=$this-
但是,一旦您执行路由器绑定,它将永远不会捕获,因为您正在使用slug作为通配符。
$router-
所以当你把那个坏小子绑定到路由::bind('song',function($slug)//第一个字面值“slug”必须是一个字面值{//在我们正在搜索的路由中!!!return\App\song::whereSlug($slug)-
Route::bind('slg',函数($slg)//第一个文字段的slg必须是我们正在搜索的路由中的文字段{//!!返回\App\歌曲::其中Slug($slg)-
所以,我猜你有一个O型的地方,并更正了它在您的编辑。这很微妙,特别是使用了这么多的文字,并且没有代码类型暗示。但是没关系。我们不可能都是杰弗里。因此,如果绑定失败,请先仔细检查。
祝你好运
我刚刚测试过了。
歌手
模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Singer extends Model {
}
SingerController
-您提供的确切代码(此文件当然位于app\Http\Controllers
路径中)。
在路由中。php
:
Route::bind('singers', function($slug, $route){
return App\Singer::whereSlug($slug)->first();
});
Route::resource('singers', 'App\Http\Controllers\SingerController', [
'names' => [
'index' => 'singers_index',
'show' => 'singers_show',
'edit' => 'singers_edit',
'update' => 'singers_update',
'create' => 'singers_create',
'store' => 'singers_store',
'destroy' => 'singers_destroy',
],
]);
如您所见,我在这里添加了完整的命名空间路径:'App\Http\Controllers\SingerController'
,而不仅仅是SingerController
。
我创建了一个简单的Singer
表,其中只包含id
和slug
——只是为了测试(所以我只有这两列),并添加了两条记录:
id slug
1 abc
2 def
我创建的视图:
list.blade.php
:
@foreach ($singers as $s)
{{ $s->slug }}<br />
@endforeach
编辑。刀身php
和显示。刀身php
(完全相同的代码):
{{ $singer->slug }}
{{ $singer->id }}
现在当我跑步时:
超文本传输协议://testpro/Singers
def
abc
正如所料。
当我跑步时:
超文本传输协议
我得到:
abc 1
正如所料。
当我跑步时:
http://testpro/singers/def
我得到:
def 2
正如预期的那样。
这里一切似乎都很好。确保你使用它的方式我显示它应该工作没有任何问题
创造不息,交付不止 Introduction A quick reference guide (cheat sheet) for Laravel 5.1 LTS, listing artisan, composer, routes and other useful bits of information. We intend to build this Cheat Sheet more asse
Laravel 5 Bundles-Modules Bundles-Modules 是一个把应用分成多个包,一个包分成若干个小模块。 这是 laravel5 框架的 bundle 包系统,每个 bundle 都 module 模块化,模块与模块之前互不影响,全新开发目录,适合团队开发,松耦合,可以抛弃自带的 APP 目录了,使用全新的开发目录结构/,使开发变得更简单。 开发目录结构: bundle
Laravel 5.3 Angular Material Starter Demo An online demo is available. Angular (2+) update While this starter used to be an excellent starting point for Laravel 5 & Angular 1.x, using Angular 1.x resu
描述 (Description) 它为路由器提供路由,并使用slash后跟colons和参数名称附加路由器的参数。 语法 (Syntax) router.route(route, name, [callback]) 参数 (Parameters) route - 它可以是路由字符串或正则表达式。 name - 它是路由器参数的名称。 callback - 如果省略回调参数,则为路由器的名称。 例
Route::get('foo', function(){}); Route::get('foo', 'ControllerName@function'); Route::controller('foo', 'FooController'); 资源路由 Route::resource('posts','PostsController'); // 资源路由器只允许指定动作通过 Route::res
目的 部署应用到 OCP,并创建安全加密路由。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 创建工程1. CLI 登录到 OCP $ oc login https://master.example.com:8443 -u admin -p admin2. 创建工程 $ oc new-project lab02 部署应用1. S2I 部署 php 应用 $