我的一个Laravel 5.2路由/控制器有问题,特别是我发现Controller method not found的错误
路线:
Route::get( 'guest/shop/{product}', 'GuestShopController@show' )->name( 'guest.shop.show' );
控制器和方法:
class GuestShopController extends ShopController {
public function __construct( ) {
$this->middleware( 'guest' );
}
}
abstract class ShopController extends Controller {
protected function singularProductData( $product ) {
$thumbnails = $product->thumbnails();
return [
'product' => $product,
'thumbnails' => $thumbnails,
'main_thumbnail' => head( $thumbnails ),
];
}
protected function getProducts() {
return Cache::remember(
'products',
3600,
function () {
return Product::active()->get();
}
);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index() {
return view( 'pages.shop.index' )->with(
[
'products' => $this->getProducts(),
'organisation' => request()->attributes->get( 'organisation' ),
]
);
}
/**
* Display the specified product.
*
* @param string $slug
* @param null $product
*
* @return \Illuminate\Http\Response
*/
public function show( $slug, $product = null ) {
if( ! is_a( $product, Product::class ) ) {
$product = Product::active()->where( 'slug', $slug )->firstOrFail();
}
return view( 'pages.shop.product' )->with( $this->singularProductData( $product ) );
}
/**
* Display the specified product modal.
*
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function modal( $id ) {
$product = Product::active()->findOrFail( $id );
if( request()->ajax() ) {
return view( '_partials.shop.modal-content' )->with( $this->singularProductData( $product ) );
}
return $this->show( $product->slug, $product );
}
}
调试时我已经完成的操作:
Ranphp artisan路由:列表
和确认的路由、控制器和中间件都匹配
- 运行
composer dumpautoload
- 已将路线移动到路线的顶部。php
- 将抽象ShopController的方法移动到GuestShopController,并将GuestShopController的扩展更改为Laravel默认控制器
@Chikurubi的回答基本上是正确的。这使我改变了url结构,并稍微重新调整了控制器方法。
Route::get( 'guest/shop/modal/{productId}', 'GuestShopController@modal' )->name( 'guest.shop.modal' );
Route::get( 'guest/shop/{slug}', 'GuestShopController@show' )->name( 'guest.shop.show' );
在抽象的ShopController上:
/**
* Display the specified product.
*
* @param string $slug
* @param null $product
*
* @return \Illuminate\Http\Response
*/
public function show( $slug ) {
$product = Product::active()->where( 'slug', $slug )->firstOrFail();
return view( 'pages.shop.product' )->with( $this->singularProductData( $product ) );
}
/**
* Display the specified product modal.
*
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function modal( $productId ) {
$product = Product::active()->findOrFail( $productId );
if( request()->ajax() ) {
return view( '_partials.shop.modal-content' )->with( $this->singularProductData( $product ) );
}
return redirect()->action( "{$this}@show", [ $product->slug ] );
}
我现在将其更改为{slug}
作为路由参数。在最近从5.1升级到5.2之后,这可能是我不知道的框架中的一个变化,控制器方法和路由中的参数名称必须匹配?不管怎么说,现在修好了,很开心。
因为我有一个modals的路径,它使用相同的路径,附加了modal,我也改变了这一点,这样Laravel就不会被它弄糊涂了。模式路径现在是/guest/shop/modal/{productId}
。modal controller方法现在只通过$productId
参数查找产品,如果请求不是通过ajax来的,它会通过重定向()将用户重定向到show方法-
由于modal和show路线的结构相似,我确保将modal路线放在第一位,否则它将始终返回404。
确切地说,你在浏览器中放了什么url?你有
Route::get('guest/shop/{product}', 'GuestShopController@show')->name('guest.shop.show');
但是show方法需要两个参数$slug和一个可选的$product,所以路由应该是
Route::get('guest/shop/{slug}/{product?}', 'GuestShopController@show')->name('guest.shop.show');
否则,如果您只需要产品,则方法和路线应如下所示:
Route::get('guest/shop/{product?}', 'GuestShopController@show')->name('guest.shop.show');
public function show($product = null)
{
}
由于某种原因,即使目标控制器类已经存在于正确的路径中,也找不到它。 路线 我的控制器路径是App- 这是我的控制器: 我已经尝试了作曲家转储-自动加载。我使用laravel框架8.0,所以我也试图恢复和使用7.24。仍然没有找到目标类。
我一直在犯这个错误 你们可以看到,我的项目里有那个文件。 我还尝试重新启动我的本地MAMP服务器并清除缓存 我也做了 请让我知道我还能做什么。 路线 route::get(“/”,function(){return redirect::to(“/baby/signin”);});route::get(“/baby/signin”,“BabyAccountController@signin”);
我有一个REST API,当没有找到记录时返回404。 我使用 Rx 和 j 查询来调用 API。我可以捕获404响应,但是错误不断出现在浏览器的控制台中,就好像找不到资源URL一样,而实际上只是因为没有找到记录。 我如何处理这种(没有找到记录)404响应,使它们不出现在控制台中? 还是“没有找到记录”实际上应该用空的尸体返回200 OK?
本文向大家介绍thinkPHP控制器变量在模板中的显示方法示例,包括了thinkPHP控制器变量在模板中的显示方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP控制器变量在模板中的显示方法。分享给大家供大家参考,具体如下: 控制器中变量 模板中引用位置一:php代码中,直接用$i; 模板中引用位置二:模板中直接应用{$i}或者 class="{$unlogined}"
本文向大家介绍matplotlib.pyplot绘图显示控制方法,包括了matplotlib.pyplot绘图显示控制方法的使用技巧和注意事项,需要的朋友参考一下 在使用Python库时,常常会用到matplotlib.pyplot绘图,本文介绍在PyCharm及Jupyter Notebook页面中控制绘图显示与否的小技巧。 在PyCharm中显示绘图 在绘图代码最后加上“plt.show()”
我们面临错误,应用程序无法连接到队列管理器,原因代码为mqrc 2538, “侦听器可用,但当我试图显示此侦听器的状态时,它显示未找到MQ对象。” 我们已经检查了错误日志,但没有相关客户端失败的信息。我们手动启动了监听器,监听器信息只在错误日志中可用。 我们还检查了“/var/mqm/error”,我们发现了FDC文件“Probe ID:xy132002”,我们与sysadmin有联系,他们挂载了